05 - DHCPv6 (Stateful vs Stateless)
video: https://youtu.be/... no frontmatter da nota.DHCPv6 (Stateful vs Stateless)
1. Definição e Motivação
O DHCPv6 (RFC 8415, revisão mais recente; originalmente RFC 3315) é o equivalente IPv6 do DHCPv4. Sua função é atribuir endereços IPv6 e/ou outras configurações (DNS, NTP, domínios de busca) a hosts em uma rede IPv6. Ao contrário do DHCPv4, no entanto, o DHCPv6 não é a única forma de atribuir IPs em IPv6 — existe também o SLAAC (StateLess Address AutoConfiguration, RFC 4862).
Essa dualidade gera dois modos operacionais:
- Stateful DHCPv6: servidor atribui IPs explicitamente, mantém tabela de leases (como DHCPv4).
- Stateless DHCPv6: servidor apenas fornece configurações extras (DNS, domínio); IPs são obtidos via SLAAC.
A escolha entre os modos é feita por flags anunciadas em Router Advertisements (RA, RFC 4861).
2. SLAAC vs DHCPv6: Comparação
SLAAC
- Host recebe prefixo /64 via RA do roteador.
- Host gera o próprio ID de interface (EUI-64 ou aleatório, RFC 7217) e combina com o prefixo.
- Resultado: IP como
2001:db8:10::a00:27ff:fe4e:66d. - Não há tabela central de leases — o roteador não sabe quais IPs estão em uso.
- Rápido, descentralizado, mas sem controle granular.
DHCPv6 Stateful
- Servidor DHCPv6 mantém pool de endereços e tabela de leases.
- Host obtém IP específico do servidor, identificado por DUID (DHCP Unique IDentifier).
- Suporta reservas estáticas, políticas, logs.
- Mais lento que SLAAC, mas com controle total.
DHCPv6 Stateless
- Host obtém IP via SLAAC.
- Host consulta servidor DHCPv6 apenas para DNS, NTP, domínios de busca.
- Mistura o melhor dos dois mundos: autoconfiguração de IP + configuração central de serviços.
3. Flags no Router Advertisement
O roteador IPv6 envia RAs ICMPv6 (tipo 134) periodicamente. Um campo de flags no RA contém:
| Flag | Significado |
|---|---|
| M (Managed) | 1 = clientes devem usar DHCPv6 stateful para obter IP |
| O (Other Config) | 1 = clientes devem usar DHCPv6 para obter outras configurações (DNS, NTP) |
| A (Autonomous) | Por prefixo; 1 = prefixo pode ser usado para SLAAC |
Combinações Práticas
| Flags | Modo Operacional |
|---|---|
| M=0, O=0 | Apenas SLAAC, sem DHCPv6 (DNS via RA option, RFC 8106) |
| M=0, O=1 | Stateless DHCPv6 (SLAAC + DHCPv6 para DNS) |
| M=1, O=0 | Stateful DHCPv6 puro (sem SLAAC) |
| M=1, O=1 | Stateful DHCPv6 com DHCPv6 também para outras configs |
Configuração no Linux (radvd)
interface eth0 {
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
prefix 2001:db8:10::/64 {
AdvOnLink on;
AdvAutonomous on; # A=1 (permite SLAAC)
};
RDNSS 2001:db8:10::53 { # DNS via RA (RFC 8106)
AdvRDNSSLifetime 600;
};
};
Para configurar M=1 (DHCPv6 stateful):
interface eth0 {
AdvSendAdvert on;
AdvManagedFlag on; # M=1
AdvOtherConfigFlag off; # O=0
prefix 2001:db8:10::/64 {
AdvOnLink on;
AdvAutonomous off; # A=0 (sem SLAAC)
};
};
Configuração no Cisco
interface GigabitEthernet0/0/0
ipv6 address 2001:DB8:10::1/64
ipv6 nd managed-config-flag ! M=1
ipv6 nd other-config-flag ! O=1
ipv6 nd prefix 2001:DB8:10::/64 no-autoconfig ! A=0
4. DUID (DHCP Unique IDentifier)
Cada cliente DHCPv6 é identificado por um DUID (RFC 8415), não pelo MAC (como no DHCPv4). Existem três formatos:
| Tipo | Nome | Conteúdo |
|---|---|---|
| DUID-LLT | Link-Layer + Time | MAC + timestamp de criação |
| DUID-EN | Vendor | Enterprise number + identificador próprio |
| DUID-LL | Link-Layer | Apenas MAC (sem timestamp) |
O DUID é persistente entre boots. Permite reservas estáveis mesmo se o host mudar de placa de rede.
Reserva Estática no Servidor (ISC Kea)
{
"subnet6": [
{
"subnet": "2001:db8:10::/64",
"reservations": [
{
"duid": "00:01:00:01:2a:3b:4c:5d:6e:7f",
"ip-addresses": ["2001:db8:10::100"]
}
]
}
]
}
5. Mensagens DHCPv6
| Mensagem | Tipo | Função |
|---|---|---|
| SOLICIT | 1 | Cliente procura servidor |
| ADVERTISE | 2 | Servidor responde com proposta |
| REQUEST | 3 | Cliente confirma escolha |
| CONFIRM | 4 | Cliente verifica se ainda está na mesma rede |
| RENEW | 5 | Renovação com servidor original |
| REBIND | 6 | Renovação broadcast para qualquer servidor |
| REPLY | 7 | Resposta final (Ack) |
| RELEASE | 8 | Cliente libera IP |
| DECLINE | 9 | Cliente detecta IP conflitante |
| RECONFIGURE | 10 | Servidor força cliente a renovar |
| INFORMATION-REQUEST | 11 | Stateless: pedir apenas opções |
| RELAY-FORW | 12 | Relay → servidor |
| RELAY-REPL | 13 | Servidor → relay |
Fluxo Stateful (4-way)
Cliente Servidor DHCPv6
| |
| ---- SOLICIT (multicast ff02::1:2)--> | (UDP 547)
| <-- ADVERTISE (unicast) ------------ |
| ---- REQUEST (unicast) ------------> |
| <-- REPLY (unicast) ---------------- |
| |
| == Cliente configura IPv6 == |
O cliente envia SOLICIT para o endereço multicast ff02::1:2 (All DHCP Relay Agents and Servers). O servidor responde com ADVERTISE em unicast.
Fluxo Stateless
Cliente Servidor DHCPv6
| -- INFORMATION-REQUEST --------> |
| <-- REPLY (DNS, NTP, domain) -- |
Apenas duas mensagens — mais leve que o stateful.
6. Prefix Delegation (PD)
Um recurso poderoso do DHCPv6 é a Prefix Delegation (RFC 3633): o servidor delega um prefixo /56 ou /48 ao cliente (típico em redes residenciais), em vez de um único /128. O cliente (um roteador doméstico CPE) então subdivide esse prefixo nas suas redes internas via SLAAC ou DHCPv6 local.
ISP ----------> CPE Cliente (delegação)
2001:db8::/56 --> 2001:db8:0:100::/56 atribuído
|
|--> SLAAC para LAN interna
|--> DHCPv6-PD para outra LAN
Configuração CPE (cliente) Cisco
interface GigabitEthernet0/0/0 ! WAN
ipv6 address dhcp
ipv6 dhcp client pd ISP-PREFIX
!
interface GigabitEthernet0/0/1 ! LAN
ipv6 address ISP-PREFIX ::1/64
ipv6 nd other-config-flag
7. DHCPv6 Relay
Como DHCPv6 usa multicast em vez de broadcast (que não existe em IPv6), o relay DHCPv6 tem lógica ligeiramente diferente do DHCPv4. O relay recebe mensagens DHCPv6 multicast e encaminha via unicast ao servidor usando mensagens RELAY-FORW e RELAY-REPL.
Cisco
interface GigabitEthernet0/0/0
ipv6 dhcp relay destination 2001:db8:99::5
Linux
dhcrelay -6 -l eth0 -u 2001:db8:99::5
8. Comparativo DHCPv4 vs DHCPv6
| Aspecto | DHCPv4 | DHCPv6 |
|---|---|---|
| RFC | 2131 | 8415 |
| Portas | UDP 67/68 | UDP 547 (server), 546 (client) |
| Discovery | Broadcast 255.255.255.255 | Multicast ff02::1:2 |
| ID cliente | chaddr (MAC) | DUID |
| Atribuição de IP | yiaddr | IA_NA (Identity Association) |
| Alternativa a DHCP | Nenhuma (estático manual) | SLAAC |
| Flags de configuração | Nenhuma | M, O, A no RA |
| Prefix Delegation | Não | Sim (RFC 3633) |
| Relay | UDP helper, giaddr | RELAY-FORW/REPL, link-address |
9. Quando Usar Cada Modo
Use SLAAC (stateless, sem DHCP)
- Redes simples onde controle granular não é necessário.
- Redes de visitantes (cafés, aeroportos).
- Quando a meta é apenas conectar.
Use Stateless DHCPv6
- Maioria das redes corporativas modernas.
- Quer autoconfiguração rápida + controle centralizado de DNS.
- Compatível com a maioria dos SOs modernos.
Use Stateful DHCPv6
- Redes que exigem tracking (auditoria de quem tem qual IP).
- Ambientes com políticas de IP (reservas para dispositivos críticos).
- ISPs residenciais que querem atribuir prefixos específicos (via PD).
10. Boas Práticas e Diagnóstico
Inspecionar RAs
# Linux (radvdump)
sudo radvdump
# Verificar flags M/O
sudo ndisc6 -1 eth0
Diagnosticar DHCPv6
# Solicitar manualmente
dhclient -6 -v eth0
# Captura
sudo tcpdump -ni eth0 -vvv 'port 547 or port 546'
# Ver IPs atribuídos
ip -6 addr show dev eth0
Comum Problema: Host não pega IPv6
- Verificar se o roteador está enviando RAs:
tcpdump -ni eth0 'icmp6 and ip6[40] == 134'. - Verificar flags M/O no RA:
radvdump. - Verificar se firewall está bloqueando UDP 547/546.
- Testar com
dhclient -6diretamente.
11. Tabela Resumo
| Modo | Flags RA | Quem dá IP | Quem dá DNS |
|---|---|---|---|
| SLAAC puro | M=0, O=0, A=1 | SLAAC | RA RDNSS (RFC 8106) |
| Stateless DHCPv6 | M=0, O=1, A=1 | SLAAC | DHCPv6 |
| Stateful DHCPv6 | M=1, O=*, A=0 | DHCPv6 | DHCPv6 |
12. Conclusão
O DHCPv6 é uma evolução do DHCPv4 com mais flexibilidade: oferece modos stateful (controle total, como DHCPv4), stateless (apenas configurações extras) e coexiste com SLAAC para autoconfiguração sem servidor. A escolha do modo depende das necessidades operacionais: redes simples ficam bem com SLAAC; redes corporativas tipicamente adotam stateless DHCPv6; ISPs e ambientes com auditoria rigorosa preferem stateful. Compreender as flags M/O/A no RA, o papel do DUID e a operação de prefix delegation é fundamental para qualquer engenheiro que esteja migrando redes para IPv6 — transição já em curso há mais de uma década e que agora se acelera com o esgotamento do IPv4 e o crescimento de redes móveis e IoT.