domingo, 27 de março de 2016

IPv6 - Saindo do armário

IPv6 é a nova versão do protocolo IP, que de novo não tem nada, pois a RFC do protocolo data de 1998! O problema é que houve uma grande procrastinação do IPv4 com as técnicas de mitigação do esgotamento de endereços. O IPv6 elimina o problema da falta de endereços válidos e uso de NAT em redes locais, entre outras novidades. Com 128 bits para endereçamento não faltarão endereços por toda via láctea.
Boa parte da Internet já funciona em IPv6 e a grande maioria dos dispositivos novos vêm com ele habilitado por padrão. Você já está usando IPv6 e e talvez não saiba...
Ele está lá na sua rede, os hosts tentam fechar tuneis IPv6 para atravessar o seu firewall, fazem autoconfiguração e se comunicam por IPv6, tudo debaixo do seu nariz. Então saia do armário e comece a estudar o assunto antes que seja tarde. :-)
Quando se toca no assunto o pessoal fala de lado, olha pro chão. Alguns dizem que é moleza, que basta sair do decimal e estudar números hexadecimais, ou que vai demorar muito até ser implantado. Nada mais ingênuo. O IPv6 é um protocolo totalmente novo e tem muitas diferenças do antecessor. Os endereços IPv4 estão dando os últimos suspiros, e a medida que a rede cresce o uso de NAT deixa tudo exponencialmente mais complexo e caro.


Não pretendo apresentar os detalhes do formato dos novos endereços e como manipulá-los. Esta é a parte mais fácil e você pode achar em qualquer site com documentação básica sobre IPv6. Dê uma olhada em http://ipv6.br e procure pelo curso e-learning.

Para começar veja algumas características importantes:
  • No IPv6 todas as interfaces recebem vários endereços de acordo com o escopo. Vide os tipos de endereços a seguir.
  • O conceito de máscara e a notação CIDR permanece, mas a recomendação é que todos os enlaces utilizem prefixos /64.
  • O novo endereço de loopback é 0:0:0:0:0:0:0:1/128, abreviado ::1
  • Não há endereços de rede ou broadcast, nem mesmo o conceito de broadcast, este agora na forma de endereços multicast.
  • Autoconfiguração(stateless) aprimorada. Os endereços podem ser aprendidos automaticamente por "router advertisement", assim como default gateway e servidores DNS, sendo o DHCPv6 opcional.
  • Protocolo ARP foi substituído pelo ICMPv6(neigbour discovery), que agora carrega funções indispensáveis para o funcionamento da rede.
Os endereços IPv6 são divididos basicamente nas faixas:
 - Link-local address : FE80:: /10 - Endereços não roteáveis que valem apenas no enlace. Análogos aos endereços IPv4 169.254.0.0/16.
 - Unique Local address (ULA): FC00:: /7 - Endereços análogos aos endereços IPv4 privados e podem ser usados em redes privadas livremente.
 - Global unicast: 2000::/3 - Endereços globais únicos reservados para a internet.

Você pode quebrar o gelo com um simples IPCONFIG/IFCONFIG e verá que já existe um endereço de escopo "Link-local" atribuído à sua interface na faixa "fe80::/10. Geralmente este endereço é gerado com base no seu endereço MAC, sendo os últimos 64 bits do endereço correspondentes à ele no formato EUI 64:



Repare que na primeira imagem tenho 2 endereços IPv6, um de escopo global e outro Link-local, mas que terminam iguais. Ambos gerados a partir do MAC da interface. Esta implementação pode variar dependendo do sistema operacional.
Naturalmente você pode fazer testes dentro da sua rede acessando outros hosts pelos endereços IPv6 de Link-local, a começar pelo PING:

  • No Linux com o comando "ping6":  $ ping6 fe80::20f:eaff:feae:9044
  • No Windows usando o parâmetro "-6":  > ping -6 fe80::20f:eaff:feae:9044

Você pode acessar compartilhamentos no Windows por IPv6 também, mas é um pouco mais complicado. Como os ":" do endereço tornariam o formato UNC inválido você deve substituí-los por traços e adicionar o sufixo ".ipv6-literal.net". Veja os exemplos abaixo:

Acesso pelo endereço de Loopback (::1)
Usando o endereço Link-local
O protocolo ARP foi totalmente substituído pelo ICMPv6 com o protocolo de descoberta de vizinhança(NDP - Neighbour discover protocol). Então o que seria equivalente à um "arp -a" agora é:

  • No Windows pelo "netsh": > netsh interface ipv6 show neighbors
  • No Linux: $ ip neigh
netsh interface ipv6 show neighbors

ip neigh
Uma notícia boa é que para o DNS não muda praticamente nada. Para cada consulta IPv4 ao DNS é solicitado um registro tipo "A" e para IPv6 registros tipo "AAAA". Não importa se o seu servidor DNS tem suporte ao IPv6 ou não. Você pode fazer o teste com qualquer domínio usando o comando "NSLookUp"(vale para Windows e Linux) especificando o tipo de "query" com a seguinte sintaxe:

>  nslookup [-querytype=<Tipo de registro>] <domínio> [Servidor DNS]

Exemplo:  nslookup -querytype=AAAA www.globo.com 8.8.8.8


No Linux, além do nslookup(e o dig), temos o comando "host" que pode trazer resultados mais completos:


Repare que o host "ipv6.google.com" tem apenas endereços IPv6 e obviamente apenas registros tipo "AAAA". Sendo assim você pode continuar usando seus servidores DNS de costume para navegar pela Internet IPv6. 

O próximo passo é conseguir conectividade IPv6. O problema começa quando a maioria dos provedores não ofereçe IPv6 aos clientes. As vezes ainda não implementaram na rede ou as CPE's dos assinantes não oferece suporte. A saída mais fácil para estes casos é fazer um túnel com um provedor TunnelBroker. Exemplos são o Freenet 6 e o Hurricane Eletric.
Os links acima têm tutoriais completos. No meu exemplo escolhi o Hurricane por ser mais simples e usar recursos nativos para qualquer sistema operacional(no site da HE tem tutoriais para todos eles), no caso RouterOS. Em seguida, com o túnel fechado no gateway da rede, os hosts serão configurados automaticamente por "router advertisement" e terão conectividade IPv6 de forma rápida.
Basicamente o que deve ser feito é:
  1. Estabelecer o túnel. Lembrando que o pacote IPv6 deve estar instalado no RouterOS.
  2. Configurar um endereço de escopo global para a interface de rede interna do roteador no bloco atribuído pelo provedor do túnel.
  3. "Setar" o router advertisement para que os hosts da rede aprendam os endereços segundo o prefixo anunciado.
Feito o cadastro na HE você pode criar a interface do túnel com o seu endereço IPv4 público e o endereço do servidor fornecido:


Vá em "IPv6 > Addresses" e configure o endereço IPv6 da interface do túnel com o endereço fornecido em "Client IPv6 address":


E adicione uma rota default IPv6 com o endereço em "Server IPv6 Address":


Por fim atribua um endereço do bloco "Routed /64"(vide a tabela "Routed IPv6 Prefixes" fornecida no site nas configurações do túnel) para a interface da sua rede interna habilitando o parâmetro "advertise"(para que os outros hosts aprendam a configuração). Este é o bloco designado para a sua rede. São endereços "Global unicast", por isso únicos no mundo. Sua rede será acessível por esta faixa e cada host terá um endereço "válido", eliminando o NAT.


Acesse qualquer host na rede e verá que rapidamente eles terão endereços na faixa anunciada pelo gateway. Faça um teste no site www.test-ipv6.com. Tendo acesso IPv6 você pode começar a praticar o novo protocolo e fazer a configuração do seu firewall e demais serviços.
O único problema de fazer acessos por túnel é o delay. No meu caso o túnel é fechado com um servidor em Maiami, então todo o meu tráfego v6 faz uma grande volta na América antes de chegar aos destinos, sendo em média 230ms a mais!