Discuta este tópico no fórum

Se este conteúdo te ajudou, deixe um presente!

sábado, 21 de janeiro de 2012

OpenWRT: Configurando IPv6

Mais um artigo da série sobre o OpenWRT. 

Por muito tempo, eu usei um Asus EEE 4G, aquele de tela de 7', como meu roteador wireless. Isto concomitante com o uso como um computador pessoal. Era um roteador muito eficiente: suporte a IPv6 por túnel, firewall extremamente configurável, WPA2 e tudo que um Linux desktop oferecia. Foi suficiente para minhas necessidades até o dia que, indo para o novo apartamento, o modem e este computador não mais poderiam ficar juntos. Comprei um TP-WR740N.

Logo após a instalação do roteador TP-Link, comecei a recriar a infraestrutura que eu possuia quando o roteador era um dos laptops da casa: regras de firewall, dyndns.... Porém esbarrei em um ponto: IPv6. Como um estudioso do tema e entusiasta da tecnologia, gostaria de reestabelecer a conectividade IPv6 da minha rede local. Como tal recurso não estava presente no meu TP-Link, enviei uma mensagem para o suporte técnico. A resposta não foi nem um pouco animadora:
Dear sir\madam,
Thank you very much for your email requesting information about our product.
The TL-WR740N can not support IPv6 till now and we don’t have such a plan in the near future.
Sorry for any inconvenience.
Foi a senha para a instalação do OpenWRT.

Se quiser aprender sobre IPv6, recomendo o curso online gratuito em ipv6.br. Aprendi grande parte do que eu sei sobre IPv6 neste curso. Não é o meu objetivo ensinar IPv6 neste artigo.

Por questão de espaço em disco, o OpenWRT não vem com os pacotes para o suporte ao IPv6 por padrão. Porém, tendo espaço em disco livre, nada impede de instalá-lo. Os pacotes são kmod-ip6tables, ip6tables e kmod-ipv6. Você pode instalar pela interface Web ou pela linha de comando:
opkg update 
opkg install kmod-ip6tables ip6tables kmod-ipv6
Isto instala apenas o suporte para o roteador atuar como cliente IPv6 e adiciona o suporte IPv6 ao firewall. A interface Web já tem suporte nativo para o IPv6.

OK, roteador com suporte a IPv6. O que eu preciso para ter acesso à Internet por IPv6? Infelizmente, são raríssimos os provedores de Internet brasileiros que fornecem conectividade por IPv6. Se for o seu caso, sinta-se feliz. Um dia eu espero que meu provedor (NET) forneça o roteamento IPv6. Enquanto isto não é verdade, vamos as alternativas.

A primeira é o 6to4. Neste estratégia, o seu endereço IPv4 é utilizado para compor uma rede IPv6 única. Os pacotes IPv6 que deixam seu roteador são envelopados em um pacote IPv4 e este é enviado a um endereço anycast. Com esperança, em algum ponto da rede, algum roteador terá a rota para um roteador com conectividade IPv6 que responda por este endereço. Este roteador é chamado de relay e, voluntariamente, se oferece como um tradutor dos dois mundos. Recebendo seu pacote, ele o extrai do IPv4 e o envia através da rede IPv6. A volta faz o trabalho inverso: o pacote IPv6 acha um roteador relay que empacota a resposta dentro de um pacote IPv4 e o envia para seu roteador. Esta foi a estratégia que eu utilizei por muito tempo. Porém, nem sempre seu pacote acha um roteador relay. Outro problema é que o caminho de ida e de volta, em geral, são completamente diferentes. Tive diversos problemas com esta forma de conectividade, inclusive com provedores explicitamente bloqueando estes pacotes. Não recomendo esta estratégia.

Por recomendação do Antônio M. Moreiras, em uma das minhas visitas ao FISL, adotei o uso de um túnel através da SixXS. SixXS é um projeto para prover conectivade IPv6 a quem quiser, através de pontos de presença voluntários. Felizmente, temos um destes PoP no Brasil! Obrigado CTBC! É a nossa única opção da América Latina. Os outros grandes provedores também poderiam oferecer um PoP com um baixíssimo custo... O SixXS também funciona diretamente no seu sistema operacional mas o foco aqui é no OpenWRT.

O cadastro no SixXs é gratuito. Você requisita uma conta e ganha alguns "créditos". Com eles, você pode solicitar um túnel. Para os felizardos que possuem um IPv4 fixo, pode ser solicitado um túnel para IPv4 fixo. Não é o meu caso. Minha conexão, como a da maioria das pessoas, é com um IPv4 real mas dinâmico. Por isto, criei um túnel do tipo "Dynamic IPv4 Endpoint using Heartbeat protocol". Neste caso, o programa aiccu estabelece uma conexão com o PoP e a mantém viva enviando periodicamente um sinal de vida. Para utilizá-la, instale o pacote aiccu:
opkg update  
opkg install aiccu
Depois basta configurá-lo em /etc/config/aiccu. Nada muito complicado. O único grande requisito é que o relógio do roteador esteja atualizado. Bem, isto, por padrão, já é feito por NTP na imagem do OpenWRT. Dispare e ative o serviço (que pode também ser feito pela interface WEB).
/etc/init.d/aiccu enable

/etc/init.d/aiccu start
O resultado pode ser observado pelos logs (logread). Se tudo der certo, aparecerá uma nova interface no roteador como esta:
sixxs     Link encap:IPv6-in-IPv4  

          inet6 addr: 2001:xxx:xxx:xxx::2/64 Scope:Global
          inet6 addr: fe80::bd04:xxx/64 Scope:Link
          inet6 addr: fe80::c0a8:xxx/64 Scope:Link
          UP POINTOPOINT RUNNING NOARP  MTU:1280  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:208 (208.0 B)  TX bytes:208 (208.0 B)

Parabéns! Seu roteador já possui IPv6. Tente alcançar o ipv6.br:
root@router:~# ping6 ipv6.br

PING ipv6.br (2001:12ff:0:4::22): 56 data bytes
64 bytes from 2001:12ff:0:4::22: seq=0 ttl=56 time=73.889 ms
64 bytes from 2001:12ff:0:4::22: seq=1 ttl=56 time=71.613 ms
64 bytes from 2001:12ff:0:4::22: seq=2 ttl=56 time=71.309 ms
Se tudo correr bem, grande parte do trabalho estará feito. Contudo, o roteador ainda será apenas um cliente IPv6 (endpoint) e não um roteador IPv6 para o resto da rede. Pelo mecanismo de créditos do SixXS, ainda não é possível requisitar uma subrede.

A cada 2 semanas de conexão ativa, o SiXXs creditará 5 créditos. Então, por duas semanas, somente acompanhe para verificar que sua conexão está ativada. A transação típica de um novo usuário do SixXs é a seguinte:

Action  Cost  Description 
 Signup  25   
 Tunnel Request  -10   
 Tunnel Approve  -5   
   10  Can't request a subnet, due to lower bound 
 Week uptime  5   
   15  Can request a subnet 
 Subnet Request  -10   
 Subnet Approve  -4   
 Configure 1 NS  -1   
   0  Out of credits, save some more in the coming weeks

Duas semanas mais tarde, e com 15 créditos, será o suficiente para requisitar a subrede. Requisite-a e a associe ao seu túnel existente. Na sua interface local do roteador (lan), adicione um IPv6 dentro da rede que o SixXS forneceu. Qualquer um. A parte legal do IPv6 é que, ao usar notação hexadecimal, você pode criar endereços fonéticos com partes como cafe, b0de, b0b0, fofa, ou até musicais: aeae:eeee:0000.

Agora, vamos precisar configurar e instalar mais algumas coisas no roteador.

Para ambientes pequenos, como o residencial, o mais indicado é o uso da configuração stateless do IPv6. Ela é automática, basta o roteador se anunciar na rede. O programa que realiza esta divulgação é o radvd. Instale-o.
opkg install radvd

Configure o radvd em /etc/config/radvd, ative e dispare o serviço, assim como foi feito para o aiccu. Uma das coisas interessantes do radvd é que ele também divulga a informação DNS pelo rdnss. Em geral é bom ativá-lo. O problema é que ele não funciona para sistemas M$. Para o Windows, adicione na rede lan do roteador um IPv6 extra: fec0:0:0:ffff::1/64. Não, o XP não irá funcionar pois o seu resolvedor DNS não suporta IPv6.

Ao ativar o radvd, é bom acompanhar pelo wireshark se aparece alguns pacotes do anúncio do roteador pela rede. Se seu sistema operacional for recente, é provável que ele ganhe um IPv6 instantaneamente e automaticamente. Se tudo correr bem, você terá conectividade com o ipv6.br.
$ ping6 ipv6.br
PING ipv6.br(ipv6.br) 56 data bytes
64 bytes from ipv6.br: icmp_seq=1 ttl=55 time=110 ms
64 bytes from ipv6.br: icmp_seq=2 ttl=55 time=107 ms
64 bytes from ipv6.br: icmp_seq=3 ttl=55 time=90.2 ms
64 bytes from ipv6.br: icmp_seq=4 ttl=55 time=72.0 ms
Acessar com um navegador o ipv6.br e ver o globo girando (e seu IPv6 no topo). Ou realizar o teste de conectivade IPv6. Eu consegui nota 10 no teste.

O firewall do OpenWRT precisa ser configurado assim como para o IPv4. A configuração padrão dará uma segurança similar ao IPv4 com NAT. Em geral, é desejável abrir os serviços que seus computadores externos irão receber conexões, como o torrent. Mais adiante eu faço um artigo sobre o firewall.

A partir deste ponto, tudo é opcional.

Todos os servidores DNS que estão configurados no roteador devem ser IPv4. Ex:
# cat /tmp/resolv.conf.auto
nameserver 189.4.64.87
nameserver 189.4.64.82
Enquanto existir IPv4, isto não é problema algum (e vai existir por muito, muito tempo). Porém, para ganhar o décimo ponto no teste IPv6, você precisa ter um servidor DNS IPv6. O SixXS fornece alguns servidores DNS IPv6 como este: 2001:4de0:1000:a3::2.  Adicione-o na interface sixxs (pode ser pela interface WEB) e crie este script:

/etc/hotplug.d/iface/60-aiccu-dns.sh 

#!/bin/sh
#
# Add dns configured in aiccu interface
#
source /etc/functions.sh
config_load aiccu
for cfgs_section in $CONFIG_SECTIONS; do
        config_get aiccu_iface $cfgs_section interface
        if [ "$INTERFACE" == "$aiccu_iface" ]; then
                source /lib/network/config.sh
                config_load "network"
                config_get "dns" "$INTERFACE" "dns"
                if [ "$dns" ]; then
                        case "$ACTION" in
                        ifup)
                                # Add DNS from aiccu interface
                                add_dns "$INTERFACE" "$dns"
                        ;;
                        ifdown)
                                # Remove DNS from aiccu interface
                                remove_dns "$INTERFACE" "$dns"
                        ;;
                        esac
                fi
        fi
done

Isto adicionará o dns da interface sixxs aos servidores dns disponíveis quando a interface for levantada. Ele irá aparecer no arquivo /tmp/resolv.conf.auto. Por padrão, o dnsmasq consulta a cada requisição todos os servidores dns configurados.

Só um aviso: este roteador retorna IPv6 para alguns sites como o google.com. Então, na rara situação onde a resposta do servidor DNS IPv6 chegar antes dos demais, você irá acessar o GMail por IPv6. Será um pouco mais lento pela latência do túnel mas é extremamente raro de acontecer.

9 comentários:

  1. Ola Luiz blz.vc pode me ajudar para min é um pouco complicado.Vc pode me ajudar a conectar o meu pc via cabo ao roteador tp-link como ponto de acesso.Atraveis do tp-link se conectar o d-link como cliete como ip fixo não tenho idea como começar isso obrigado desculpa me

    ResponderExcluir
  2. Olá Luiz, tenho 2 routers Tp-link wdr40300 e wa701m ambos com firmware dd-wrt versao v24-sp2 que instalei hoje. Eu já tenho o tunel ativo e configurado na Sixxs e estou tentando configura-lo no router seguindo o tutorial do seu post, porém quando coloco qualquer comando que comece com opkg na linha de comando da interface web, eu tenho como retorno o seguinte: "/bin/sh: eval: line 1: opkg: not found" Será que você teria alguma idéia de como resolver isso? estou tentando procurar no google mas em termos de linux eu realmente não entendo nada. Agradeço desde já.

    ResponderExcluir
    Respostas
    1. Não tenho experiência com o dd-wrt. Apesar das versões mais novas ser baseado no OpenWRT, ele segue outra filosofia. O opkg, se eu não me engano, é ipkg.
      O tutorial é para openwrt e não deve funcionar diretamente no dd-wrt.

      Excluir
  3. oi Luiz...blz
    tenho acompanhado seu blog e realmente de grande valia para nós que o acompanhamos, segui este tuto acima só que fiquei perdido, pois tenho um tp-link tl-mr3420v.1.2 usando a firmware 12.09 openwrt fiz minha conta no sixxs mais não sei como criar os arquivos para colocar no router, gostaria muito da ajuda do amigo....
    abraços

    ResponderExcluir
    Respostas
    1. Anônimo,

      Tenho uma má noticia para você. Depois de uma brigaçada do pessoal do sixxs e do OpenWrt, eles removeram todo suporte do aiccu que o integrava a estrutura do openwrt. Sobrou só o binário.
      https://www.sixxs.net/forum/?msg=general-7418538

      O rolo todo é sobre retentativa de conexão. Até tentei intervir mas tem muito ego envolvido...

      Bem, o resultado é que você deve configurar o aiccu como em um linux normal e disparar na mão.
      Outra alternativa é buscar outro provedor.

      Excluir
  4. Este comentário foi removido pelo autor.

    ResponderExcluir
  5. Luiz, boa noite.
    Seria possível fazer um "tutorial" atualizado?
    Queria usar IPv6, mais de curioso mesmo, mas ainda não me entendi direito com ele.
    Por exemplo... Tenho Vivo e NET. A Vivo entrega só o seu IP. A Net entrega o seu IP e o PD junto. Eu consigo entregar "IPs fixos" pras minhas máquinas? Tipo como fazemos com o IPv4 (dhcp static lease).
    Porque, por exemplo, se eu quiser liberar uma regra de firewall pra uma máquina, como vou liberar sem saber o IPv6 dela?

    ResponderExcluir
    Respostas
    1. Com toda razão! O mundo mudou um tanto depois de 6 anos.
      Vou ver se consigo agilizar um post sobre o assunto.

      Excluir
    2. Fresquinho: http://luizluca.blogspot.com/2018/04/openwrt-configurando-ipv6-6-anos-depois.html

      Excluir