domingo, 26 de julho de 2015

Usando o ipv6 no Linux pelo Oi Velox

Já estamos no novo protocolo.

Desde a semana passada que descobri uma coisa curiosa com o Velox aqui em casa. Como utilizo um modem em modo bridge, ao atualizar o windows, que quase não uso, na outra partição. Notei que o ip recebido estava diferente. Além do ipv4, tinha uma outra numeração em hexadecimal. Logo fui verificar em http://ipv6.br/http://test-ipv6.com/ e confirmei o que desconfiava. O ipv6 foi habilitado no Velox e ninguém me avisou.

Ainda não sei quando habilitaram. Pode ser na última semana, no mês passado, no início do ano. Bom, não importa. O importante, já que não tem endereços ipv4 para todo mundo, é aproveitar  e configurar o ipv6.

A postagem vai cobrir mais a configuração é que feita no Linux sobre o uso do ipv6 no Velox e usando a rede interna. Queria cobrir também a parte das janelas mas, depois de milhares de tentativas, não consegui fazer com que o ICS compartilhasse o ipv6 com as demais máquinas daqui de casa. Vou ficar devendo essa até que encontre uma solução (Só não sei quando...).

Então vamos ver as configurações. Pode ser que ainda não funcione para todo mundo. Aqui, em Mesquita, está funcionando. Em outros lugares deve demorar mais um pouco. Se não conseguir, tenha paciência e tente novamente daqui a alguns meses já que ele está aparecendo sem aviso prévio.

Esquema de configuração de uma conexão
 ADSL(Velox/Speedy/etc..) na 1ª camada OSI

Veja se o seu modem tem suporte ao ipv6. Isso é importante se estiver utilizando como roteador. Se for um modelo antigo é possível que não tenha suporte. Neste caso é preciso usar umas das 3 opções:

  1. Atualize o firmware do seu modem(Veja na página do fabricante).
  2. Coloque o modem em modem bridge e configure o computador para fazer a conexão.
  3. Compre um novo modem que tenha suporte a ipv6.
No meu caso, uso o modem no modo brigde e, mesmo sem suporte a ipv6, consigo acesso. Mas como isso é possível??? Dá para explicar usando o modelo OSI de camadas. Mas vou explicar apenas as 3 primeiras camadas para mostrar que isso é possível para não me alongar muito no texto (As outras camadas você não vai entender mesmo se bem que o uso do navegador faz parte da 7ª e última camada) Se tiver curiosidade pode seguir o link da wikipedia ou pesquisar para conhecer melhor.

A primeira camada é a física. É aquilo que pode tocar diretamente. É o modem, o cabo, a placa de rede, o fio do telefone, é o seu smartphone. É aquilo que vê na figura acima.

A segunda camada é a de enlace. É a camada utilizada pelo seu discador:

A camada 2 é onde faz a conexão com o provedor.
O discador pode estar dentro do modem, se estiver como roteador. Se for em bridge, ele aparece quando clica para conectar no provedor. É a conexão que chamamos de ponto a ponto (PPP). A conexão ethernet (das placas de rede) e o Wi-Fi também fazem parte dessa camada 2.

A camada 3 é onde é feita a configuração da rede.

A terceira camada é a de rede. É nela que se encaixa o atual ipv4 e o ipv6. É aonde se configura o endereço de rede (Seja 192.168.0.23 ou fd90:82:::::1 se for ipv6). Se mexeu na configuração manual de rede, então já mexeu diretamente na camada 3.

É aí que está o segredo de usar ipv6 num aparelho não suportado. Se o modem estiver como roteador, ele já é camada 1, disca para o provedor (camada 2) e ainda tem que distribuir a rede para o seu computador e os demais (camada 3). Se, na camada 3, não tiver suporte a ipv6, então não terá conexão ipv6 desta forma.

Se estiver como bridge, então as coisas mudam. O modem já é camada 1. A camada 2 fica entre o computador que vai discar para o provedor e o modem. Após discar, o computador já cuida diretamente da camada 3. E como o ipv4 e o ipv6 trafegam dentro do ppp da camada 2, o modem, mesmo sem suporte a ipv6, nem percebe que trafega o protocolo e repassa direto para o computador que entende e utiliza o novo protocolo.

Depois dessas explicações vamos para as configurações. Vou utilizar a configuração da minha máquina Debian. Usuários que utilizam o NetworkManager tem a configuração um pouco mais mastigada, o que pode facilitar. Mas, a configuração que vou explicar pode servir para qualquer distribuição.

O primeiro passo é ativar o ipv6 na configuração do pppoe. Caso não encontre, adicione a seguinte linha, no final do /etc/ppp/options:

+ipv6 ipv6cp-use-ipaddr

Desconecta e reconecta a conexão e veja se mudou algo no ppp0:

ppp0      Link encap:Protocolo Ponto-a-Ponto  
          inet end.: 200.222.202.179  P-a-P:200.217.90.134  Masc:255.255.255.255
          endereço inet6: 2804:d41:30a:336e:8c40:df6a:f407:603a/64 Escopo:Global
          endereço inet6: fe80::8c40:df6a:f407:603a/10 Escopo:Link
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Métrica:1
          RX packets:100 errors:0 dropped:0 overruns:0 frame:0
          TX packets:135 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:3 
          RX bytes:24526 (23.9 KiB)  TX bytes:11170 (10.9 KiB)


Se pegou essas duas linhas, em destaque, parabéns, já está utilizando o ipv6. Faça um teste em http://test-ipv6.com/ para ver tem conectividade.

A próxima configuração é, para caso utilize uma rede interna e o seu computador é o que compartilha a rede para os demais equipamentos. Do jeito que foi configurado as outras máquinas apenas vão enxergar o ipv4. Então vamos botar todo mundo no ipv6. Neste caso vamos utilizar um endereço ipv6 para redes privadas.

Um pouco diferente do ipv4, onde temos o padrão 192.168.0.1 ou 10.10.0.0, esses ips usam fd.... e mais alguns caracteres para definir o endereço de rede. Neste caso podemos usar alguns sites que geram estes endereços. Por exemplo temos o https://www.ultratools.com/tools/rangeGenerator e o http://unique-local-ipv6.com/. Usando o primeiro para gerar os endereços chegamos no seguinte exemplo:

Prefix/L: fd
Global ID: 087d117db1
Subnet ID: 1ecb
Combine/CID: fd08:7d11:7db1:1ecb::/64
IPv6 addresses: fd08:7d11:7db1:1ecb::/64:XXXX:XXXX:XXXX:XXXX
Start Range: fd08:7d11:7db1:1ecb:0:0:0:0
End Range: fd08:7d11:7db1:1ecb:ffff:ffff:ffff:ffff
No. of hosts: 18.446.744.073.709.551.616 - É host pra @#$@#$(*@

O importante é o Combine/CID que é a configuração que vamos utilizar. Neste caso vou usar o final de 64 bits mesmo que está no site. No outro site ele mostra com final 48 bits que também é válido. O objetivo dessa geração aleatória é diminuir as chances de um conflito de ips, caso conecte uma rede interna a outra via vpn ou outros meios. No caso de uma rede doméstica simples, vou deixar em 64 mesmo já que 48 vai dar muito mais endereços que a configuração anterior e só tem uns 10 equipamentos em casa :)

No Debian, sem ser pelo Network Manager, faça a seguinte edição no /etc/network/interfaces adicionando, logo abaixo da configuração do ipv4:

iface eth0 inet6 static
        address fd08:7d11:7db1:1ecb::1
        netmask 64


Após recarregar a rede, já temos um endreço ipv6 na rede interna. Agora será necesário configurar os outros computadores para usar a mesma rede do eth0. No ipv4 temos o DHCP que faz o serviço. Já, no ipv6, podemos ter uma versão do dhcp que faz esse serviço mas, o que fornece o ip é o serviço de autoconfiguração. Para ativar a autoconfiguração é necessário instalar o pacote radvd e inserir o seguinte no /etc/radvd.conf:

interface eth0
{
   AdvSendAdvert on;
   MaxRtrAdvInterval 30;
   prefix fd08:7d11:7db1:1ecb::/64
   {
        AdvOnLink on;
        AdvAutonomous on;
   };
   RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 
   {
        AdvRDNSSPreference 8;
        AdvRDNSSLifetime 30;
   };
   DNSSL exemplo.com.br
   {
        AdvDNSSLLifetime 30;
   };
};


A configuração do RDNSS são dos endereços dos servidores de nome do Google, a versão ipv6 do 8.8.8.8 e 8.8.4.4. Com essa configuração podemos, agora configurar o redirecionamento de ip. Agora edite o /etc/sysctrl.conf e mude ou adicione os seguintes valores para:

net.ipv6.conf.all.forwarding=1
net.ipv6.conf.ppp0.accept_ra=2


Reinicie a rede ou o computador que já temos uma configuração quase pronta. Faltou um pequeno detalhe: iptables.

O iptables para ipv4 não faz nada no ipv6, por isso temos o ip6tables e podemos adaptar as configurações do ipv4 para o ipv6. Então adicione as seguintes configurações:

ip6tables -t nat -A POSTROUTING -s fd08:7d11:7db1:1ecb::/64 -j MASQUERADE

Crie um /etc/ppp/ipv6-up.d/0clampmss e adapte a seguinte configuração:

ip6tables -t mangle -o "$PPP_IFACE" --insert FORWARD 1 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu

Agora temos o compartilhamento de rede. A autoconfiguração não funciona completamente no windows devido a falta de suporte para adicionar os servidores DNS. Neste caso é necessário baixar um addon em http://sourceforge.net/projects/rdnssd-win32/ e seguir as instruções para ativar-lo como serviço no cliente e este cliente poderá utilizar a autoconfiguração por completo.

Com tudo configurado, a rede interna já pode trabalhar com ipv6 e qualquer computador que se conecte pode obter um ipv6 e navegar neste protocolo. E, para testar,  aponte para http://test-ipv6.com/ e veja se detecta o acesso.

Com isso temos uma configuração de pilha dupla de rede com ipv4 e ipv6 funcionando na rede interna e no Velox.  Em alguns clientes, por diferenças de firmware, sistema operacional, libc6 e outros fatores, farão que ou darão preferência ao ipv4 ou suporte apenas o ipv4, outros darão preferência para o ipv6. Por enquanto isso não será um grande problema já que, no casos de preferirem um ou outro se  houver um site só em ipv6, ele será acessado em ipv6. E, com o tempo, a configuração de pilha dupla ipv4/ipv6 se expandirá e vai permanecer por vários anos até que, um dia, a rede estará 100% em ipv6 e, com isso, o ipv4 deixará de existir.

Espero que isso ajude na configuração de pilha dupla. Caso tenha alguma dúvida pode deixar um comentário e espero voltar a publicar com mais frequência.

Tenham uma boa semana.