01 - O que é DHCP e Portas (67 e 68)
video: https://youtu.be/... no frontmatter da nota.O que é DHCP e Portas (67 e 68)
1. Definição do Protocolo DHCP
O DHCP (Dynamic Host Configuration Protocol) é o protocolo da camada de aplicação responsável por atribuir automaticamente endereços IP e parâmetros de configuração de rede a dispositivos em uma infraestrutura TCP/IP. Padronizado pela RFC 1534 (1993) e posteriormente refinado pela RFC 2131 (1997, versão atual) e RFC 2132 (opções e extensões), o DHCP elimina a necessidade de configuração manual (estática) de cada host, reduzindo drasticamente o custo operacional de redes de qualquer tamanho.
Objetivo Original
Antes do DHCP, administradores precisavam atribuir IPs manualmente em cada estação. Em uma universidade com 5.000 hosts, isso significava um pesadelo de planilhas, conflitos de IP duplicados e dificuldade de reconfigurar máquinas móveis (laptops). O DHCP surgiu para automatizar todo esse ciclo de "plug-and-play" de endereçamento IP.
Parâmetros Distribuídos pelo DHCP
| Parâmetro | Função |
|---|---|
| Endereço IP | Identidade L3 do host na rede |
| Máscara de sub-rede | Define o tamanho da sub-rede local |
| Default Gateway | Roteador para sair da sub-rede local |
| Servidores DNS | Resolvedores de nomes recursivos |
| Lease Time | Tempo de validade da atribuição |
| Servidores WINS/NBNS | Resolução de nomes NetBIOS (legado Windows) |
| MTU | Maximum Transmission Unit do enlace |
| Domínio DNS | Sufixo DNS padrão (ex: empresa.com) |
2. As Portas 67 e 68 — Por que Duas?
Diferente da maioria dos protocolos que usa uma única porta bem conhecida, o DHCP opera sobre UDP em duas portas distintas:
| Porta | Direção | Função |
|---|---|---|
| UDP 67 | Servidor (inbound) | Onde o servidor DHCP escuta requisições dos clientes |
| UDP 68 | Cliente (inbound) | Onde o cliente DHCP escuta respostas do servidor |
A Lógica da Separação
Essa arquitetura incomum tem uma razão técnica precisa: no momento em que o cliente inicia a negociação DHCP, ele ainda não possui endereço IP. Portanto, ele não pode enviar pacotes unicast válidos. O cliente precisa usar endereços especiais de bootstrap (0.0.0.0 como origem e 255.255.255.255 como destino em broadcast). Ter portas distintas permite que o servidor distinga claramente quem é quem na negociação, mesmo quando o IP ainda não foi atribuído.
Endereços Especiais Usados pelo DHCP
- 0.0.0.0 — Source IP usado pelo cliente quando ainda não tem IP ("este host").
- 255.255.255.255 — Destination broadcast limitado à sub-rede local (RFC 919).
- Endereço de rede da sub-rede — Usado em broadcast dirigido (ex:
192.168.1.255para/24).
3. O Processo DORA (Discover, Offer, Request, Ack)
A negociação DHCP clássica é chamada de DORA — quatro mensagens trocadas entre cliente e servidor:
Cliente Servidor DHCP
| |
|---- DHCPDISCOVER -----> | (broadcast UDP, sport=68, dport=67)
| |
|<--- DHCPOFFER -----------| (pode ser broadcast ou unicast)
| |
|---- DHCPREQUEST ------> | (broadcast - aceita oferta, avisa outros servidores)
| |
|<--- DHCPACK ------------| (confirmação final com lease)
| |
Detalhamento das Quatro Etapas
- DHCPDISCOVER — O cliente envia um broadcast UDP para a porta 67 procurando servidores disponíveis. Esse pacote carrega o MAC address do cliente (CHADDR — Client Hardware Address) como identificador único.
- DHCPOFFER — Cada servidor DHCP que ouve o discover responde com uma oferta de IP, máscara, lease time e demais parâmetros.
- DHCPREQUEST — O cliente escolhe uma das ofertas (geralmente a primeira recebida) e envia um broadcast confirmando a escolha. O broadcast é importante: ele informa aos servidores não escolhidos que seus IPs oferecidos podem voltar ao pool.
- DHCPACK — O servidor escolhido confirma definitivamente a atribuição e marca o IP como "em uso" em sua tabela interna de leases.
4. Estrutura Interna do Pacote DHCP
O DHCP é transportado sobre UDP, com payload máximo de 576 bytes em IPv4 (RFC 2131). O pacote herda o formato do BOOTP (RFC 951) e adiciona o campo Options com TLV (Type-Length-Value):
| Campo | Tamanho | Função |
|---|---|---|
| OP | 1 byte | Tipo de mensagem (1=BOOTREQUEST, 2=BOOTREPLY) |
| HTYPE | 1 byte | Tipo de hardware (1=Ethernet) |
| HLEN | 1 byte | Tamanho do endereço de hardware (6 para MAC) |
| HOPS | 1 byte | Contagem de saltos (usado por relay agents) |
| XID | 4 bytes | ID de transação (correlaciona discover/offer/request/ack) |
| SECS | 2 bytes | Segundos desde o início da negociação |
| FLAGS | 2 bytes | Bit 0 = broadcast flag (cliente pede resposta em broadcast) |
| CIADDR | 4 bytes | Client IP Address (preenchido se cliente já tem IP) |
| YIADDR | 4 bytes | "Your" IP Address (IP atribuído ao cliente) |
| SIADDR | 4 bytes | Server IP Address (próximo servidor, usado em PXE boot) |
| GIADDR | 4 bytes | Gateway IP Address (relay agent - DHCP cross-subnet) |
| CHADDR | 16 bytes | Client Hardware Address (MAC) |
| SNAME | 64 bytes | Server host name (opcional) |
| FILE | 128 bytes | Boot file name (PXE/TFTP) |
| OPTIONS | variável | Opções DHCP (TLV) - onde a mágica acontece |
Opções DHCP Mais Comuns
| Código | Nome | Função |
|---|---|---|
| 53 | DHCP Message Type | Discover=1, Offer=2, Request=3, Ack=5, Decline=4, Release=7 |
| 1 | Subnet Mask | Máscara de sub-rede |
| 3 | Router | Default gateway |
| 6 | Domain Name Server | Lista de DNS recursivos |
| 51 | IP Address Lease Time | Duração do lease em segundos |
| 54 | DHCP Server Identifier | IP do servidor DHCP escolhido |
| 82 | Relay Agent Information | Sub-opções inseridas por relays (circuito, remote ID) |
| 60 | Vendor Class Identifier | Identifica fornecedor (ex: "MSFT 5.0" para Windows) |
| 119 | Domain Search List | Lista de sufixos DNS para busca |
5. Renovação e Liberação do Lease
O lease DHCP não é permanente — ele segue um ciclo de vida baseado em temporizadores (timers):
| Estado | Timer Padrão | Ação do Cliente |
|---|---|---|
| T1 (Renew) | 50% do lease | Cliente envia DHCPREQUEST unicast ao servidor original pedindo renovação |
| T2 (Rebind) | 87,5% do lease | Se T1 falhou, cliente envia DHCPREQUEST broadcast para qualquer servidor |
| Expiração | 100% do lease | Cliente libera IP e volta ao estado INIT (DISCOVER) |
Liberação Manual: DHCPRELEASE
Um cliente pode liberar o IP antes da expiração usando o comando DHCPRELEASE. Em Linux, isso é feito via:
# Liberar o lease atual
sudo dhclient -r eth0
# Solicitar novo lease
sudo dhclient eth0
Em Windows, o equivalente é:
ipconfig /release
ipconfig /renew
6. DHCP Relay Agent — Inter-VLAN Operation
Como broadcasts não atravessam roteadores, o DHCP nativamente só funcionaria dentro de uma única sub-rede/VLAN. Para permitir que um único servidor DHCP atenda múltiplas VLANs, usa-se o DHCP Relay Agent (RFC 1542):
- O roteador intercepta o broadcast DHCPDISCOVER na porta 67.
- Ele encapsula o pacote em unicast para o servidor DHCP centralizado, preenchendo o campo GIADDR com o IP da interface onde o broadcast foi recebido.
- O servidor usa o GIADDR para selecionar o pool correto de IPs para aquela sub-rede.
Em roteadores Cisco, a configuração típica é ip helper-address 10.0.0.5 sob cada interface VLAN. Em Linux, o isc-dhcp-relay faz a mesma função.
7. Perspectiva de Segurança: Ataques ao DHCP
Rogue DHCP Server
Um atacante liga um servidor DHCP falso na rede, que responde mais rapidamente que o servidor legítimo, distribuindo gateway falso (para capturar tráfego) e DNS falso (para redirecionar vítimas a clones de sites bancários). Mitigação: DHCP Snooping em switches gerenciados — apenas portas confiáveis (trusted) podem enviar respostas DHCP.
DHCP Starvation (DoS)
Um atacante envia milhares de DHCPDISCOVER com MACs forjados, esgotando o pool de IPs do servidor em segundos. Mitigação: Port security limitando MACs por porta; rate-limiting de broadcasts.
Ataque via Opção 82 Manipulada
Relays comprometidos podem injetar sub-opções maliciosas em Opção 82, explorando parsers vulneráveis em servidores legados.
8. Diagnóstico e Auditoria
Captura de Tráfego DHCP
# Capturar todo tráfego DHCP em uma interface
sudo tcpdump -i eth0 -n port 67 or port 68 -vv
# Ver leases ativos em um servidor ISC DHCP
cat /var/lib/dhcp/dhcpd.leases
# Ver IP obtido por DHCP no Linux
ip addr show eth0
cat /var/lib/dhcp/dhclient.leases
Logs Típicos de Servidor DHCP
Apr 14 10:23:45 dhcp01 dhcpd[1234]: DHCPDISCOVER from 00:1a:2b:3c:4d:5e via eth0
Apr 14 10:23:45 dhcp01 dhcpd[1234]: DHCPOFFER on 192.168.1.42 to 00:1a:2b:3c:4d:5e via eth0
Apr 14 10:23:45 dhcp01 dhcpd[1234]: DHCPREQUEST for 192.168.1.42 from 00:1a:2b:3c:4d:5e via eth0
Apr 14 10:23:45 dhcp01 dhcpd[1234]: DHCPACK on 192.168.1.42 to 00:1a:2b:3c:4d:5e via eth0
9. Resumo Técnico
| Atributo | Valor |
|---|---|
| RFC principal | RFC 2131 (DHCPv4) |
| Camada OSI | Aplicação (7) |
| Transporte | UDP |
| Porta servidor | 67 |
| Porta cliente | 68 |
| Funcionamento base | Broadcast inicial, unicast na confirmação |
| Mecanismo de estado | Lease temporário (renovação T1/T2) |
| Cross-subnet | DHCP Relay Agent (ip helper-address) |
| Segurança típica | DHCP Snooping, port security |
10. Conclusão
O DHCP é a peça que tornou viável operar redes de grande escala sem intervenção manual em cada host. Suas portas 67/68 (servidor/cliente) refletem a natureza assimétrica do protocolo, onde o cliente inicia sem IP válido e depende de broadcasts bootstrap. Compreender o ciclo DORA, a estrutura de opções TLV e os mecanismos de relay é essencial para qualquer administrador de redes ou analista de segurança, já que o DHCP é um dos primeiros vetores de ataque em redes internas corporativas.