2016-12-18

IPv6 + IPv4 (dual stack) com Live TIM

Estou escrevendo este longo post a partir do meu laptop, em casa, conectado ao Gmail e ao Blogger via IPv6 sem passar por túneis.

Em outra aba do navegador, estou conectado ao reddit via IPv4 também sem precisar de túneis.


Esta é a conectividade IPv4 + IPv6 em dual stack que eu vinha buscando há alguns anos. Finalmente consegui, e descrevo aqui o que foi necessário, além de relatar o que funciona e não funciona conforme esperado.


Como consegui IPv4 e IPv6 em dual stack com a Live TIM

Dual stack (pilha dupla) é como se chama a conectividade simultânea às redes IPv4 e IPv6, entregue pelo provedor direto ao modem, sem emprego de técnicas de transição como túneisCGNAT ou outras artimanhas.

(NOTA: Não recebi nem recebo nada da TIM para falar bem do serviço Live TIM.)

Sou um feliz usuário do acesso à Internet pela Live TIM há uns 2-3 anos em meus dois endereços na cidade do Rio de Janeiro: minha casa e meu escritório-doméstico-fora-da-minha-casa, carinhosamente apelidado de mamma's home office. ou M.H.O.


Meu acesso no M.H.O. (mamma's home office) tem velocidade de download de 70 Mbps e upload de 30 Mbps.

Em casa, o download é de 35 Mbps e o upload é de 20 Mbps.

Solicitação à Live TIM, uma novela com final feliz

Pedi à TIM para ativar conectividade IPv6 em casa. Porém, como não funcionou de primeira, foram feitos inúmeros contatos telefônicos, uma verdadeira novela, até eu conseguir a tão desejada conectividade IPv4 + IPv6 em dual stack.

A novela começou dia 6/setembro/2016, quando liguei pela primeira vez para o suporte técnico da Live TIM no 10341 e pedi para ativarem a conectividade IPv6 na minha conexão sem perder a conectividade IPv4. Para minha surpresa, disseram que “sim”. Eles me ligariam em até 5 dias úteis para configurar comigo o meu modem.

Ligaram.

Configuramos juntos o modem.

Não funcionou. :-(

Ferramentas e comandos que ajudam a inspecionar o funcionamento do IPv6:

  • ping6 ipv6.google.com (é o bom e velho ping, mas só utiliza IPv6.)
  • ip -6 address list (lista seus endereços IPv6.)
  • ip -6 route list (lista as rotas IPv6, inclusive a rota padrão.)
  • curl -6 uol.com.br (visitar a página principal do UOL via IPv6. Deve retornar um longo código HTML.)

Me pediram alguns dias para rever as configurações e também me pediram para visitar alguns sites de diagnóstico e enviar a eles os screenshots.

Sites de diagnóstico:

  • http://test-ipv6.com/
  • http://ipv6.google.com
  • http://ipv6-test.com/ (especial atenção a este aqui e ao que ele diz sobre ICMP! É você, cliente, quem tem que configurar seu modem para deixar passar ICMPv6.)

A cada nova ligação do suporte da TIM identificávamos mais uma dificuldade com a conexão, até que esgotamos todas e a TIM veio trocar meu modem por um Technicolor TD5336, que finalmente funcionou sem necessidade de alterar nenhuma configuração.

Modems que estou usando com sucesso com IPv6, ambos fornecidos pela TIM após 1 ou mais trocas:

  • Technicolor TD5336
  • Sagemcom F@st 5310

Modems que não funcionaram com IPv6:

  • Sagemcom F@st 4310 (não recebia um IPv6, ou não retransmitia pacotes IPv6 à LAN)
  • Technicolor TG589vn v3 (não recebia um IPv6)
  • Zyxel VMG8924-B10A (recebia um IPv6 e retransmitia para a rede interna, mas perdia a maioria dos pacotes ICMPv6 vindos da WAN)
Nota: o suporte técnico da Live TIM sempre foi excelente em todas as várias interações que tive com eles. Me telefonaram inúmeras vezes, sempre absolutamente cordiais e educados, além de dedicados a resolver meu problema. Muitos desses telefonemas foram às 20:00, 21:00. De verdade, ótimo serviço de suporte.

Habemus IPv6. Como a Live TIM entrega um IPv6

Com o novo modem, tudo funcionava conforme esperaddo: recebi um IPv4 (como de costume) e agora também um IPv6 sob o prefixo 2804:214:3:57cc::/64. Absolutamente lindo.

Imediatamente pedi a ativação da conectividade IPv6 na outra conexão, isto é, no M.H.O.

Em ambos, assim é a configuração:

Rede externa:

IPv6 na interface WAN recebido via SLAAC (Stateless Address Autoconfiguration). O modem recebe do provedor apenas as rotas via RA (Router Advertisement). ULA desativado.

Rede interna:

Com base nas rotas recebidas do provedor, o modem entrega à minha LAN os endereços IPv6 via DHCPv6. [Mais detalhes de DHCPv6 versus SLAAC]

SLAAC

Basicamente, um "servidor" SLAAC envia aos clientes a informação de prefixo IPv6 e também o gateway padrão. Nada mais. Nada de DNS, por exemplo. Se você quer que seu modem envie aos clientes o endereço dos servidores DNS, só o DHCPv6 te salvará: ative no seu modem o DHCPv6 interno e defina com ele os endereços dos servidores DNS que você quiser passar aos clientes.

DNS em IPv6 e em IPv4

Qualquer servidor DNS pode te retornar qual é o IPv6 da Wikipédia. E também o IPv4. Não importa se o seu servidor DNS está escutando na rede IPv4 ou IPv6, ele certamente consegue retornar o IPv4 (registro A) e também o IPv6 (registro AAAA) de www.wikipedia.org ou de qualquer URL.

Por exemplo, experimente:

$ host -t A www.wikipedia.org 8.8.8.8 www.wikipedia.org has address 208.80.154.224 $ $ # Agora o registro AAAA $ host -t AAAA www.wikipedia.org 8.8.8.8 www.wikipedia.org has IPv6 address 2620:0:861:ed1a::1

O servidor DNS público do Google, que responde no IPv4 8.8.8.8, sabe me dizer que o endereço IPv4 (registro Address) de www.wikipedia.org é 208.80.154.224, e também sabe me dizer que o IPv6 da mesma URL www.wikipedia.org é 2620:0:861:ed1a::1.

Ou seja, você não precisa fornecer servidores DNS na rede IPv6 para usar IPv6.

Como está minha LAN agora

Com essas configurações, o modem entrega aos computadores da minha LAN um IPv4 privado (rede 192.168.x.y) e também um IPv6 público. Cada computador também gera de forma autônoma um segundo endereço IPv6, este privado (local-only ou somente local, no prefixo fe80::/64.

O espaço de endereços IPv6 possui alguns prefixos já pensados desde o início para uso exclusivamente em redes privadas, isto é, incapazes de alcançar a Internet e portanto dedicados unicamente à comunicação dentro de uma rede privada como a da minha casa. O prefixo fe80::/64 é esse prefixo. [Mais]

Dado interessante: meu modem recebe na interface externa um IPv6 público fora do meu prefixo. Se meu prefixo dado pelo provedor é 2345:abcd:1234:5678::/64, o modem pode perfeitamente ter o IPv6 público 9876:5432:1111:2222:3333:4444:5555:6666.

Isso é possível porque meu modem não precisa ter um IPv6 público dentro do meu prefixo. Ele simplesmente encaminha à rede do provedor os pacotes que saem da minha LAN rumo à Internet.

No entanto, meu modem tem, sim, um IPv6 privado que só funciona na minha rede interna,fe80::2a0:12f:fc31:e2e8. Veja a rota que meu sistema atual mostra:

$ ip -6 r 2804:214:3:57cc::254 dev wlp3s0 proto kernel ⤾ ⤷ metric 256 expires 85483sec pref medium 2804:214:3:57cc::/64 dev wlp3s0 proto ra ⤾ ⤷ metric 600 pref medium fe80::fe52:8ddd:feb4:303b dev wlp3s0 proto static ⤾ ⤷ metric 600 pref medium fe80::/64 dev wlp3s0 proto kernel metric 256 ⤾ ⤷ pref medium default via fe80::fe52:8ddd:feb4:303b dev wlp3s0 ⤾ ⤷ proto static metric 600 pref medium

Veja que interessante: meu gateway padrão na rede IPv6 usa o prefixo somente local fe80::/64 (última linha do comando acima).

Os pacotes IPv6 que saem do meu sistema rumo à Internet têm como IPv6 de origem o meu endereço IPv6 público, mas são enviados ao meu modem por seu IPv6 somente local. Tudo bem, isso definitivamente não é um problema.

O que funciona nos meus acessos via IPv6

  • O acesso à Internet em IPv6 funciona maravilhosamente.
  • Todos os apps do Google (Drive, Docs, Sheets...), toda a Wikipédia, o site do UOL, o site da Red Hat. Estou acessando todos via IPv6.
    Dica: extensão para Google Chrome que indica se você está acessando um site via IPv4 ou IPv6: if IPv6.
  • Consigo descobrir o endereço público do meu laptop a partir do próprio laptop, sem precisar de comandos como curl [-4|-6] ifconfig.co para ir até a Internet descobrir meu IP público. Basta usar o tradicional comando ip:
    $ ip -6 addr list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ⤾ ⤷ state UP qlen 1000 inet6 2804:214:3:57cc:822c:4196:32b6:ea38/64 scope ⤾ ⤷ global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::6212:3c69:21:f11a/64 scope link valid_lft forever preferred_lft forever $ $ # Confirmando com o curl $ $ curl -6 ifconfig.co 2804:214:3:57cc:822c:4196:32b6:ea38

O que não funciona


Meu IPv6 não é fixo! :-(

Em poucas palavras, o prefixo IPv6 que a TIM me entrega não é fixo.

Em mais palavras, meu prefixo inicial 2804:214:3:57cc/64 gerou para meu laptop o endereço 2804:214:3:57cc:9431:43ad:fa3:38ea, que eu rapidamente adicionei ao DNS do meu domínio particular, todo orgulhoso.

Eu realmente acreditei, por alguns momentos, que não precisaria mais de um DNS dinâmico como o dyndns para conseguir acessar meu servidor doméstico de qualquer lugar do mundo.


Depois do primeiro reboot do modem, a surpresa: o IPv6 do meu servidor doméstico tinha mudado! Sob inspeção mais meticulosa, descobri que o prefixo fornecido à minha conexão pela Live TIM havia mudado. :-(

Resultado: voltei a precisar de um DNS dinâmico. Desde então estou usando o ultra-simples dynv6.com com o script bem simples que ele próprio oferece. Meu servidor doméstico roda o script de atualização a cada 60 minutos e a vida segue. Um pouco triste, mas segue.

Dentro da minha LAN, uma possível saída é fazer referência ao IP somente local das máquinas em vez de usar o IP público. Isto é, meu DNS interno vai dizer que tralala.redeinterna aponta para fe80::63a7:32:ff82:23fc em vez de apontar para 2804:214:3:57cc:63a7:32:ff82:23fc. O endereço somente local das máquinas internas não muda. No entanto, isso significa que eu continuo tendo que usar um endereço diferente para me conectar a tralala.redeinterna se eu estiver dentro de casa ou fora de casa.


Não tenho IPv6 reverso

Veja estes comandos:

$ host -t AAAA www.uol.com.br homeuol.uol.com.br has IPv6 address 2804:49c:3103:401:ffff:ffff:ffff:1 $ $ # Agora a resolução reversa $ host 2804:49c:3103:401:ffff:ffff:ffff:1 Host 1.0.0.0.f.f.f.f.f.f.f.f.f.f.f.f.1.0.4.0.3.0.1.3.c.9.4.0.4.0.8.2.ip6.arpa not found: 3(NXDOMAIN)

Ainda não encontrei o motivo para a resolução reversa de IPv6 não ser levada a sério.

Segurança: a vida sem NAT

Esse aqui fica para o próximo post.


Até breve!

Postar um comentário