04 - DHCP Relay
video: https://youtu.be/... no frontmatter da nota.DHCP Relay (RFC 1542 / 2131)
1. Definição e Motivação
O DHCP é inerentemente baseado em broadcast: o cliente envia DISCOVER para 255.255.255.255 porque ainda não tem IP e não sabe quem é o servidor DHCP. Esse broadcast é limitado ao domínio de broadcast L2 — não atravessa roteadores. Em uma rede corporativa com 50 VLANs, isso exigiria um servidor DHCP em cada VLAN, multiplicando manutenção e custos.
A solução é o DHCP Relay Agent (RFC 1542, depois absorvido pelo RFC 2131). Um relay agent é um roteador ou switch L3 que intercepta broadcasts DHCP vindos de clientes e os encaminha via unicast para um servidor DHCP remoto (potencialmente em outra VLAN, outro site, ou na cloud). O servidor responde ao relay, que repassa ao cliente.
Cliente (VLAN 10) Relay (Switch/Roteador) Servidor DHCP (VLAN 99)
| | |
|-- DISCOVER (broadcast) -------------->| |
| |-- DISCOVER (unicast, giaddr=10) --> |
| |<-- OFFER (unicast) --------------- |
|<-- OFFER (broadcast) ------------------| |
| | |
|-- REQUEST (broadcast) --------------->| |
| |-- REQUEST (unicast, giaddr=10) --> |
| |<-- ACK (unicast) ----------------- |
|<-- ACK (broadcast) --------------------| |
2. Como Funciona: O Campo giaddr
O segredo do relay é o campo giaddr (Gateway IP Address) no cabeçalho DHCP. Esse campo é preenchido pelo relay agent com o IP da interface pela qual o broadcast do cliente chegou.
Quando o servidor DHCP recebe um pacote com giaddr != 0.0.0.0, ele sabe que:
- A mensagem veio de um relay, não diretamente do cliente.
- Deve escolher um IP da subnet correspondente ao
giaddr(não da subnet do relay). - A resposta deve ser enviada de volta ao relay (no IP do
giaddr), não ao cliente.
Esse mecanismo permite que um único servidor DHCP atenda milhares de subnets diferentes, desde que cada subnet tenha um relay configurado para apontar para ele.
Exemplo Prático
VLAN 10: subnet 192.168.10.0/24, relay IP 192.168.10.1. VLAN 20: subnet 192.168.20.0/24, relay IP 192.168.20.1. Servidor DHCP central: 10.0.0.5.
Cliente em VLAN 10 envia DISCOVER broadcast. O relay da VLAN 10 captura e monta pacote unicast com IP origem 192.168.10.1 (relay), IP destino 10.0.0.5 (servidor DHCP), giaddr 192.168.10.1 (informa ao servidor qual subnet pedir), e hops incrementado de 0 para 1.
O servidor consulta sua tabela de subnets, encontra 192.168.10.0/24, oferece IP 192.168.10.100. Responde ao relay em 192.168.10.1:67. O relay repassa para o cliente (broadcast ou unicast conforme flag).
3. Configuração por Plataforma
Cisco IOS
interface Vlan10
ip address 192.168.10.1 255.255.255.0
ip helper-address 10.0.0.5
ip helper-address 10.0.0.6 ! segundo servidor DHCP para redundância
!
interface Vlan20
ip address 192.168.20.1 255.255.255.0
ip helper-address 10.0.0.5
A opção ip helper-address no Cisco também reenvia outros broadcasts por padrão (TFTP, DNS, NetBIOS, TACACS). Para restringir apenas a DHCP:
interface Vlan10
ip helper-address 10.0.0.5
no ip forward-protocol udp 37 ! Time
no ip forward-protocol udp 49 ! TACACS
no ip forward-protocol udp 137 ! NetBIOS Name
no ip forward-protocol udp 138 ! NetBIOS Datagram
no ip forward-protocol udp 161 ! SNMP
Linux (isc-dhcp-relay)
# Instalar
apt install isc-dhcp-relay
# Configuração em /etc/default/isc-dhcp-relay
SERVERS="10.0.0.5 10.0.0.6"
INTERFACES="eth0 eth1"
OPTIONS=""
Inicia o daemon dhcrelay que escuta em interfaces especificadas e encaminha para os servidores listados.
Mikrotik RouterOS
/ip dhcp-relay
add name=relay-vlan10 interface=vlan10 dhcp-server=10.0.0.5 local-address=192.168.10.1 disabled=no
Em Juniper JunOS, configura-se via forwarding-options helpers bootp server 10.0.0.5 sob a interface vlan.10.
4. Opção 82 (Relay Agent Information)
A opção 82 (Relay Agent Information, RFC 3046) é uma extensão que permite ao relay incluir informações sobre a origem da solicitação. O relay adiciona a opção 82 antes de encaminhar para o servidor, e o servidor pode usar essas informações para: atribuir IP específico por porta de switch (em vez de por subnet), logar onde cada IP foi entregue, aplicar políticas diferentes (classes DHCP), e identificar o assinante em ISPs.
Sub-opções da Opção 82
| Código | Nome | Conteúdo |
|---|---|---|
| 1 | Agent Circuit ID | Identifica a porta física do switch (ex: "Eth1/0/5") |
| 2 | Agent Remote ID | Identifica o switch (MAC, hostname, ou ID configurado) |
Exemplo Cisco
interface Vlan10
ip helper-address 10.0.0.5
ip dhcp relay information trusted
!
ip dhcp relay information option
ip dhcp relay information policy replace
Em switches de acesso (Catalyst):
ip dhcp snooping
ip dhcp snooping vlan 10
!
interface GigabitEthernet1/0/5
switchport mode access
switchport access vlan 10
ip dhcp snooping trust
Servidor DHCP Lendo Opção 82 (ISC DHCPd)
class "vlan10-port5" {
match if option agent.circuit-id = "Eth1/0/5";
}
subnet 192.168.10.0 netmask 255.255.255.0 {
pool {
allow members of "vlan10-port5";
range 192.168.10.50 192.168.10.60;
}
pool {
deny members of "vlan10-port5";
range 192.168.10.100 192.168.10.200;
}
}
5. DHCP Snooping: Segurança com Relay
Em redes corporativas, um atacante pode ligar um servidor DHCP falso (rogue DHCP server) em uma porta de acesso e derrubar a rede atribuindo IPs inválidos. DHCP Snooping (feature de switches gerenciáveis) resolve isso: portas marcadas como trusted podem enviar respostas DHCP (servidores DHCP, uplinks); portas marcadas como untrusted (portas de acesso) só podem enviar requests DHCP, com respostas bloqueadas. Adicionalmente, o switch aprende bindings MAC→IP→porta e bloqueia ARP spoofing (DAI - Dynamic ARP Inspection).
! Cisco Catalyst
ip dhcp snooping
ip dhcp snooping vlan 10,20,30
!
interface GigabitEthernet1/0/1 ! uplink
ip dhcp snooping trust
!
interface GigabitEthernet1/0/5 ! porta de acesso
! default: untrusted
Quando DHCP snooping está habilitado, o switch automaticamente adiciona a opção 82 nas mensagens DHCP que encaminha.
6. Cuidados com Relay Encadeado
Em redes complexas, pode haver múltiplos hops de relay (cliente → switch → roteador → servidor). Cada relay incrementa o campo hops. O campo é limitado a 16 (bootp max hops). Se exceder, a mensagem é descartada.
Relay Trust
Em Cisco, quando você habilita opção 82 em uma porta com relay, é preciso marcar a interface como trusted:
interface Vlan10
ip dhcp relay information trusted
Caso contrário, mensagens DHCP com opção 82 vindas de outro relay são descartadas por segurança (um relay não confia em opção 82 de relay desconhecido por padrão).
7. Diagnóstico e Troubleshooting
Verificar Configuração do Relay
# No Cisco
show ip interface Vlan10 | include Helper
show ip dhcp relay information
# Em Linux
ps aux | grep dhcrelay
ss -lun | grep 67 # deve estar ouvindo em 0.0.0.0:67
Captura em Ambos os Lados
# No cliente
sudo tcpdump -ni eth0 -vvv 'port 67 or port 68'
# No relay (capturando tráfego para o servidor)
sudo tcpdump -ni eth1 -vvv 'host 10.0.0.5 and (port 67 or port 68)'
# No servidor DHCP
sudo tcpdump -ni eth0 -vvv 'port 67 or port 68'
O campo giaddr deve aparecer nas mensagens capturadas no servidor.
Problemas Comuns
Cliente não recebe IP: verificar ip helper-address na interface VLAN, rota de retorno do servidor para a subnet do cliente, e ACL/firewall entre relay e servidor (liberar UDP 67 e 68 bidirecional). Servidor recebe DISCOVER mas não responde: verificar se a subnet correspondente ao giaddr está configurada no servidor e se há pool disponível. Relay encaminha, mas ACK não chega ao cliente: verificar se o relay está repassando respostas (não só requests), e se a opção 82 confiável entre múltiplos relays está configurada.
8. Quando NÃO Usar Relay
Em pequenas redes com uma única VLAN, o relay é desnecessário: o servidor DHCP pode estar diretamente na mesma subnet e responder broadcasts nativamente. Relay adiciona latência e pontos de falha — só vale a pena em redes multi-VLAN ou distribuídas. Em datacenters, é comum ter servidor DHCP local por rack/zone para reduzir dependência de infraestrutura de relay — o custo é a manutenção de múltiplos servidores.
9. Tabela Resumo
| Conceito | Detalhe |
|---|---|
| RFC | 1542 (depreciado), 2131 (incorpora) |
| Portas | UDP 67 (server) e 68 (client) |
| Campo chave | giaddr (gateway IP address) |
| Comando Cisco | ip helper-address X.X.X.X |
| Opção 82 | RFC 3046 — Circuit ID + Remote ID |
| Hops máximo | 16 |
| Múltiplos servidores | Configurar múltiplos helper-address |
9. Conclusão
O DHCP Relay é um dos componentes mais subestimados da infraestrutura de redes. Sem ele, qualquer rede com mais de uma VLAN precisaria de um servidor DHCP dedicado por segmento — cenário inviável em escala. Com relay agents, um único servidor (ou par em failover) atende toda a organização, com rastreabilidade via opção 82. Para engenheiros de redes corporativas, dominar a configuração de ip helper-address, entender o campo giaddr, habilitar DHCP snooping e saber diagnosticar com tcpdump são habilidades essenciais do dia a dia. A transição para DHCPv6 traz conceitos similares (relays IPv6), mas a essência permanece: o relay é a ponte entre o broadcast L2 do cliente e o servidor DHCP centralizado.