Normalmente, o IPv6 deve obter as informações de ip, netmask e route / gateway do próprio roteador através de "Anúncio do roteador" usando o "Protocolo de descoberta de vizinhos".
Isso difere completamente do modo como o IPv4 funciona. Existe algo chamado DHCPv6 que deve funcionar como DHCP para o ipv6, mas não possui muitos recursos. Muito provavelmente devido ao modo como o IPv6 deve funcionar.
No entanto, muitos de nós querem poder atribuir o IPv6 aos nossos clientes da mesma maneira que faríamos com o IPv4 e o DHCP. Isso é possível, mas requer um pouco de ajustes.
A primeira coisa que você precisa fazer é adicionar 3 parâmetros OPTION personalizados ao seu servidor DHCP.
Se você estiver usando o servidor ISC DHCP no Linux, seu arquivo de configuração deve se parecer com isto:
authoritative;
default-lease-time 86400;
max-lease-time 86400;
log-facility local7;
use-host-decl-names on;
option ipv6-address code 214 = ip6-address;
option ipv6-netmask code 215 = unsigned integer 8;
option ipv6-gateway code 216 = ip6-address;
subnet 88.xxx.xxx.128 netmask 255.255.255.224 {
option domain-name "example.com";
option domain-name-servers 8.8.8.8, 8.8.4.4;
option routers 88.xxx.xxx.128;
option subnet-mask 255.255.255.255;
option ipv6-netmask 112;
}
host ip-88-xxx-xxx-129.example.com {
hardware ethernet 16:xx:xx:xx:b3:8d;
fixed-address 88.xxx.xxx.129;
option host-name "ip-88-xxx-xxx-129.example.com";
option ipv6-address 2a01:xxx:xxx:2464::1:1;
option ipv6-gateway 2a01:xxx:xxx:2464::1:0;
}
host ip-88-xxx-xxx-130.example.com {
hardware ethernet 16:xx:xx:xx:af:aa;
fixed-address 88.xxx.xxx.130;
option host-name "ip-88-xxx-xxx-130.example.com";
option ipv6-address 2a01:xxx:xxx:2464::2:1;
option ipv6-gateway 2a01:xxx:xx:2464::2:0;
}
host ip-88-xxx-xxx-131.example.com {
hardware ethernet 16:xx:xx:xx:7a:73;
fixed-address 88.xxx.xxx.131;
option host-name "ip-88-xxx-xxx-131.example.com";
option ipv6-address 2a01:xxx:xxx:2464::3:1;
option ipv6-gateway 2a01:xxx:xxx:2464::3:0;
}
Como você pode ver, adicionei 3 novas opções chamadas "ipv6-address", "ipv6-netmask" e "ipv6-gateway". Você os define da mesma forma que faria normalmente com o IPv4.
Não se esqueça de reiniciar o servidor DHCP depois de fazer as alterações.
Agora, os clientes precisam ser instruídos a incluir essas 3 OPÇÕES personalizadas quando estiverem fazendo uma solicitação DHCP.
Isso difere dependendo de qual cliente DHCP você está usando. Debian / Ubuntu está usando "dhclient" e sua configuração precisa ser algo como isto:
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
option ipv6-address code 214 = ip6-address;
option ipv6-netmask code 215 = unsigned integer 8;
option ipv6-gateway code 216 = ip6-address;
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,
dhcp6.domain-search, dhcp6.fqdn,
dhcp6.name-servers, dhcp6.sntp-servers,
ipv6-address, ipv6-netmask, ipv6-gateway;
Como você pode ver, adicionei as 3 definições OPTION personalizadas na parte superior e depois informei ao DHCP para incluí-las na solicitação.
Agora tente reiniciar o seu cliente e veja se ele ainda obtém um IPv4 corretamente como antes (como deveria).
Após a reinicialização, você pode dar uma olhada no arquivo de concessão que o DHCP criou. Ele contém as informações coletadas do servidor DHCP. Em um sistema Debian / Ubuntu, ele pode ser encontrado em "/var/lib/dhcp/dhclient.eth0.leases". Se você procurar no arquivo, verá algo assim:
lease {
interface "eth0";
fixed-address 88.xxx.xxx.136;
option subnet-mask 255.255.255.255;
option routers 88.xxx.xxx.128;
option dhcp-lease-time 86400;
option dhcp-message-type 5;
option domain-name-servers 8.8.8.8,8.8.4.4;
option dhcp-server-identifier 88.xxx.xxx.128;
option ipv6-address 2a01:xxx:xxx:2464::8:1;
option ipv6-netmask 112;
option host-name "ip-88-xxx-xxx-136.example.com";
option ipv6-gateway 2a01:xxx:xxx:2464::8:0;
option domain-name "example.com";
renew 6 2013/08/03 23:32:53;
rebind 0 2013/08/04 09:04:30;
expire 0 2013/08/04 12:04:30;
}
Como você pode ver, as 3 OPÇÕES personalizadas encontraram o caminho para o cliente corretamente.
Agora, a última coisa que você precisa fazer é adicionar um script que use esses valores para configurar sua interface ipv6.
O dhclient está usando um sistema de gancho especial no qual ele executa scripts durante determinados estágios. Precisamos fazê-lo funcionar quando uma resposta do servidor DHCP for recebida.
Crie um arquivo em "/etc/dhcp/dhclient-exit-hooks.d/ipv6" com o seguinte conteúdo:
#**************************************
# This script sets ipv6 based on custom options
#**************************************
# To enable this script set the following variable to "yes"
RUN="yes"
if [ "$RUN" != "yes" ]; then
exit 0
fi
if [ "$reason" != "BOUND" ]; then
exit 0
fi
if [ ! -n "$new_ipv6_address" ] || [ ! -n "$new_ipv6_netmask" ] || [ ! -n "$new_ipv6_gateway" ]; then
exit 0
fi
ip addr add $new_ipv6_address/$new_ipv6_netmask dev $interface
ip -6 route add default via $new_ipv6_gateway dev $interface
Agora reinicie seu cliente e veja a mágica acontecer!
UPDATE 1: movido o ipv6 de "ifup.d" para rodar no limite DHCP para torná-lo mais limpo.