Configurando um endereço IPv6 público

A melhor forma de conseguir um endereço IPv6 público seria a própria provedora fornecer, mas isso ainda é raro no Brasil. Por isso, há algumas soluções de túneis IPv6 sobre IPv4 que veremos. Mas geralmente essas soluções não possuem um desempenho tão bom.

 

Teredo

A rede Teredo foi desenvolvida pela Microsoft e é definida para RFC 4380. Ela já vem instalada por padrão no sistema operacional Windows a partir da versão XP com Service Pack 1. Ela fornece um único endereço IPv6 baseado em seu endereço IPv4 público. Por isso, não é possível usar a rede Teredo em mais de um equipamento da rede LAN.

A rede Teredo foi desenvolvida com o objetivo de fornecer IPv6 para usuários domésticos. Você até pode instalá-lo em seu proxy caso precise urgentemente fornecer acesso a página IPv6 para seus usuários.

 

No Linux, o teredo pode ser instalado pelo pacote Miredo.

 

# apt-get install miredo

 

No Debian, o arquivo de configuração do Terede é o /etc/miredo/miredo.conf. Neste arquivo há uma referência ao servidor da Microsoft e outra do próprio Debian.

 

#ServerAddress    teredo.ipv6.microsoft.com

ServerAddress       teredo-debian.remlab.net

 

É necessário liberação da porta UDP 3544 para um desses endereços.

 

Após a instalação, veja se o endereço IPv6 está ativado.

 

# ip addr show teredo

21: teredo: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UNKNOWN qlen 500

    link/none

    inet6 2001:0:53aa:64c:4b3:608e:3777:e46d/32 scope global

      valid_lft forever preferred_lft forever

    inet6 fe80::ffff:ffff:ffff/64 scope link

      valid_lft forever preferred_lft forever

 

Teste a conexão pingando o DNS IPv6 do Google.

 

# ping6 -c 1 2001:4860:4860::8888

PING 2001:4860:4860::8888(2001:4860:4860::8888) 56 data bytes

64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=58 time=792 ms

 

— 2001:4860:4860::8888 ping statistics —

1 packets transmitted, 1 received, 0% packet loss, time 0ms

rtt min/avg/max/mdev = 792.597/792.597/792.597/0.000 ms

 

Repare que o Google tem um site que funciona somente com IPv6. É o ipv6.google.com.

 

# host ipv6.google.com

ipv6.google.com is an alias for ipv6.l.google.com.

ipv6.l.google.com has IPv6 address 2800:3f0:4001:812::1001

 

Tente acessá-lo via navegador.

 

Para acessar um site por IPv6 há um pequeno detalhe. O endereço IP deve vir entre []. A porta deve vir separada. Se esse site estivesse rodando na porta 81, o acesso deveria ser da seguinte forma:

 

http://[2001:db8:db7e:8080::]/ipv6.php

Tunnel Broker

 

Tunnel broker é uma técnica usada para ligar redes IPv6 através de uma rede IPv4. A grande vantagem em relação ao Teredo é que o Tunnel Broker pode fornecer uma rede /64 para que você distribua endereços públicos para todos os hosts para tua rede. Até é possível conseguir uma rede /56 possibilitando criar com isso 256 vlans /64.

 

O primeiro túnel que vamos configurar é o da Hurricane Eletric.

 

Para conseguir um túnel IPv6 da Hurricane, primeiro faça o cadastro no site https://ipv6.he.net/.

IPv601.jpeg

 

Após criar o cadastro e entrar no site, no menu à direita, clique em Tunnelbroker.

 

IPv602.jpeg

 

Reparem que eu já tenho duas redes configuradas. No teu caso não haverá nenhuma. Para criar uma nova rede IPv6 clique, no menu à esquerda, em Create Regular Tunnel.

 

IPv603.jpeg

 

Na tela que aparece você precisa especificar o teu IPv4 público. Reparem que no exemplo eu estou saindo pelo IP 200.136.27.146 e estou solicitando um túnel para 200.136.27.251. O endereço IPv4  precisa ser fixo. É necessário também liberar o acesso a ICMP. Escolha também um dos servidores na lista logo abaixo. Teoricamente, quanto mais perto estiver o servidor melhor será o desempenho da rede. Após a criação do túnel você terá uma tela parecida com essa:

IPv604.jpeg

 

Agora você já tem uma rede IPv6. Você ainda pode pedir uma rede /48, mas isso pode demorar alguns dias, ou mesmo nem ser aprovado. No menu Example Configurations você pode ver exemplos de configuração para diversos sistemas.

 

IPv605.jpeg

 

Escolha o seu. No meu caso escolhi o Debian/Ubuntu.

 

IPv606.jpeg

 

Há outras empresas que fornecem túneis IPv6 gratuitamente. A SixXS tem a vantagem de possuir  servidores no Brasil e a desvantagem de não possuir suporte a BGP. Outra opção é a Freenet6.

 

Agora você já pode começar a fornecer IPv6 para a tua rede.

    

IPv6 e Linux – Colocando a mão na massa

IPv6 e Linux – Colocando a mão na massa

Vimos no artigo anterior um pouco de teoria sobre o IPv6. Agora que sabemos o básico, vamos começar a pôr a mão na massa.

Verifique se teu sistema tem suporte ao IPv6

Antes de prosseguirmos, verifique se o teu equipamento tem o suporte ao IPv6. O IPv6 está incluído nos seguintes sistemas operacionais.

  • Windows XP sp1 (simplificado) ou mais recente (completo)

  • Mac OSX 10.2 Jaguar

  • Linux kernel a partir do 2.1.8 (simplificado) ou a partir do 2.2 (completo)

  • FreBSD 4.0

  • NetBSD 1.5

  • OPenBSD 2.7

No Linux, para ver a versão do kernel, digite:

$ uname -r

3.2.0-4-686-pae

Se a versão for superior a 2.2.0, então seu sisterma Linux já tem suporte. Agora precisamos verificar se os módulo do IPv6 estão carregados.

$ sysctl net.ipv6.conf.all.disable_ipv6

net.ipv6.conf.all.disable_ipv6 = 0

Se estiver zerado, então o suporte está habilitado. Caso contrário execute, como root, o seguinte comando:

# sysctl net.ipv6.conf.all.disable_ipv6=0

net.ipv6.conf.all.disable_ipv6 = 0

Você pode forçar essa configuração alterando o arquivo /etc/sysctl.conf. Inclua a seguinte linha:

net.ipv6.conf.all.disable_ipv6=0

Isso fará com que o seu sistema operacional tenha suporte ao IPv6 habilitado após o boot.

O arp morreu

No ipv6 não existe mais o arp. Quem cuida das funções que eram do arp é o ICMP. Isso mesmo, o “ping”. O protocolo ICMP está no coração do IPv6. É ele quem cuida das resoluções de mac-address. Bloquear o ICMP fará com que o protocolo IPv6 simplesmente não funcione. A regra padrão é permitir o tráfego ICMP, a menos que você saiba exatamente o que está fazendo.

Para ver o endereço físico da interface de rede você pode executa o ifconfig. Porém, vamos nos acostumar a usar o comando “ip”, pois ele já tem suporte ao IPv6 e incorpora as funções dos comandos ifconfig, arp, route, entre outros.

$ ip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT

     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000

     link/ether 50:e5:49:fc:de:9b brd ff:ff:ff:ff:ff:ff

3: sit0: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT

   link/sit 0.0.0.0 brd 0.0.0.0

4: teredo: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 500

   link/none

Podemos notar que a máquina que estou usando tem uma interface de rede real (eth0), duas virtuais (teredo e sit0) e a de loopback (lo).

Quando uma máquina com suporte a IPv6 entra na rede ela escolhe um endereço IP aleatório do range Link Local (FE80::/64) e manda um pacote Neighbor Solicitation (NS) para a rede perguntando se alguma estação já possui esse endereço. Caso alguma máquina reponda com um Neighbor Advertisement (RA) então a estação terá que usar outro endereço IP. Se ela estiver usando uma configuração manual então ela não entrará na rede. Portanto, não haverá um conflito de IP. Você não precisará procurar pelas máquina conflitantes na rede, pois a segunda não vai funcionar, enquanto a primeira funcionará normalmente.

Para ver qual IP a estação pegou digite:

$ ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host

    valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

     link/ether 50:e5:49:fc:de:9b brd ff:ff:ff:ff:ff:ff

     inet 172.20.120.4/16 brd 172.20.255.255 scope global eth0

     inet6 fe80::52e5:49ff:fefc:de9b/64 scope link

     valid_lft forever preferred_lft forever

3: sit0: <NOARP> mtu 1480 qdisc noop state DOWN

     link/sit 0.0.0.0 brd 0.0.0.0

Se quiser ver o endereço apenas de uma interface, você pode digitar o seguinte comando:

$ ip addr show dev eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

     link/ether 50:e5:49:fc:de:9b brd ff:ff:ff:ff:ff:ff

     inet 172.20.120.4/16 brd 172.20.255.255 scope global eth0

     inet6 fe80::52e5:49ff:fefc:de9b/64 scope link

     valid_lft forever preferred_lft forever

Para checar os endereços físicos já resolvidos você pode usar o seguinte comando:

$ ip neigh

fe80::5aa2:b5ff:fea3:9611 dev eth0 lladdr 58:a2:b5:a3:96:11 STALE

fe80::230:48ff:fe62:329f dev eth0 lladdr 00:30:48:62:32:9f router STALE

fe80::cba:37c8:a52e:2590 dev eth0 lladdr e8:03:9a:4a:9a:ff STALE

172.20.1.32 dev eth0 lladdr 00:1c:c4:c2:06:b8 REACHABLE

172.20.18.85 dev eth0 lladdr 00:1b:11:b0:e1:c2 REACHABLE

172.20.1.146 dev eth0 lladdr 00:25:90:2b:35:de STALE

Reparem que o comando arp não mostra os dados referentes ao IPv6

$ arp -na

? (172.20.1.32) em 00:1c:c4:c2:06:b8 [ether] em eth0

? (172.20.18.85) em 00:1b:11:b0:e1:c2 [ether] em eth0

? (172.20.1.146) em 00:25:90:2b:35:de [ether] em eth0

Teste a conectividade

No Linux, para testar se uma máquina está conseguindo se comunicar com outra via IPv6 você pode usar o ping6.

$ ping6 fe80::230:48ff:fe62:329f

connect: Invalid argument

Por quê deu erro? Vamos entender. A máquina em questão contém uma interface eth0 com suporte a IPv6, e uma interface virtual teredo, também com suporte a IPv6. Ambas possuem a rede FE80::/64, e isso é normal. Para pingarmos um endereço Link Local (FE80::/64) precisamos definir por qual interface vamos tentar a conexão.

$ ping6 -c 1 -I eth0 fe80::230:48ff:fe62:329f

PING fe80::230:48ff:fe62:329f ( fe80::230:48ff:fe62:329f ) from fe80::230:48ff:fe62:329f eth0: 56 data bytes

64 bytes from fe80::230:48ff:fe62:329f : icmp_seq=1 ttl=64 time=0.514 ms

— fe80::230:48ff:fe62:329f ping statistics —

1 packets transmitted, 1 received, 0% packet loss, time 0ms

rtt min/avg/max/mdev = 0.514/0.514/0.514/0.000 ms

O endereço Link Local não deve ser usado para algo “útil”. Se você quer uma rede local IPv6 é necessário configurar uma rede Unique Local. Em uma estação eu digito:

# ip addr add fc00:470:db7e:8000::1/64 dev eth1

# ip addr show dev eth1

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:30:48:62:32:9f brd ff:ff:ff:ff:ff:ff

inet 172.20.1.124/16 brd 172.20.255.255 scope global eth1

inet6 fc00:470:db7e:8000::1/64 scope global

valid_lft forever preferred_lft forever

inet6 2001:470:db7e:8000::1/64 scope global

valid_lft forever preferred_lft forever

inet6 fe80::230:48ff:fe62:329f/64 scope link

valid_lft forever preferred_lft forever

Na minha estação de trabalho digito o mesmo comando substituindo o IP.

# ip addr add fc00:470:db7e:8000::2/64 dev eth0

# ip addr show dev eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 50:e5:49:fc:de:9b brd ff:ff:ff:ff:ff:ff

inet 172.20.120.4/16 brd 172.20.255.255 scope global eth0

inet6 fc00:470:db7e:8000::2/64 scope global

valid_lft forever preferred_lft forever

inet6 fe80::52e5:49ff:fefc:de9b/64 scope link

valid_lft forever preferred_lft forever

Agora posso pingar a outra estação sem problemas.

# ping6 -c 1 fc00:470:db7e:8000::1

PING fc00:470:db7e:8000::1(fc00:470:db7e:8000::1) 56 data bytes

64 bytes from fc00:470:db7e:8000::1: icmp_seq=1 ttl=64 time=0.525 ms

— fc00:470:db7e:8000::1 ping statistics —

1 packets transmitted, 1 received, 0% packet loss, time 0ms

rtt min/avg/max/mdev = 0.525/0.525/0.525/0.000 ms

Reparem que se digitarmos o comando “ipconfig” veremos a interface com vários IPv6.

# ifconfig eth0

eth0 Link encap:Ethernet Endereço de HW 50:e5:49:fc:de:9b

inet end.: 172.20.120.4 Bcast:172.20.255.255 Masc:255.255.0.0

endereço inet6: fe80::52e5:49ff:fefc:de9b/64 Escopo:Link

endereço inet6: fc00:470:db7e:8000::4/64 Escopo:Global

UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1

RX packets:21300365 errors:0 dropped:0 overruns:0 frame:0

TX packets:4442303 errors:0 dropped:0 overruns:0 carrier:0

colisões:0 txqueuelen:1000

RX bytes:5514033851 (5.1 GiB) TX bytes:452512661 (431.5 MiB)

IRQ:20 Memória:fe400000-fe420000

Diferentemente do que acontece no IPv4, a interface responde por vários IPv6 sem a necessidade de IP virtuais.

Para configurar o endereço IPv6 no arquivo /etc/network/interfaces adicione as seguintes linhas:

iface eth0 inet6 static

address fc00:470:db7e:8000::4

netmask 64

No próximo post veremos como configurar o roteamento IPv6. Também veremos como conseguir um bloco de endereços IPv6 públicos.

Até lá.

    

IPv6 na teoria: endereçamentos

Um endereço IPv6 contém 8 blocos de números hexadecimais variando entre 0 e FFFF e separados do “:”. Se você achava complicado trabalhar com números binários no IPv4, imagine agora! Um IPv6 se parece com isso:

2001:0DB8:0000:25E2:0000:0000:F0CA:84C1

Como o endereço IPv6 é enorme e difícil de memorizar, há duas regras para abreviá-lo.

1- Em cada bloco, os zeros à esquerda podem ser omitidos. O endereço acima ficaria assim:

  • 2001:DB8:0:25E2:0:0:F0CA:84C1

2- Uma sequencia de zeros pode ser abreviado com “::”. Mas isso só pode ser feito uma única vez para evitar ambiguidades. Por exemplo, o endereço acima pode ser escrito de duas formas:

  • 2001:DB8::25E2:0:0:F0CA:84C1

  • 2001:DB8:0:25E2::F0CA:84C1

Não é permitido abreviar duas vezes para não causar dúvidas quanto o endereço real. Por exemplo:

  • 2001:DB8::25E2::F0CA:84C1

O endereço acima poderia ser a abreviação dos dois endereços abaixo:

  • 2001:DB8:0:25E2:0:0:F0CA:84C1

e

  • 2001:DB8:0:0:25E2:0:F0CA:84C1

Outra mudança importante é na máscara de rede. No IPv4, o endereço 192.168.0.1/16 também pode ser escrito como 192.168.0.0/255.255.0.0. No IPv6 somente a primeira forma é aceita. Como exemplo, o endereço 2001:0db8:0:25e2::/64 está reservando 64 bits para rede, e 64 para host.

Aproveitando: para facilitar a compreensão, cada bloco do endereço IPv6 contém 16 bits. Cada número contém 4 bits.

O uso de “:” pode trazer complicações em site, pois no IPv4 a separação do endereço do host e da porta usada pela aplicação é feita com o caracter “:”. Por isso, ao acessar um site através do seu endereço IPv6, o endereço deverá estar separado por colchetes e deve se parecer com isso:

• http://[2001:12ff:0:4::22]/index.html

• http://[2001:12ff:0:4::22]:8080

Tipos de endereços

Os endereços IPv6 são classificados em 3 tipos:

  • Unicast: Usado para a comunicação com um único host.

  • Multicast: Usado para a comunicação com vários hosts.

  • Anycast: Usado em uma comunicação do tipo um-para-um-de-muitos. É o que mais se assemelha ao broadcast.

Endereços Unicast

Não especificado

Quando a interface de rede está sem nenhum endereço IPv6. É semelhante ao endereço 0.0.0.0 do IPv4.

  • ::0 (ou somente ::)

Loopback

É semelhante ao loopback do IPv4. Seu endereço é:

  • ::1

Link local

É usado para a autoconfiguração. Sua função é semelhante ao endereço 169.254.0.0/16 do IPv4. Esse endereçamento é usado nas comunicações locais, principalmente nas descoberta de vizinhança, que veremos mais adiante. Toda interface de rede deve ter um endereço Link local. Um endereço Link local deverá pertencer ao seguinte intervalo:

  • FE80::/64

Unique local

É semelhante aos endereço privados IPv4 (192.168.0.0/16, 172.16.0.0/20, 10.0.0.0/8). Esses endereços não são roteáveis na Internet. Você pode ter vlans distintas se comunicando através desses endereços. Seu uso não é obrigatório como o Link local. O intervalo Unique local é:

  • FC00::/7

Global unicast

Semelhante ao endereço público IPv4. É esse endereço que deverá ser usado para navegar na Internet. Por exemplo, o endereço IPv6 do DNS do Google é:

  • 2001:4860:4860::8888

IPv4 mapeado

É usado em técnicas de transição, onde máquina somente IPv4 precisam se comunicar com máquina somente IPv6. O formato do endereço é:

  • ::FFFF:a.b.c.d

onde a.b.c.d é o endereço IPv4.

6to4

A rede 6to4 é usada para permitir uma comunicação IPv6 sobre uma rede IPv4. É uma forma de disponibilizar endereços IPv6 para clientes quando estes não possuem IPv6 nativo. Esses túneis só devem ser usados em casos onde a provedora de Internet não fornece endereços IPv6, pois a latência é grande. O rede IPv6 reservada para isso é:

  • 2002::/16

Teredo

A rede Teredo foi criada pela Microsoft e é usada para disponibilizar endereços IPv6 através de túneis IPv4. O Teredo está habilitado nas estações Windows Vista ou mais recente. Também sobre uma alta latência. Por isso, quando você disponibiliza um site via IPv6, este poderá parecer mais lento para seus clientes Windows, pois estes passarão a acessá-lo através do túnel Teredo. Lembre-se de que o DNS, por padrão, dá preferência aos endereços IPv6.

A rede Teredo possui o seguinte intervalo:

  • 2001::/32

Endereço de documentação

Quando se está escrevendo documentação sobre IPv6, a rede…

  • 2001:db8::/32

deverá ser usada como exemplo. Essa rede não é roteada na Internet. Ela é definida em RFC como endereço de documentação.

Endereços obsoletos

FEC0::/10 – semelhante ao Unique Local. Não deve ser usado.

::wxyz – semelhante ao IPv4 mapeado. Não deve ser usado.

3FFE::/16 – Testes da rede 6Bone, que foi desativada em 2006. Não deve ser usado.

Endereços Anycast

Um endereço anycast é utilizado para identificar um grupo de interfaces, porém com a característica de que o pacote será enviado apenas para o host que estiver mais próximo da origem. É usado para descobrir serviços na rede, como roteadores e servidores DNS, e para redundância e balanceamento de cargas. Esse endereço deve ser formado pelo prefixo da sub-rede mais uma sequência de zeros. Ex:

  • 2001:DB8:CAFE:DAD0::/64

Também foi definido uma rede anycast para suportar a mobilidade IPv6. Neste caso, o endereço terá a seguinte estrutura:

  • 2001:DB8::DFFF:FFFF:FFFF:FFFE

Endereços Multicast

Seu funcionamento é semelhante ao Multicast IPv4. É usado para a comunicação 1 para N, ou seja, quando um pacote deve ser entregue a vários hosts, mas não a todos. Stream, video-conferência e jogos on-line são exemplos de aplicações que se beneficiam dessa tecnologia.

  • FF00::/8

Abaixo listo alguns endereços de multicast definidos.

  • FF01::1 – Todas as interfaces (all nodes)

  • FF01::2 – Todos os roteadores (all routers)

  • FF02::1 – Todos os nós (all nodes)

  • FF02::2 – Todos os roteadores (all routers)

  • FF02::5 – Todos os roteadores OSPF

  • FF02::6 – Todos os roteadores designados

  • FF02::9 – Todos os roteadores RIP

  • FF02::D – Todos os roteadores PIM

  • FF02::1:2 – Agentes DHCP

  • FF02::1:FFXX:XXXX – Solicited-node

  • FF05::2 – Todos os roteadores (all-routers)

  • FF05::1:3 – Servidores DHCP

  • FF05::1:4 – Agentes DHCP

  • FF0X::101 – Ntp

Alocação de endereços IPv6

Apenas 13% dos endereços IPv6 foram liberados para uso, de 2000:: até 3FFF::. Cada RIR recebeu do IANA uma rede /12. A rede destinada para o LACNIC é 2800::/12. Os ISP recebem no mínimo uma rede /32. O NIC.br recomenda que às empresas sejam passadas redes /48, e pessoa física receba /56 ou /64. A rede mínima recomendada é /64, pois vocês verão mais pra frente que a autoconfiguração stateless do IPv6 depende disso.

Quem está entrando agora um mundo IPv6 achará estranho disponibilizar uma rede /64, e ainda mais /56, para usuários domésticos. Com uma rede /64 o usuário poderá ter cerca de 16 quintilhões de dispositivos em sua rede! Isso mesmo, 16 quintilhões! Ou, se preferir a analogia, cada habitante do mundo terá a sua inteira disposição o equivalente a 4 bilhões de internets IPv4. Com um /56, serão 256 redes distintas com 16 quintilhões de endereços IPv6 cada uma, todas para um único usuário! Exagero? Pode ser, ainda mais quando lembramos de que no começo da Internet várias empresas tinham à sua disposição 16 milhões de endereço, e acabou faltando IPv4. Mas isso mostra que o IANA está de olho na Internet das coisas, e o IPv6 está pronto para ela.

Agora que sabemos a teoria vamos colocar a mão na massa… nos próximos artigos.

    

IPv6 e roteamento

Roteamento

Vamos agora entender um pouco sobre o roteamento hierárquico do IPv6. Veja a figura abaixo.

IPv6 e roeteamento

Topologia IPv6

Para adicionarmos rota padrão na máquina 2001:db8:8000:1080::2001:64 devemos abrir o arquivo /etc/network/interfaces a adicionar a linha abaixo.

gateway 2001:db8:8000:1080::

Pela linha de comando podemos utilizar o comando abaixo.

# ip -6 route add ::/0 via 2001:db8:8000:1080:: dev eth0

Analisando o roteador no top da hierarquia podemos notar que basta apenas uma entrada na tabela de roteamento para que este consiga se comunicar com a estação 2001:db8:8000:1080::2002. Se esse roteador for um Linux, o comando seria o seguinte:

# ip route add 2001:db8:8000:1000::/56 from 2001:db8:8000::1 dev eth0

Dessa forma a tabela de roteamento fica menor. Pensando nos roteadores principais da Internet, os backbones, ter uma tabela menor melhora o desempenho.

Para checar a tabela de roteamento da estação de trabalho, digite:

$ ip -6 route

2001:db8:8000:1000::/56 dev eth0 proto kernel metric 256

fc00:db8:8000:1000::/56 dev eth0 proto kernel metric 256

fe80::/64 dev eth0 proto kernel metric 256

fe80::/64 dev vboxnet0 proto kernel metric 256

default via 2001:db8:8000:1080:: dev eth0 metric 1024

Para apagar uma rota, digite:

# ip route delete 2001:db8:8000:1000::/56 from 2001:db8:8000:1 dev eth0

    

IPv4 x IPv6

Todos sabem que o protocolo IPv4 tem limitações diversas. Várias soluções retardaram a implantação no novo protocolo IPv6, como o DHCP, o NAT, e o CIDR. Mas a adoção do IPv6 é inevitável.

Por isso, antes de falarmos sobre como implantar o IPv6 no Linux, vamos mostrar as principais diferenças entre os protocolos.

Endereçamento

O protocolo IPv4 tem 32 bits de endereçamento. Isso permite que 4 bilhões de dispositivos estejam diretamente conectados à Internet. Mas, a Internet caminha para ter tudo conectado nela: computadores, relógios, eletrodomésticos, e qualquer tipo de sistema eletrônico.

A Internet das coisas está em implantação. Porém, os 4 bilhões de endereços do protocolo atual, não permitem isso. O IPv6 possui 128 bits de endereçamento. Isso permite um número quase infinito de endereços. Para exemplificarmos isso, algumas analogias são usadas:

  • É possível atribuir 48 octilhões de endereços por habitante do mundo;
  • Cada micrômetro quadrado da Terra pode conter 4 bilhões de redes com 64 milhões de hosts cada uma;
  • Cada átomo da superfície da Terra, poderia conter cerca de 3 milhões de endereços IPs (considerando o átomo de hidrogênio).

Esses são alguns exemplos, que servem para demostrar a quantidade de endereços possíveis numa Internet IPv6.

Roteamento

No protocolo IPv6, a distribuição de endereços é hierárquica, ao contrário do que ocorre no IPv4. Com isso, a tabela de roteamento dos roteadores é bem menor, melhorando o desempenho. Também, é mais comum o uso de protocolos de roteamento dinâmicos, como o OSPF e BGP, ao contrário do RIP, que é muito usado em redes IPv4.

Cabeçalhos

O protocolo IPv4 possui cabeçalhos com 12 campos, com tamanhos que variam de 20 a 60 Bytes. Já o IPv6, contém cabeçalhos de apenas 8 campos com tamanho fixo de 40 Bytes.

Além disso, o IPv6 pode ter cabeçalhos de extensão para funções específicas. Esses cabeçalhos de extensão não são lidos pelos roteadores, a menos que isso seja realmente necessário.

Os demais cabeçalhos são lidos apenas pelo host destino. Isso torna o cabeçalho do IPv6 mais simples do que o do IPv4. Também é importante o fato do IPv6 ser quatro vezes maior do que o IPv4, mas ter o cabeçalho apenas duas vezes maior. Essas características fazem com que os roteadores consigam analisar o tráfego de IPv6 de forma mais eficiente, melhorando o desempenho.

IPsec

A implantação do protocolo de criptografia IPsec, usado principalmente em VPN, é opcional no protocolo IPv4. Já no IPv6, ele é obrigatório.

Porém, seu uso é opcional. Isso significa que, em caso de necessidade de criptografar o tráfego da rede, como numa VPN, isso pode ser feito diretamente no protocolo, sem a necessidade de softwares adicionais.

Resolução de endereço físico

No IPv4, os protocolos ARP e RARP, cuidam das resoluções de endereços físicos, conhecidos como MAC address. No IPv6, essa função foi transferida para o protocolo ICMP, o famoso ping.

Com isso, ARP e RARP foram descartados, enquanto que o ICMP passou a ter maior importância. Este último, passou a ser vital para o funcionamento da rede. Por isso, não é possível bloquear totalmente o tráfego ICMP, como era feito no IPv4.

Se você deseja bloquear uma função em especial, como o ping, deve-se bloquear apenas a função específica do ICMP, e não o protocolo todo, com risco do protocolo parar de funcionar. Na maioria dos caso, portanto, é aconselhável permitir o tráfego ICMP em uma rede IPv6.

Formas de configuração

Em uma rede IPv4, é possível fazer dois tipos de configuração: manual e automática. A configuração automática é feita através de um servidor DHCP. Há ainda uma opção, em que a estação de trabalho pode se configurar automaticamente usando um endereço aleatório da rede 169.254.0.0/16.

Porém, esta última forma não configura DNS e nem a rota padrão; portanto, ela nem é considerada.

No IPv6, além da configuração manual, que você verá que nem deverá ser usada na prática, existem duas outras formas de configuração: automática stateless e automática statefull.

Quando uma estação de trabalho IPv6 entra na rede, ela automaticamente gera um primeiro endereço chamado de Link Local, usando um endereço aleatório da rede fe80::/64 (semelhante a rede 169.254.0.0/16 do IPv4).

Com esse endereço, ela passa e perguntar quem são os roteadores e os DNS da rede. A estação também pode perguntar pelos endereços do site (semelhantes às rede 192.168.0.0/16, 10.0.0.0/8 e 172.16.0.0/20 do IPv4), bem como dos endereços disponíveis globalmente (que funcionam como os endereços públicos IPv4) e que serão usados para a comunicação da estação com o mundo.

Todo esse processo é transparente para a estação e pode ser usado quando não é necessário um controle sobre o processo de distribuição de IP.

Já a autoconfiguração statefull, requer um servidor DHCP, como no IPv4. Porém, pode-se fazer uma mistura entre o processo stateless e statefull, sendo que o servidor DHCP, pode fornecer apenas os endereços IP deixando para a estação descobrir os endereços dos DNS e dos roteadores.

Conflitos de IP

No IPv6, antes da estação configurar o IP, ela envia um pacote na rede perguntando se alguma outra estação já possui esse endereço. Se ela não receber nenhuma resposta, então, o endereço estará disponível para ser usado. Caso receba uma reposta, então, ela terá que usar outro endereço. Se a configuração for manual, a estação não conseguirá entrar na rede. Isso evita o conflito de IP.

NAT

NAT (Network Address Translator) é uma tecnologia que permite a equipamentos dentro da rede local acessar a Internet usando o IP público do gateway. Isso é muito comum hoje e retardou bastante a adoção do IPv6.

Porém, essa prática quebra o modelo fim-a-fim da Internet proposto desde o seu nascimento. Softwares de VPN e P2P podem não funcionar corretamente quando o host está atrás de um NAT. Quem trabalha com redes, sabe como é chato configurar estações para usarem NAT, principalmente quando estas precisam ser acessadas pela internet.

O IPv6 resolve o problema do NAT, simplesmente não implementando-o. Alguém poderá pensar que isso é uma falha de segurança, pois o cliente fica conectado diretamente na rede pública.

Isso não é verdade. Cada cliente possui um IPv6 público, mas, deve haver um Firewall e outros sistemas de segurança entre o cliente e a Internet, como acontece no IPv4. O NAT foi criado para funcionar como um paliativo à falta de endereços IPv4. Como o número de endereços IPv6 disponíveis é quase infinito, não vemos qualquer motivo para usar NAT. Aleluia!

Roaming

Com a mobilidade que possuímos hoje (e isso só vai aumentar), é normal você possuir um Smartphone conectado em rede Eireless da empresa e no momento seguinte, já estar conectado na rede 3G da operadora de telefonia.

O problema que isso acarreta, é a mudança de endereço IP do dispositivo móvel, acarretando na quebra de conexões. Com o IPv6, é possível mudar de uma rede para outra preservando o endereço IPv6. Como isso, as conexões não são perdidas. Agora sim, você pode ficar conectado o tempo todo!

Fragmentação de pacotes

Em uma comunicação através da Internet, os dados podem passar pelos mais variados tipos de rede. Cada um deles permite um tamanho máximo dos pacotes de dados.

Antes de enviar um dados pela rede, o nó precisa dividir o pacote em pedaços menores, para que caibam na rede em questão. Esse pacote, por sua vez, pode ainda ser dividido em novos fragmentos. Isso gera lentidão nos roteadores.

No IPv6, a fragmentação é feita somente na origem. Há mecanismos que permitem saber qual o menor tamanho máximo permitido em todo o trajeto. Os roteadores não fragmentam os dados. Isso melhora o desempenho.

QOS

Algumas aplicações, como VoIP e Stream, precisam ter um mínimo de banda disponível para que funcionem corretamente.

No IPv4, você precisa de softwares especiais para permitir que essas aplicações tenham essa banda garantida. A isso, chamamos de Qualidade de Serviço (Quality Of Service – QOS).

No IPv6, o QOS está implementado diretamente no protocolo; não há necessidade de softwares especiais para essa finalidade.

Tamanho do frame

O protocolo IPv4 permite um tamanho máximo para o frame de 1,5 Kb. No IPv6, o tamanho máximo é de 4 GB, embora, ainda não exista aplicação que se beneficie disso. Mas, num futuro próximo, o Jumbo Frame poderá agilizar as comunicações em rede.

Broadcast

No protocolo IPv4, quando uma estação quer descobrir um MAC address, ou um servidor DHCP, a estação envia um broadcast para a rede. Esse broadcast é recebido por todos os hosts.

A resolução de nomes NetBIOS, usada muito em redes Windows, também usa broadcast, principalmente, quando não há um servidor WINS. Quanto mais broadcast na rede, mais lenta ela será.

O IPv6 acaba com o broacast. Eu seu lugar ocorre o “anycast”. O conceito é um pouco diferente, pois não usa, como no IPv4, o último endereço da rede para fazer broadcast.

O protocolo IPv6 possui um mecanismo que permite descobrir qual é o host mais próximo que atende a um certo requisito e que possui o mesmo prefixo IPv6. Um pacote anycast, será recebido apenas pelo host mais próximo.

Em outras palavras, em uma mesma rede, pode haver máquinas com prefixos diferentes. Um anycast só afetará as máquina do mesmo prefixo, ao contrário do que ocorre num broadcast IPv4.

Endereços de rede e de broadcast

Em uma VLAN IPv4, o primeiro e o último endereço são reservados para serem usados como Endereço de Rede e de Broadcast, respectivamente. No IPv6, isso não existe. Todos os endereços de uma VLAN podem ser usados.

Tamanho mínimo de uma VLAN

O tamanho mínimo para uma rede IPv4 é /30, onde temos 4 endereços de hosts. Excluindo-se, os endereços de rede e de broadcast, temos dois hosts possíveis nesta rede.

No IPv6, o recomendável é usar no mínimo um /64, pois, disso depende a autoconfiguração. Em outras palavras, uma rede IPv6 terá, no mínimo, 16 quintilhões de endereços disponíveis.

Não se assuste com esses números! Será comum empresas terem à disposição mais de 65 mil redes com 16 quintilhões de endereços disponíveis cada uma. Mesmo sendo em uma rede ponto-a-ponto, é aconselhável reservar um /64.

Mas, lembre-se: isso é apenas uma recomendação.

Resumo

Segue abaixo, um resumo das diferenças entre os protocolos IPv4 e IPv6:

IPv4 IPv6
32 bits 128 bits
Cabeçalho complexo (12 campos, entre 20 e 60 bytes) Cabeçalho mais simples (8 campos fixos, 40 bytes, podendo ter cabeçalhos de extensão)
Distribuição aleatória Distribuição hierárquica
IPsec opcional IPsec obrigatório
ARP ICMP (problema em bloquear input no firewall – RFC 4890)
DHCP Autoconfiguração e DHCP (stateless, statefull)
Possível conflito de IP Não há conflito de IP (a segunda máquina fica sem acesso)
Uso de NAT Não necessita de NAT
Roaming com alteração de IP Roaming sem alteração de IP
Fragmentação do pacote em todo o trajeto Fragmentação do pacote apenas na origem
QOS baseado em aplicação QOS nativo no protocolo
Frames de 1500 bytes Frames de até 4 gigabytes (jumbo frame)
Faz broadcast Não faz broadcast (anycast)
O primeiro e o último endereço da VLAN são reservados Todos os endereços da VLAN podem ser usados
Rede mínima com 2 hosts (/30) Rede mínima com 16 quintilhões de hosts (/64)

Quando será a virada?

Não há uma data para a implantação do IPv6.

A migração será um processo e ocorrerá aos poucos. Durante algum tempo, as máquinas terão dois protocolos, o IPv4 e o IPv6, algo semelhante ao que ocorreu quando as empresas migraram da rede Netware para a Windows NT nos anos 90; por um momento, os equipamentos tinham dois protocolos: o IPX, o NetBIOS e, às vezes, tinham também o IPv4.

Como sabemos, não há mais endereços IPv4 disponíveis no IANA. Na APNIC, que cuida da Internet na Ásia, também não há mais endereços disponíveis. Ou seja, não vai demorar para aparecerem máquinas apenas com endereços IPv6.

E é aí que a coisa complica. Como fazer uma máquina só com IPv6 conversar com outra somente IPv4?

E se você acha que isso não lhe diz respeito, na empresa onde trabalho, temos uma parceria com a Sony japonesa. E se eu não implantar o IPv6, mais cedo ou mais tarde, teremos problemas.

Nos próximos artigos vamos ver como começar a mexer com o IPv6 no Linux.

    

Nmap descobrindo a versão do programa remoto

Entre as várias funcionalidades do Nmap, um dos mais conhecidos scanner de rede, está a de tentar descobrir quais programas e versões estão instalados no alvo. A opçao “-sV” faz a brincadeira acontecer.
$ nmap -sV 172.20.1.1

Starting Nmap 6.00 ( http://nmap.org ) at 2014-06-17 11:56 BRT

Nmap scan report for 172.20.1.1
Host is up (0.0011s latency).
Not shown: 980 closed ports
PORT     STATE SERVICE       VERSION
42/tcp     open  wins              Microsoft Windows Wins
53/tcp     open  domain          Microsoft DNS
88/tcp     open  tcpwrapped
135/tcp   open  msrpc            Microsoft Windows RPC
139/tcp   open  netbios-ssn
389/tcp   open  ldap
445/tcp   open  microsoft-ds   Microsoft Windows 2003 or 2008 microsoft-ds
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http     Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
1025/tcp open  msrpc            Microsoft Windows RPC
1027/tcp open  ncacn_http     Microsoft Windows RPC over HTTP 1.0
1048/tcp open  msrpc            Microsoft Windows RPC
1053/tcp open  msrpc            Microsoft Windows RPC
1124/tcp open  msrpc            Microsoft Windows RPC
2701/tcp open  landesk-rc     LANDesk RC 2.0
2702/tcp open  sms-xfer?
3268/tcp open  ldap
3269/tcp open  tcpwrapped
3389/tcp open  ms-wbt-server Microsoft Terminal Service
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
 
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 50.23 seconds
Outro exemplo:
$ nmap -sV 172.20.1.14
Starting Nmap 6.00 ( http://nmap.org ) at 2014-06-17 12:21 BRT
Nmap scan report for www.segundatela.tv.br (172.20.1.14)
Host is up (0.00062s latency).
Not shown: 993 closed ports
PORT      STATE SERVICE                VERSION
22/tcp       open  ssh                    OpenSSH 6.0p1 Debian 4 (protocol 2.0)
80/tcp       open  http                   Apache httpd 2.2.16 ((Debian) PHP/5.3.3-7+squeeze14 with Suhosin-Patch)
111/tcp     open  rpcbind (rpcbind V2-4) 2-4 (rpc #100000)
666/tcp     open  http                   darkstat network analyzer httpd 3.0.715
873/tcp     open  rsync                 (protocol version 30)
2049/tcp   open  nfs (nfs V2-4)    2-4 (rpc #100003)
10000/tcp open  http                   MiniServ 1.660 (Webmin httpd)
Service Info: OSs: Linux, Unix; CPE: cpe:/o:linux:kernel
 
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 46.18 seconds
    

Cliente de FTP gFTP

Quem usa bastante FTP vai gostar do gFTP.
O gFTP é leve a fácil de usar, tem muitos recursos, permite a copia de e para o servidor simplesmente arrastando os arquivos e pode ser instalado através do gerenciador de pacotes da tua distribuição. No Linux, basta executar:
# apt-get install gftp
    

Como configurar um quiosque

Um quiosque é um equipamento com acesso público que fornece algum serviço, geralmente navegação. Neste post vamos configurar um quiosque contendo apenas um navegador.

O primeiro passo é instalar a distribuição Linux de sua preferência. Eu sugiro o Debian, e com menos pacotes possíveis. Instale o ambiente gráfico de sua escolha. Crie um usuário (usei quiosque) e personalize o Firefox.  Não esqueça de deixá-lo em tela cheia.

Após as personalizações, vamos aos procedimentos para fazer com que o Firefox abra no boot.

Primeiro, instale o aplicativo mingetty.

$ apt-get install mingetty

Após, abra o arquivo /etc/inittab a altere a linha…

1:2345:respawn:/sbin/getty 38400 tty1

por…

1:2345:respawn:/sbin/mingetty –autologin quiosque tty1

Isso fará com que o o usuário quiosque esteja logado automaticamente no boot. Após, abra o arquivo .bashrc do usuário quiosque e inclua as seguintes linhas no final do arquivo.

xinit /usr/bin/firefox

Reinicie a máquina e você verá o quiosque funcionando. O computador vai ligar e já carregar o Firefox .

    

Netcat, o canivete suíço de rede

O netcat é uma ferramenta muito interessante que pode fazer coisas malucas com a rede. Melhor do que tentar explicar é mostrar alguns exemplos de uso.

Vamos supor que você precise criar uma imagem do disco, mas (logicamente!) você não pode gravar essa imagem no mesmo disco. Você pode enviar a imagem diretamente para outro equipamento conforme esta vai sendo gerada. No equipamento destino, execute:

$ netcat -l 1234 | dd of=destino.iso

Na origem, digite:

$ dd if=/dev/sda1 | netcat 172.20.120.4 1234

10+0 registros de entrada

10+0 registros de saída

10240 bytes (10 kB) copiados, 2,582e-05 s, 397 MB/s

Explicando: no destino, o netcat abre a porta 1234 e espera por conexões. Tudo o que for recebido por ela será encaminhado para o dd, que gravará o arquivo destino.iso. Na origem, o dd está fazendo uma cópia física do disco /dev/sda1 e jogando a saída para o netcat, que se conecta ao destino 172.20.120.4 na porta 1234.

Outro exemplo: no destino, execute

$ netcat -l 1234

Na origem, digite

# tail -f /var/log/messages | netcat 172.20.120.4 1234

O arquivo /var/log/messages da origem vai ser mostrado no terminal do destino.

    

IPv6 no Linux com Miredo

Se você quer ter suporte a IPv6 no Linux, basta instalar o Miredo.

# apt-get install miredo

O Miredo fornece uma interface IPv6 do tipo Teredo. Com ele você pode navegar na Internet usando o novo protocolo IPv6.

teredo    Link encap:Não Especificado  Endereço de HW 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  

         endereço inet6: fe80::ffff:ffff:ffff/64 Escopo:Link

         endereço inet6: 2001:0:53aa:64c:2009:5fca:3777:e46d/32 Escopo:Global

         UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1280  Métrica:1

         RX packets:31 errors:0 dropped:0 overruns:0 frame:0

         TX packets:111 errors:0 dropped:0 overruns:0 carrier:0

         colisões:0 txqueuelen:500

         RX bytes:4353 (4.2 KiB)  TX bytes:10545 (10.2 KiB)

Não é necessário nenhuma configuração extra. Se você estiver atrás de um firewall, basta liberar o acesso a porta UDP 3544 para o endereço 83.170.6.76. E também adicione o DNS do Google em teu arquivo /etc/resolv.conf.

nameserver 2001:4860:4860::8888

nameserver 2001:4860:4860::8844