IPV6 COMPLETO NET VIRTUA

INTRODUÇÃO

 

Resolvi escrever este artigo no intuito de ajudar quem deseja começar a utilizar IPv6 em suas redes internas.

Neste setup optei por desativar completamente a rede IPv4 para a rede interna, utilizando nat64 ao invés de utilizar pilha dupla.

O acesso a endereços IPv4 serão feitos através do IPv4 da WAN, através de NAT nos endereços convertidos pela interface 6to4.

Para o cliente é transparente. Ele recebe um IPv6 falso, já que o IPv4 não existe na LAN.

Este artigo não engloba o firewall, você deve ter suas regras tanto para v4 como v6.

Para esta configuração, foi utilizada a distribuição Debian, sendo eth0 a LAN e ETH1 a WAN. Na LAN, funcionará somente IPv6, enquanto a WAN em pilha dupla.

AS PRINCIPAIS DIFERENÇAS

Antes de começar é necessário entender as principais diferenças práticas. Entre elas:

A interface pode possuir vários IPs ao mesmo tempo, entre eles:

  • IP local, começado com fe80::/64 (auto configurado durante o boot)
  • IP global (valido), com prefixo delegado pela net (recebi 2804:14d:5ca9::/64)
  • IP local de um servidor DHCP com prefixo fd00::/64, mas não é necessário, a fe80 faz o mesmo papel

O default gateway e o DNS passam a ser anunciados através de RA (router advertisement) com o radvd, sem a necessidade de um servidor DHCPv6.

As estações Windows por algum motivo ignoram o DNS anunciado pelo RA, tornando obrigatório o uso do DHCP-server.

Utilizaremos o wide-dhcpv6-server para anunciar o nosso DNS e opcionalmente o prefixo local fd00::/64.

PRÉ-REQUISITOS

Conecte ao servidor por ssh na porta LAN, pelo IPv6 local (fe80:…:…).

Instale os pacotes necessários:

# apt-get install wide-dhcpv6-client wide-dhcpv6-server radvd ndisc6 bind9 tayga

Edite o arquivo interfaces e deixe como abaixo. No meu caso, a eth0 é a LAN, e a ETH1 a WAN:

# vim /etc/networks/interfaces

auto eth0
allow-hotplug eth0
iface eth0 inet manual
iface eth0 inet6 manual

auto eth1
allow-hotplug eth1
iface eth1 inet dhcp
iface eth1 inet6 manual

Configure o dhcp-client V4 para configurar o resolv.conf com o endereço localhost, acrescentando as 2 linhas “supersede”, como no exemplo abaixo:

# vim /etc/dhcp/dhclient.conf

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

supersede domain-name-servers localhost;
supersede domain-name “rede.local”;

send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;

Feito isto, reinicie o servidor.

 

WIDE-DHCPV6-CLIENT

 

A NET fornece um IPv6 válido e 1 sub-rede /64. Com a configuração abaixo, o wide-dhcpv6-client irá atribuir este IP na interface WAN(eth1) e delegar a sub-rede na interface LAN(eth0):

# vim /etc/wide-dhcpv6/dhcp6c.conf

interface eth1 {
send ia-na 1;
send ia-pd 1;
};

id-assoc na 1 { };

id-assoc pd 1 {
prefix-interface eth0 {
sla-len 0;
sla-id 0;
ifid 1;
};
};

Certifique-se que o dhcp6-client esteja escutando na interface WAN:

# vim /etc/default/wide-dhcpv6-client

#Interface WAN INTERFACES=”eth1″

Agora precisamos descobrir qual prefixo a net delegou para configurarmos os outros serviços.

Defina estas 3 variáveis no kernel. Posteriormente salvaremos elas em um arquivo que será executado no boot.

# echo “1” > /proc/sys/net/IPv4/ip_forward
# echo ‘2’ > /proc/sys/net/IPv6/conf/eth1/accept_ra
# echo ‘1’ > /proc/sys/net/IPv6/conf/all/forwarding

Execute o wide-dhcpv6-client em modo console:

# /usr/sbin/dhcp6c -c /etc/wide-dhcpv6/dhcp6c.conf -p /var/run/dhcp6c-eth0-pd.pid -dDf eth1

Procure no console por algo como:

IA_PD prefix: 2804:14d:5ca9:85ea::/64

Este é o prefixo /64 que a NET atribuiu para a rede interna. Precisamos dar permissão para ele no DNS e firewall.

Em seguida inicie o serviço:

# /etc/init.d/wide-dhcpv6-client start

Digite “ifconfig”. Se tudo correu bem, você terá isto:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::21f:d0ff:fee1:ff77  prefixlen 64  scopeid 0x20<link>   ( IPv6 Local da LAN )
        inet6 2804:14d:5ca9:85ea::1  prefixlen 64  scopeid 0x0<global>     ( IPv6 da rede delegada pela net. É o default gateway da LAN)
   
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 186.221.151.6  netmask 255.255.240.0  broadcast 186.221.159.255   (Ipv4 wan, vai ser usado para acessar sites sem IPv6)
        inet6 2804:14d:5ca9::5b7  prefixlen 128  scopeid 0x0<global>  (Ipv6 wan do servidor atribuído pela net) 
        inet6 fe80::260:8ff:fe1f:c868  prefixlen 64  scopeid 0x20<link> (Ipv6 wan local) 
 

Explicando:

  • IPs iniciados fe80 são locais, auto-configurados durante o boot e não são roteáveis pela internet.
  • IPs iniciados com 2804 foram atribuídos pela NET e são roteáveis pela internet.

Se estes endereços não apareceram, revise os passos anteriores.

 

PROBLEMA COM ROTA PADRÃO EXPIRANDO. SOLUÇÃO: NDISC6

 

Por algum motivo, depois de algum tempo a conectividade se perdia e percebi que a rota padrão não era renovada na WAN.

Não vou entrar em detalhes técnicos, mas resolvi este problema agendando o ndisc6 no cron:

# vim /etc/crontab

*/5 *  * * *   root    /bin/rdisc6 -1 -q eth1

O NAT64 (TAYGA) E A INTEGRAÇÃO COM O DNS

O Nat 64 é feito através de uma interface virtual 6to4 chamada tayga, integrado a um servidor DNS com dns64 configurado.

Não vou entrar em detalhes técnicos, mas funciona assim:

A estação consulta um host em nosso servidor DNS e nosso DNS consulta os root servers.

  • Se o root server responder com um IPv6 valido, nosso servidor roteará por IPv6, fim.
  • Se o root server responder com IPv4, o nosso dns vai responder com um endereço IPv6 falso, gerado através do prefixo que configuraremos no bind + endereço IPv4 que o root server respondeu.

A interface 6to4 vai retirar o prefixo IPv6 falso, converter para IPv4 e mascarar uma rede local IPv4 192.168.253.x. Feito isto, fazemos o mascaramento (nat) e enviamos pelo IPv4 da wan.

Na volta, é o processo inverso: o servidor recebe a resposta pelo IPv4 da wan, faz o nat e entrega para a interface 6to4, que converte novamente para IPv6 encaminha para a estação.

Vamos à configuração do Tayga!

Edite os arquivos abaixo, deixe igual e reinicie o serviço:

# vim /etc/tayga.conf

IPv4-addr 192.168.253.1
prefix 2001:db8:1:ffff::/96
dynamic-pool 192.168.253.0/24

# vim /etc/default/tayga

RUN=”yes”
CONFIGURE_IFACE=”yes”
CONFIGURE_NAT44=”yes”
DAEMON_OPTS=””
IPV4_TUN_ADDR=””
IPV6_TUN_ADDR=””

Agora reiniciamos o serviço:

# service tayga restart

 

BIND9 COM DNS64

 

A configuração do bind é simples, consiste em dar permissão aos endereços locais, ao prefixo delegado e acrescentar a linha “dns64 2001:db8:1:ffff::/96 { clients { any; }; };”.

Seu arquivo deve estar semelhante a este abaixo:

# vim /etc/bind/named.conf.options

listen-on-v6 { any; };
listen-on { any; };
dns64 2001:db8:1:ffff::/96 { clients { any; }; };
allow-query { 127.0.0.0/8; fe80::/64; 2804:14d:5ca9::/64; }; #( 2804:14d:5ca9::/64 = prefixo delegado pelo provedor)

Certifique-se que o resolv.conf está desabilitado:

# vim /etc/default/bind9

RESOLVCONF=no

Agora basta reiniciar o serviço:

# service bind9 restart

NAT, ROTEAMENTO E VARIÁVEIS DO KERNEL

Agora iremos criar um script que será carregado no boot, setando algumas variáveis no kernel e criando algumas regras no netfilter.

Crie o arquivo nat64, torne executável, cole o conteúdo abaixo, execute e carregue durante o boot:

# touch /etc/init.d/nat64
# chmod +rx /etc/init.d/nat64
# vi /etc/init.d/nat64

#! /bin/sh
### BEGIN INIT INFO
# Provides:             NAT 6 to 4
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Default-Start:        2 3 4 5
# Default-Stop:
# Short-Description:    Serviço de NAT 6 to 4
### END INIT INFO

# Variaveis do kernel
echo “1” > /proc/sys/net/IPv4/ip_forward
echo ‘2’ > /proc/sys/net/IPv6/conf/eth1/accept_ra
echo ‘1’ > /proc/sys/net/IPv6/conf/all/forwarding

# Faz o NAT para a rede local e permite o encaminhamento entre as interfaces 
#iptables -t nat -A POSTROUTING -s 192.168.253.0/24 -o eth1 -j MASQUERADE
iptables -A FORWARD -i eth1 -o nat64 -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i nat64 -o eth1 -j ACCEPT
iptables -A FORWARD -i nat64 -o eth0 -j ACCEPT

# update-rc.d nat64 defaults

Agora reiniciar o servidor e verificar se tudo está funcionando corretamente.

Rolar para cima