Servidor Linux com IPv6 e NAT
O protocolo IPv6 veio para substituir o IPv4, e o número possíveis de
endereços é tão grande que qualquer computador (mesmo em uma rede doméstica ou
empresa) pode ter um IP público.
Este tutorial ensina como migrar para o IPv6 mantendo endereços IP privados na
rede interna, e usando NAT para acessar a internet, assim como era feito no
IPv4.
Preparando seu servidor
Este tutorial é baseado no Linux Debian, podem ter diferenças com outras
distribuições. É importante ser uma versão atual, aqui estou usando a versão Jessie.
1 - Instale o pacote
wide-dhcpv6-client:
apt-get install wide-dhcpv6-client
2 - Instale o pacote
dnsmasq:
apt-get install dnsmasq
3 - Edite o arquivo
/etc/network/interfaces. Neste exemplo,
eth0 é minha placa ligada na internet, e
eth1 é a rede interna.
A
eth0 vai pegar um IPv4 público por
dhcp, e a
eth1 vai ter endereços privados IPv4 e IPv6:
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
iface eth1 inet6 static
address fdd0:beef:c4ea:2016:0000:0000:0000:0001
netmask 64
autoconf 0
dad-attempts 0
accept_ra 0
Neste IP, fd é o prefixo, d0beefc4ea é o
global ID, 2016 é a subnet ID, e o
resto é a interface ID.
O prefixo não pode ser alterado, o global ID e subnet ID podem ter qualquer
valor hexadecimal. É recomendado que sua organização use sempre o mesmo global
ID, e altere o subnet ID para separar as redes.
A interface ID é um endereço único para cada máquina na mesma
subnet.
4 - Edite o arquivo
/etc/wide-dhcpv6/dhcp6c.conf: (esta
configuração foi testada com a NET,
eth0 é a internet)
profile default
{
request domain-name-servers;
request domain-name;
script "/etc/wide-dhcpv6/dhcp6c-script";
};
interface eth0 {
send rapid-commit;
send ia-na 0;
send ia-pd 0;
};
id-assoc na 0 {
};
id-assoc pd 0 {
};
5 - Edite o arquivo
/etc/sysctl.conf para adicionar ou alterar as
seguintes linhas: (neste caso,
eth0 é a internet)
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.eth0.accept_ra=2
6 - Edite o arquivo
/etc/dnsmasq.conf para adicionar ou alterar
as seguintes linhas: (
eth1 é a rede interna)
interface=eth1
dhcp-range=192.168.0.100,192.168.0.200,2h
dhcp-range=fdd0:beef:c4ea:2016::1000,fdd0:beef:c4ea:2016::2000, 2h
enable-ra
7 - Edite seu script de firewall, adicionando as regras para o
IPv6:
ip6tables -F
ip6tables -X
ip6tables -t nat -F
ip6tables -t nat -X
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT
ip6tables -A INPUT -s fe80::/10 -j ACCEPT
ip6tables -A OUTPUT -s fe80::/10 -j ACCEPT
ip6tables -A INPUT -d ff00::/8 -j ACCEPT
ip6tables -A OUTPUT -d ff00::/8 -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate INVALID -j DROP
ip6tables -A INPUT -i $WAN -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
ip6tables -A INPUT -i eth1 -j ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# exemplo de como redirecionar uma porta
# ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination
[fdd0:beef:c4ea:2016:0000:0000:0000:1000]:80
8 - Reinicie o servidor, veja se ele obteve um endereço
público IPv6, faça um teste de ping digitando
ping6 google.com.
Observe a linha com o endereço IPv6 público:
9 - Se o servidor
está com conectividade IPv6, verificar os clientes:
Tudo certo ! Temos IPv6 privado na rede interna ! Os clientes agora vão obter um
endereço com final entre 1000 e 2000, o gateway vai ser o endereço link- local
do servidor (iniciando com fe80).
> © 2016 Rafael Ferrari (RafaelBF) >
rafa.eng.br >