IER60808: Auto-configuração IPv6

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar


Em redes IPv4, a auto-configuração de hosts se faz com o serviço DHCP. Em redes IPv6 existem duas formas de auto-configurar hosts:

  • SLAAC (Auto-configuração stateless): um host gera seu próprio endereço IPv6 a partir de informação anunciada periodicamente pelo gateway da rede. O gateway não sabe que host usa qual endereço IPv6.
  • DHCPv6: similar ao serviço DHCP para IPv4, um host obtém toda sua configuração de rede (incluindo seu endereço IPv6) de um servidor DHCPv6. Esse servidor mantém informações sobre que host usa qual endereço IPv6.


SLAAC

Com SLAAC, um host IPv6 tem a capacidade de auto-configurar seu endereço em uma subrede. Com isso, facilita-se a configuração de rede de um equipamento, pois torna-se desnecessário obter e definir manualmente seu endereço IPv6, além de outras informações tais como máscara de rede, gateway e servidores DNS. No entanto, isso depende de o gateway (ou algum outro equipamento) fornecer essas informações de configuração para os hosts em sua(s) subrede(s). Isso não é novidade, pois em redes IPv4 o serviço DHCP tem exatamente esse papel. Porém, com o surgimento de IPv6, a auto-configuração se tornou uma função do próprio protocolo de rede. Em redes IPv4, DHCP é um serviço que depende de softwares específicos tanto nos hosts (clientes) quanto no servidor. A auto-configuração IPv6 é muito mais simples, e não demanda nenhum software adicional nos hosts.

A autoconfiguração do IPV6, chamada stateless, é o procedimento com que os hosts de uma subrede podem definir seus próprios endereços, baseados em informações locais (ex: endereço MAC de sua interfaces de rede Ethernet, Wifi, ou Bluetooth), e em informações recebidas de roteadores, denominadas mensagens Router Advertisement. Sendo assim, o roteador é o responsável por fornecer informações sobre a SUBrede para que seja possível que hosts que nela residem se autoconfigurem. A autoconfiguração do IPV6 é chamada de stateless porque o roteador não mantém nenhum registro sobre a configuração de cada host. Isso é consequência da capacidade dos hosts se autoconfigurarem apenas sabendo a subrede a que pertencem. No entanto, para que seja possível a autoconfiguração em redes baseadas em IPV6, duas etapas de configuração devem ser aplicadas, sendo elas:

  • Configuração do prefixo ou neste caso a identificação da subrede. Nesta etapa, os prefixos são coletados pelos hosts por meio de mensagens ICMPv6, chamadas de Router Advertisement, as quais são transmitidas pelos roteadores.
  • Configuração do sufixo do host identificação do host propriamente dito. Nesta etapa, o sufixo de host é automaticamente obtido a partir do endereço MAC de 48 bits obtido de sua próprio interface de rede Ethernet ou Wifi. Uma vez que um endereço MAC possui apenas 48 bits, porém os sufixos IPV6 possuem 64 bits, os 16 bits restantes para completar o endereço IPV6 são inseridos por uma função de expansão chamada de Extended Unique Identifier (EUI). A função EUI executa as seguintes etapas:
  1. Separa o endereço MAC em dois blocos de 24 bits
  2. Adiciona os algarismos hexadecimais FFFE entre os dois blocos
  3. Muda o sétimo bit do primeiro byte para 1 para sinalizar que o endereço é gerenciado localmente.


Este exemplo mostra a geração do sufixo de um endereço IPv6:

Sufix ipv62.jpg

Protocolo NDP (Neighbor Discovery Protocol)


A auto-configuração IPv6 depende do protocolo NDP, implementado usando mensagens ICMPv6. De acordo com este tutorial do site IPv6.br, no caso da autoconfiguração de hosts, o protocolo fornece suporte para a realização de três funcionalidades:

  • Parameter Discovery: atua na descoberta por um host de informações sobre o enlace (como MTU) e sobre a Internet (como limite de saltos).
  • Address Autoconfiguration: trabalha com a autoconfiguração stateless de endereços nas interfaces de um nó.
  • Duplicate Address Detection: utilizado para descobrir se o endereço que se deseja atribuir a uma interface já está sendo utilizado por um outro nó na rede.


Já no caso da transmissão de pacotes entre nós, o suporte é dado para a realização de seis funcionalidades:

  • Router Discovery: trabalha com a descoberta de roteadores pertencentes ao enlace.
  • Prefix Discovery: implementa a descoberta de prefixos de redes do enlace, cuja a finalidade é decidir para onde os pacotes serão direcionados numa comunicação (se é para um roteador especifico ou direto para um nó do enlace).
  • Address Resolution: descobre o endereço fisico através de um endereço lógico IPv6.
  • Neighbor Unreachability Detection: permite que os nós descubram se um vizinho é ou se continua alcançavel, uma vez que problemas podem acontecer tanto nos nós como na rede.
  • Redirect: permite ao roteador informar ao nó uma rota melhor ao ser utilizada para enviar pacotes a determinado destino.
  • Next-Hop Determination: algoritmo para mapear um endereço IP de destino em um endereço IP de um vizinho para onde o trafego deve ser enviado.


Tratando especificamente da auto-configuração IPv6, o protocolo NDP usa mensagens ICMPv6 do tipo RA (Router Advertisement - Anúncio de Roteador) para anunciar parâmetros da subrede. Essas mensagens são tipicamente enviadas periodicamente pelo gateway, e contêm estas informações:

  • prefixo da subrede
  • endereço do servidor DNS
  • MTU
  • rotas para subredes específicas
  • domínios DNS


Em sistemas Linux, o envio de mensagens RA por um roteador são feitas pelo software radvd.


Ao receber uma mensagem RA, um host pode completar sua auto-configuração, e assim se comunicar na rede IPv6. A figura a seguir mostra mensagens RA enviadas por um roteador:

Pji11103-Radv.jpg

Atividade

Neste experimento, demonstra-se uma rede em que se usa SLAAC para auto-configuração de rede dos computadores. A rede é pequena, e possui apenas duas subredes, como mostrado nesta figura:

IER-dhcpv6-Rede0.png

Em ambos segmentos deve-se usar SLAAC, e para isso o roteador r1 deve ativar o serviço radv. Assim, r1 faz o papel de divulgador de informações de auto-configuração nessas redes.

Siga os passos deste experimento para ver como a auto-configuração com SLAAC pode ser usada. Caso você não possa realizar esta atividade, veja sua execução no video disponibilizado.


Video com demonstração desta atividade (passos 1 a 13)


  1. Execute o netkit2
  2. Arraste este link para o arquivo de configuração rede0.conf e solte-o sobre a janela do netkit2
  3. Use o menu File->Graph para visualizar a topologia da rede
  4. Use o menu Network->Start para iniciar a rede
  5. Verifique os endereços IPv6 globais usado por pc1 e pc2. Compare-os com os endereços globais usados por r1.
  6. Teste a comunicação entre pc1 e pc2 com ping6.
  7. Em r1 crie o arquivo /etc/radvd.conf com este conteúdo:
    interface eth1 {
      AdvSendAdvert on;
      MinRtrAdvInterval 3;
      MaxRtrAdvInterval 10;
      prefix ccdd:0:0:0:0:0:0:0/64 {
      AdvOnLink on;
      AdvAutonomous on;
      };
    };
    interface eth0 {
      AdvSendAdvert on;
      MinRtrAdvInterval 3;
      MaxRtrAdvInterval 10;
      prefix aabb:0:0:0:0:0:0:0/64 {
      AdvOnLink on;
      AdvAutonomous on;
      };
    };
    
  8. Em r1 execute este comando:
    /etc/init.d/radvd start
    
  9. Verifique os endereços IPv6 globais usado por pc1 e pc2. Compare-os com os endereços globais usados por r1.
  10. Teste a comunicação entre pc1 e pc2 com ping6.
  11. Verifique a tabela de rotas IPv6 em pc1 e pc2. Compare o endereço do roteador default com o do gateway.
  12. Selecione o host pc1 e, em seguida, o menu Wireshark->eth0.
  13. Observe as mensagens de anúncio de roteador recebidas. Que informações elas contêm ?
  14. Agora experimente por esta rede no ar usando SLAAC ! Talvez seja necessário algo mais ... Se não puder realizar este exercício, veja sua execução neste video:

    Demonstração deste exercício

DHCPv6


O protocolo DHCPv6 guarda semelhanças com DHCP usado em redes IPv4. Ele implementa um serviço de configuração dinâmica de endereços. Assim como DHCP, DHCPv6 pode fornecer muitas outras informações aos hosts, tais como endereços de servidores WINS, proxy HTTP, programa de boot, entre outros.


De acordo com o livro Laboratório de IPv6, na página 51, basicamente, a comunicação entre o servidor DHCP e as máquinas cliente se dá com a troca de quatro mensagens:

  • Solicit: enviada pelo cliente ao grupo multicast all-dhcp-agents (ff02::1:2) com o intuito de localizar o servidor DHCP.
  • Advertise: enviada pelo servidor DHCP, diretamente ao endereço link-local do cliente, para indicar que ele pode fornecer as informações necessárias para a configuração.
  • Request: enviada pelo cliente diretamente ao grupo multicast all-dhcp-agents (ff02::1:2) para requisitar ao servidor DHCP os dados de configuração.
  • Reply: enviada pelo servidor DHCP ao endereço de link-local do cliente como resposta à mensagem Request.


O DHCPv6 possui dois modos de operação:

  • Stateful: o servidor DHCPv6 é responsável por informar aos clientes os endereços IPv6 que devem ser utilizados em suas interfaces de rede, mantendo o estado de qual endereço foi atribuído a determinado cliente.
  • Stateless: o servidor DHCPv6 informa apenas parâmetros de configuração como endereço dos servidores DNS ou servidores SIP da rede aos clientes, sem a necessidade de guardar qual informação individual de cada cliente. Nesse segundo caso, o cliente deverá obter o endereço IPv6 de sua interface de outra forma, seja manualmente ou SLAAC.


Para usar DHCPv6, é necessário um software específico a ser executado no servidor. Esse software responde a requisições de configuração de rede enviadas por clientes, fornecendo-lhes seus endereços IPv6 e demais configurações. Em sistemas Linux (e outros da família Unix), o software mais usado é o ISC DHCP server. Como visto no caso de DHCP para redes IPv4, esse software deve ser copnfigurado a partir do arquivo /etc/dhcp/dhcpd6.conf. O exemplo de configuração a seguir mostra a declaração de uma subrede IPv6 com a respectiva faixa de endereços a serem concedidos e o servidor DNS a ser informado:

default-lease-time 600;
max-lease-time 7200;

subnet6 2001:db8::/64 {
  range6 2001:db8::1234 2001:db8::abcd;
  option dhcp6.name-servers 2001:db8::abc;
}


Muitas opções para DHCPv6 podem ser usadas. Maiores detalhes podem ser encontrados na documentação sobre as opções.

Atividade

Neste experimento, demonstra-se uma rede em que se usam tanto SLAAC quanto DHCPv6 para auto-configuração de rede dos computadores. A rede é pequena, e possui apenas duas subredes, como mostrado nesta figura:

IER-dhcpv6-Rede0.png

No segmento onde está pc2 deve-se usar SLAAC, e com isso pc2 se auto-configura sem precisar de nenhuma informação adicional. O roteador r1 deve ativar o serviço radv, como mostrado na atividade sobre SLAAC. Mas no segmento onde está pc1, deve-se usar DHCPv6. Isso implica alguns passos a mais:

  • Configurar e executar o serviço dhcp em r1
  • Ativar o cliente dhcp em pc1

Siga os passos deste experimento para ver como a auto-configuração com DHCPv6 pode ser usada, e qual a diferença em relação a SLAAC. Caso você não possa realizar esta atividade, veja sua execução no video disponibilizado.

Video com este experimento


  1. Execute o netkit2
  2. Arraste este link para o arquivo de configuração rede0.conf e solte-o sobre a janela do netkit2
  3. Use o menu File->Graph para visualizar a topologia da rede
  4. Use o menu Network->Start para iniciar a rede
  5. Verifique os endereços IPv6 globais usado por pc1 e pc2. Compare-os com os endereços globais usados por r1.
  6. Teste a comunicação entre pc1 e pc2 com ping6.
  7. Em r1 crie o arquivo /etc/radvd.conf com este conteúdo:
    interface eth1 {
      AdvSendAdvert on;
      MinRtrAdvInterval 3;
      MaxRtrAdvInterval 10;
      prefix ccdd:0:0:0:0:0:0:0/64 {
      AdvOnLink on;
      AdvAutonomous on;
      };
    };
    interface eth0 {
      AdvSendAdvert on;
      MinRtrAdvInterval 3;
      MaxRtrAdvInterval 10;
      AdvManagedFlag on;
    };
    
    Mesmo que se use DHCPv6 é necessário usar SLAAC para obter o endereço do gateway. Por isso em r1 se ativou o serviço radvd, porém indicando que o host deve usar configuração de endereço stateful (opção AdvManagedFlag).
  8. Em r1 crie o arquivo /etc/dhcp/dhcpd6.conf com este conteúdo:
    default-lease-time 600;
    max-lease-time 7200;
    
    subnet6 aabb::/64 {
      range6 aabb::10 aabb::a00;
      option dhcp6.name-servers aabb::2;
    }
    
    subnet6 ccdd::/64 {
      range6 ccdd::10 ccdd::a00;
      option dhcp6.name-servers aabb::2;
    }
    
  9. Em r1 execute este comando:
    /etc/init.d/radvd start
    
  10. Verifique os endereços IPv6 globais usado por pc1 e pc2. Compare-os com os endereços globais usados por r1.
  11. Teste a comunicação entre pc1 e pc2 com ping6.
  12. O host pc1 não obteve seu endereço IPv6, pois ele deve fazê-lo via DHCPv6. Sendo assim, faça o seguinte:
    • Em r1 ative o servidor DHCPv6 com este comando:
      touch /var/lib/dhcp/dhcpd6.leases
      chown dhcpd.dhcpd /var/lib/dhcp/dhcpd6.leases
      dhcpd -6 -cf /etc/dhcp/dhcpd6.conf
      
    • Em pc1 execute o cliente DHCPv6 com este comando:
      dhclient -6 eth0
      
  13. Verifique o endereços IPv6 global usado por pc1. Compare-o com os endereços globais usados por r1.
  14. Teste a comunicação entre pc1 e pc2 com ping6.
  15. Verifique a tabela de rotas IPv6 em pc1 e pc2. Compare o endereço do roteador default com o do gateway.
  16. Uma reflexão: qual benefício existe em usar DHCPv6, ao invés de somente SLAAC ?

Descoberta de Vizinhança


Obs.: texto copiado literalmente de: Laboratório de IPv6.


A descoberta de vizinhança por meio do protocolo Neighbor Discovery no IPv6 é um procedimento realizado pelos nós de uma rede para descobrir endereços físicos dos dispositivos vizinhos presentes no mesmo enlace. A função deste protocolo se assemelha à função do ARP e do RARP no IPv4.

  • O procedimento é iniciado quando um dispositivo tenta enviar um pacote cujo endereço físico de destino é desconhecido. O nó solicitante envia uma mensagem Neighbor Solicitation (NS) para todos os nós do enlace pertencentes ao grupo multicast solicited-node (ff02::1:ffXX:XXXX), de modo que XX:XXXX são os últimos 24 bits do endereço IPv6 em que está interessado.
  • É possível notar que, por uma coincidência dos últimos 24 bits, é bastante provável que apenas o nó de destino faça realmente parte deste grupo. Isto é um truque interessante do IPv6 para diminuir o tráfego deste tipo de pacote na rede.
  • Na mensagem NS, o endereço IPv6 a ser resolvido é informado no campo Target. O campo Source link-layer address informa ao nó de destino o endereço MAC do nó de origem, poupando-o de ter que fazer o mesmo procedimento no sentido inverso.
  • O nó de destino, dono do IPv6 requisitado, ao receber este pacote, envia uma mensagem Neighbor Advertisement (NA) como resposta diretamente ao nó requisitante. O seu endereço físico será informado no campo Target link-layer address.
  • A informação de mapeamento entre endereços IP e endereços físicos é armazenada em uma tabela chamada neighbor cache. Nela também fica registrado o status de cada destino, informando se o mesmo é alcançável ou não.

Atividades

A figura abaixo apresenta o diagrama esquemático da rede a ser montada/analisada. Observe que todos os IPv6 Global Unicast já estão definidos na mesma, são esses IPs que utilizaremos em nosso experimento.

Diagrama rede IPv6.jpg

  1. Obtenha o arquivo de configuração ns.conf
  2. Rode o NetKit em seu computador. Em um terminal digite:
    netkit2 &
    
  3. No menu File - Load and Run, procure o arquivo /home/aluno/Downloads/ns.conf e clique em OK. Abrirá uma janela com 6 abas, onde cada uma delas é um terminal de configuração do respectivo equipamento: pc1-4 ou r1-2.
  4. Ao clicar no menu File - Graph, pode-se ter uma visão da rede a ser simulada e conferir se é equivalente ao diagrama proposto.
  5. Faça um ping6 entre o pc1 ao pc3:
    ping6 -c4 2001:bcc:1f0:1::103
    
  6. Faça um ping6 entre o pc1 e pc2.
  7. No pc1 use o seguinte comando para verificar como ficou a configuração dos endereços da interface de rede. O resultado é similar ao apresentado pelo comando ifconfig:
    ip addr show dev eth0
    
  8. Confira as rotas estabelecidas em todos os hosts com o comando abaixo.
    1. São coerentes com os dados apresentados no diagrama acima?
      ip -6 route show
      
  9. No pc1 use os seguintes comandos para ver a rota para alguns vizinhos:
    traceroute6 2001:bcc:1f0:1::103
    traceroute6 2001:bcc:1f0:1::104
    
    • Anote as rotas.
  10. Deixe um ping6 entre o pc1 ao pc3 rodando:
    ping6 2001:bcc:1f0:1::103
    
  11. Para visualizar os pacotes que trafegam por r1, faça o seguinte:
    1. Em r1 execute:
      tcpdump -i any -w /hostlab/r1.cap
      
    2. Na máquina real, execute o wireshark. Nele clique no menu File->Open, e selecione o arquivo r1.cap, que está na pasta lab.
  12. Analisando a captura do Wireshark, você verá os pacotes relativos ao ping6 e também pacotes parecidos com:
     fe80::4cd6:19ff:fedc:2b52	2001:db8:dead:1::1	ICMPv6	86	Neighbor Solicitation for 2001:db8:dead:1::1 from 4e:d6:19:dc:2b:52
    2001:db8:dead:1::1	fe80::4cd6:19ff:fedc:2b52	ICMPv6	78	Neighbor Advertisement 2001:db8:dead:1::1 (rtr, sol)
    
  13. Explique o processo de descoberta de vizinhança (Neighbor Discovery / Neighbor Solicitation - NS e Neighbor Advertisement - NA), citando o endereço link local utilizado.
    • Alguns exemplos de campos visualizáveis para uma mensagem do tipo Neighbor Advertisement:
    1. Destination (camada Ethernet)
      • O endereço MAC do nó requisitante que foi obtido por meio da mensagem NS enviada anteriormente.
    2. Source (camada Ethernet)
      • A origem é o endereço MAC da interface do dispositivo que enviou a resposta.
    3. Type (camada Ethernet)
      • Indica que a mensagem utiliza IPv6.
    4. Next header (camada IPv6)
      • Indica qual é o próximo cabeçalho. Neste caso, o valor 58 (0x3a) refere-se a uma mensagem ICMPv6.
    5. Source (camada IPv6)
      • A origem é o endereço IP da interface diretamente ligada ao enlace em que a requisição foi recebida.
    6. Destination (camada IPv6)
      • Diferentemente da mensagem NS, a mensagem NA possui como destino o endereço IPv6 global do nó requisitante.
    7. Type (camada ICMPv6)
      • Indica que a mensagem é do tipo 136 (Neighbor Advertisement).
    8. Flags (camada ICMPv6)
      • Uma mensagem NA possui três flags:
      1. Indica se quem está enviando é um roteador. Neste caso, o valor marcado é 0, pois não é um roteador.
      2. Indica se a mensagem é uma resposta a um NS. Neste caso, o valor marcado é 1, pois é uma resposta.
      3. Indica se a informação carregada na mensagem é uma atualização de endereço de algum nó da rede. Neste caso, o valor marcado é 1, pois está informando o endereço pela primeira vez.
    9. Target Address (camada ICMPv6)
      • Indica o endereço IP associado às informações das flags. Neste caso, é o próprio endereço da interface do dispositivo em questão.
    10. ICMPv6 option (camada ICMPv6)
      • Indica as opções do pacote ICMPv6:
      1. Target link-layer address
    11. Type
      • Indica o tipo de opção. Neste caso, Target link-layer address.
    12. Link-layer address
      • Indica o endereço MAC da interface do dispositivo em questão.
  14. Em todos os hosts rode o comando
     ip -6 neighbor show
    
    1. Qual é a funcionalidade desse comando?
    2. Qual é o significado do conteúdo dessa tabela?
    3. A tabela mostrada em cada um dos casos é compatível com o diagrama da rede montado?
    4. Por que, por exemplo, na tabela do pc3 não há uma referência explícita ao pc1?