servidor de delegação de prefixo DHCPv6 para linux?

7

Qual cliente linux DHCPv6 posso configurar para que ele solicite um prefixo em uma interface e, em seguida, em todas as outras interfaces, ele fornecerá endereços (ou, se solicitado, uma delegação de prefixo menor)? Também seria necessário configurar as rotas e os anúncios do roteador.

Se não houver uma maneira de fazer isso, qual é a versão IPv6 da programação de um roteador IPv4 para fazer NAT, onde quer que ele seja colocado? Basicamente, estou tentando entender como um fabricante configuraria seus roteadores compatíveis com IPv6 para que um cliente pudesse conectá-los e eles funcionassem. Não estou falando sobre o NAT real no IPv6, mas uma forma de um roteador ter um cliente de delegação de prefixo DHCPv6 que pegaria o prefixo recebido e o dividiria em prefixos e endereços menores e executaria um servidor DHCPv6 para cada link downstream separado.

Eu adicionei um diagrama:

Existe (um) pedaço (s) de software que eu posso rodar no Linux que pode ser configurado uma vez e depois colocar no lugar número 3, 5 ou 8 e ele automaticamente se configura dependendo do prefixo que foi delegado? ?

    
por Azendale 01.01.2012 / 01:31

3 respostas

5

Esta não é uma resposta completa, já que eu ainda estou trabalhando com alguns dos problemas, mas aqui está o que eu tenho até agora, tentando implantar uma configuração quase idêntica (embora por razões um pouco diferentes). / p>

A boa notícia é: isso pode ser feito dentro das especificações. De fato, as especificações foram explicitamente projetadas para incentivar esse tipo de subdelegação de prefixos, em grande parte para evitar a necessidade de múltiplas camadas dolorosas de NAT, enquanto ainda permite flexibilidade na forma como as redes são estruturadas.

A má notícia é: não há softwares prontos para uso que solicitem um prefixo de upstream, configurem endereços e rotas localmente e distribuam sub-prefixos para redes downstream. Inferno, nem parece ser possível conectar partes de software pré-existentes no Linux (sem patch) para fazer o que precisa ser feito. Pior de tudo, não parece que alguém realmente se importe com isso.

O que eu tenho configurado e funcionando até agora é assim:

  • Estou usando o cliente WIDE DHCPv6 ( dhcp6c ) para solicitar um prefixo da rede "upstream"; Escolhi este cliente através do cliente DHCP do ISC porque, no momento em que o configurei, era o único cliente DHCPv6 que atribuía endereços automaticamente do prefixo recebido para outras interfaces. Eu gostaria de pensar que outros clientes DHCP melhoraram desde então, mas eu não poderia me incomodar em verificar neste momento.

    Infelizmente, não expõe os detalhes do prefixo delegado ao seu hook script externo, o que significa que você não pode (facilmente) reescrever sua configuração dhcpd "downstream".

  • Servidor ISC DHCP (no modo v6) para atribuir prefixos à rede "downstream". Escolhi isso porque o servidor DHCP do WIDE, até onde posso dizer, só pode delegar prefixos estaticamente, não dinamicamente. É relativamente fácil configurar o servidor ISC DHCP para fazer a delegação de prefixo dinâmico, surpreendentemente; algo tão simples como isso fará o truque:

    subnet6 2001:db8:1234:ffff::/64 {
      prefix6 2001:db8:1234:a000:: 2001:db8:c0f:aff0:: /60;
    }
    

    Isso escutará em qualquer interface que tenha um endereço em 2001:db8:1234:ffff::/64 e distribuirá / 60s do intervalo especificado. Contanto que você possa forçar o dhcp6c a atualizar a configuração acima (a seguir!), Você pode atualizar automaticamente a configuração do dhcpd quando o super-prefixo delegado for alterado.

  • dhcp6c irá, como mencionado anteriormente, obter um parâmetro script em seu arquivo de configuração, para ser executado quando uma resposta DHCPv6 for recebida. Infelizmente, ele apenas expõe parâmetros como o servidor SIP e resolvedores de DNS, e não informações úteis como o prefixo que foi delegado. Então, eu tenho o seguinte scriptlet para fazer isso por mim:

    #!/bin/sh
    
    (sleep 3;
    
    base_prefix="$(ip -6 ad sh eth0 | grep 'scope global' | cut -d ' ' -f 6 | cut -d : -f 1-4 | sed 's/00$//')"
    
    if [ "$base_prefix" = "" ]; then
      exit 0
    fi
    
    cat <<-EOF >/etc/dhcp/dhcpd6.conf
    default-lease-time 1800;
    max-lease-time 7200;
    
    subnet6 ${base_prefix}00::/64 {
      prefix6 ${base_prefix}a0:: ${base_prefix}f0:: /60;
    }
    EOF
    
    svc -t /etc/service/dhcp6d) &
    
    exit 0
    

    Fazer todo o trabalho em um sub-shell significa que eu posso esperar um pouco (o sleep 3 ) pelo cliente DHCP para realmente configurar a interface (parece que o script é executado antes configurar a interface). Ele funciona de forma confiável o suficiente. Note que o meu ISP me delega um /56 , por isso estou apenas removendo os dois zeros do prefixo recebido. Se você tiver a sorte de obter todo o /48 , o canal para atribuir base_prefix seria muito mais simples.

O que não já existe, e estou certo de que requer a correção do código-fonte, está configurando rotas quando um prefixo é delegado. Tanto quanto eu posso ver, nenhum servidor DHCP tem a capacidade interna para adicionar a rota automaticamente (eu examinei cuidadosamente% WIDE dhcp6s , certamente não pode fazê-lo, e não consigo encontrar nada sobre o ' tubos para sugerir que ISC DHCP faz isso). Não há nem mesmo a capacidade de executar um comando externo que recebe o prefixo que está sendo delegado e o endereço local do link do cliente (o ISC DHCP tem on commit { execute(...) } , mas nenhuma maneira de desmaiar o endereço do link do cliente). / p>

O problema é que, sem esse bit crucial de funcionalidade, o roteador que está fazendo a delegação não pode saber para onde encaminhar o tráfego para o prefixo depois. Essa é uma limitação bastante fundamental, e eu estou um tanto chocado que ninguém parece ter lidado com esse problema antes - ou se eles tiverem, eles estão realmente em silêncio sobre isso.

Acabei de desenvolver um patch para o ISC DHCP para fornecer uma "expressão de dados" extra para a funcionalidade eval; isto permite-me desembolsar para um programa externo que pode então adicionar / remover rotas na alocação de prefixo e liberação / expiração; o patch está disponível no link (contra o ISC DHCP 4.3.1); Eu não tenho um script para adicionar a rota (ainda), mas provavelmente vou adicioná-la em contrib nessa ramificação depois que eu a escrever.

ADENDO: Acontece que mais modificações foram necessárias para permitir que as rotas fossem removidas novamente; que agora foi adicionado à ramificação client-address-data-expression , juntamente com um pequeno script Ruby que mostra como tudo pode ser combinado.

    
por 17.11.2014 / 00:27
1

O programa que faz a delegação de prefixo é radvd (Daemon de anúncio do roteador). Outros hosts IPv6 no link devem configurar automaticamente um endereço globalmente roteado a partir do prefixo anunciado.

O IPv6 não requer NAT, pois espera-se que os hosts que exigem acesso à Internet tenham endereços de roteamento global. Você precisa ter cuidado com as regras do Firewall para evitar a infiltração da Internet.

Espera-se que os ISPs forneçam um bloco de rede / 48 ou / 56 aos seus clientes. Isso requer um pouco de inteligência do lado do ISP para garantir que cada roteador receba um bloco único. Um bloco / 64 provavelmente será usado como o uplink para a rede do IPS. O roteador fica então livre para anunciar quantos / 64s forem do resto do bloco como desejar. Provavelmente apenas um seria usado neste cenário.

Existe também uma implementação do IPv6 DHCP.

Uma configuração rápida que foi feita é configurar o roteador para usar o tunelamento 6to4. O radvd será autoconfigurado para esta configuração, mas requer um endereço IPv4 de roteamento público.

EDIT: Embora radvd não possa subdelegar prefixos, ele pode anunciar automaticamente um prefixo / 64 com base em um endereço roteavel disponível. Ele também possui Base6to4 para anunciar automaticamente o prefixo 6to4 do roteador. A subdelegação requer algum planejamento e está além do que se espera de uma configuração plug and play.

EDIT2: Como IPv4 O IPv6 não possui um método para determinar qual rede pertence nas redes conectadas à base eth1 ou eth2 no endereço atribuído à interface eth0. Depois de ter vários segmentos de rede, você precisa começar a gerenciar os endereços atribuídos a cada segmento. A boa notícia é que isso geralmente pode ser feito uma vez.

O IPv6 torna mais fácil, pois 5 e 8 podem ser facilmente administrados / 49 ou / 50 sub-redes do / 48 delegadas para 3. Uma abordagem alternativa seria configurar 3, 5 e 8 como pontes na mesma sub-rede / 64 . Em tal configuração, eles funcionariam como switches. Os roteadores de risco de geração de sub-rede automática 5 e 8 optam por delegar a mesma sub-rede.

Conecte e ore roteadores para uso doméstico apenas use um bloco de endereço privado padrão. Eles quebram rapidamente quando configurados como mostrado no diagrama. Misturar roteadores com blocos de endereços padrão diferentes pode funcionar. Caso contrário, você precisa garantir que cada roteador tenha diferentes blocos de endereços.

    
por 01.01.2012 / 07:13
-1

Parece que você precisa de um protocolo de roteamento, como o RIPng. Você pode instalar o quagga nessas caixas, configurar as interfaces que precisam do protocolo de roteamento (uma vez) e ir embora.

    
por 30.04.2013 / 00:24

Tags