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:

Servidor Linux com IPv6 publico


9 - Se o servidor está com conectividade IPv6, verificar os clientes:

Cliente com IPv6 privado

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).

Voltar

>    © 2016 Rafael Ferrari (RafaelBF)   >    rafa.eng.br   >    email