sábado, 16 de novembro de 2013

Anúncio de Prefixos IPv6 em Roteadores Linux

Olá Pessoal.

Em outra oportunidade escrevi um artigo no blog intitulado "Autoconfiguração de Endereços IPv6 (SLAAC)" explicando como é possível que as redes IPv6 sejam automaticamente configuradas sem que o administrador tenha que realizar nenhuma configuração nas máquinas. Utilizei a figura abaixo para descrever que o processo de autoconfiguração dos endereços consiste basicamente em duas etapas: (i) configuração do prefixo e (ii) configuração do sufixo de host. A primeira etapa é possível porque os hosts aprendem o prefixo da rede através das mensagens ICMPv6 Tipo 134 (RA) anunciadas pelos roteadores.


Recentemente também escrevi alguns artigos explicando como manipular o comportamento padrão dos sistemas operacionais para formação do seu sufixo de host. Pois bem, agora chegou a vez de darmos destaque ao processo de configuração do roteador para permitir o anúncio dos prefixos que serão utilizados pelas máquinas para formar seu endereço através do mecanismo SLAAC.

Normalmente nos roteadores do tipo "caixa", a exemplo de roteadores Cisco, as mensagens ICMPv6 Tipo 134 (RA) são periodicamente enviadas para todos os nós através do endereço ff02::1 (multicast-all-nodes) com o anúncio dos prefixos configurados nas interfaces desses roteadores, o que torna desnecessária qualquer configuração para ter as funcionalidades básicas em operação.

No entanto, é importante ter em mente que máquinas executando o Linux, mesmo que tenham a capacidade de roteamento, não se comportam como roteadores por padrão. Ou seja, o Linux não permite o encaminhamento de tráfego entre sub-redes nem emite as mensagens RA para informar aos hosts que ele é o gateway da rede. No entanto, é possível instruir seu kernel a permitir o roteamento por meio da seguinte linha de comando:

root@Router:/# echo "1" > /proc/sys/net/ipv6/conf/all/forwarding

Isso mesmo, sei que os leitores familiarizados com a configuração de roteadores baseados em Linux devem ter percebido que esse é o comando correspondente ao seguinte comando que era utilizado no IPv4 para permitir o encaminhamento de tráfego entre sub-redes (roteamento):

root@Router:/# echo "1" > /proc/sys/net/ipv4/ip_forward

Como exemplo do processo de configuração de um roteador Linux para fazer o anúncio dos prefixos IPv6 para toda uma rede local (link), estarei utilizando como base o cenário da figura abaixo. Reparem que o roteador possui duas interfaces de rede (eth0 e eth1), cada uma em sua respectiva sub-rede, sendo que a interface eth0 possui o endereço 2001:db8:cafe:1::1/64, ou seja, faz parte da sub-rede 2001:db8:cafe:1::/64 (verde). Nesse exemplo não estamos preocupados com a sub-rede da interface eth1 (azul) e, para verificar se as configurações estão corretas, nossa referência será a máquina n4 que também é membro da sub-rede 2001:db8:cafe:1::/64 (verde).



Quanto a configuração do anúncio periódico das mensagens RA no roteador Linux, primeiro é necessário instalar o serviço RADVD (Router Advertisement Daemon) e, depois, configurá-lo utilizando o arquivo que normalmente fica localizado em /etc/radvd.conf. Para instalar o RADVD em distribuições baseadas no Debian basta entrar com o comando "sudo apt-get install radvd". Feito isso, é necessário configurar o arquivo radvd.conf, ativar o roteamento IPv6 e inicializar o serviço radvd para que o Linux faça o anúncio periódico do prefixo IPv6 através das mensagens RA (134). O leitor pode observar todas essas configurações na figura abaixo:



Se tudo estiver correto com a configuração do roteador Linux, então as máquinas da rede já estarão recebendo os anúncios do(s) prefixo(s) IPv6 e serão capazes de autoconfigurar seus endereços. A figura abaixo traz a saída das configurações de rede da máquina n4, fazendo um comparativo do antes e depois da configuração do radvd no roteador Linux. Reparem que, depois de configurado e habilitado o serviço radvd, a máquina passa a autoconfigurar um endereço IPv6 com o prefixo 2001:db8:cafe:1::/64. Seu endereço final fica 2001:db8:cafe:1:200:ff:feaa:2, lembrando que seu sufixo 200:ff:feaa:2 foi formado pela função EUI-64, a partir do seu endereço MAC 00:00:00:aa:00:02.



Para encerrar esse artigo trago uma amostra da captura de pacotes realizada na interface de rede da máquina n4 para que o leitor possa observar a presença das mensagens ICMPv6 Tipo 134 (RA) chegando em meio aos demais pacotes trafegados na rede. Reparem que o endereço de origem é o link-local (fe80) do roteador Linux e o endereço de destino é o grupo multicast ff02::1.


Abraço.

Samuel.

6 comentários:

  1. Amigo tira uma dúvida, ipv6 servidor é melhor em BSD que tem a pilha criada, ou roda melhor em Linux?

    ResponderExcluir
    Respostas
    1. Particularmente não acho que um seja melhor ou pior que o outro em relação ao suporte a IPv6.

      Excluir
    2. Porque eu percebo que as empresas administradoras de redes tem preferência por linux, bsd quase nunca aparece

      Excluir
    3. Pelo que eu sei a maior empresa do mundo a CISCO em roteadores usa base Linux, enquanto a Juniper usa base BSD

      Excluir
  2. Como seria a configuração caso haja interfaces virtuais no linux vinculadas à vlans?

    ResponderExcluir