INTRODUÇÃO
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
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
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
# vim /etc/wide-dhcpv6/dhcp6c.conf
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
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
Não vou entrar em detalhes técnicos, mas resolvi este problema agendando o ndisc6 no cron:
# vim /etc/crontab
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
prefix 2001:db8:1:ffff::/96
dynamic-pool 192.168.253.0/24
# vim /etc/default/tayga
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
Seu arquivo deve estar semelhante a este abaixo:
# vim /etc/bind/named.conf.options
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
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
### 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.