Este documento detalha a configuração dos serviços de atribuição dinâmica de IPs na infraestrutura do laboratório. Para garantir suporte moderno e escalável a Dual-Stack (IPv4 e IPv6), utilizaremos o Kea DHCP (desenvolvido pelo ISC, mesmos criadores do BIND9) em conjunto com o daemon radvd para anúncios de roteador IPv6.
Nesta arquitetura, o Gateway atua como servidor DHCP exclusivamente para a rede dhcp-net (interface enp5s0).
O Kea é dividido em pacotes modulares. Precisamos instalar os servidores para IPv4 e IPv6, além do radvd.
# Atualiza os repositórios e instala os pacotes necessários
sudo apt update
sudo apt install kea-dhcp4-server kea-dhcp6-server radvd
Antes de iniciar as modificações, é uma boa prática de administração de sistemas fazer backup dos arquivos de configuração originais, que contêm exemplos úteis.
# Faz backup preservando as permissões e adicionando a data atual
sudo cp -a /etc/kea/kea-dhcp4.conf{,.dist-$(date +%Y%m%d)}
sudo cp -a /etc/kea/kea-dhcp6.conf{,.dist-$(date +%Y%m%d)}
O Kea utiliza arquivos de configuração em formato JSON. Isso permite uma estruturação hierárquica clara e validação rigorosa.
Crie ou edite o arquivo /etc/kea/kea-dhcp4.conf com o seguinte conteúdo:
{
"Dhcp4": {
// Define em quais interfaces o servidor DHCPv4 escutará requisições
"interfaces-config": {
"interfaces": ["enp5s0"]
},
// Configuração do banco de dados de leases (IPs alugados)
"lease-database": {
"type": "memfile", // Armazena em memória para performance
"lfc-interval": 3600, // Limpa leases expirados a cada 1 hora
"name": "/var/lib/kea/kea-leases4.csv" // Arquivo de persistência no disco
},
// Socket de controle para gerenciamento via kea-ctrl-agent (opcional, mas recomendado)
"control-socket": {
"socket-type": "unix",
"socket-name": "/run/kea/kea4-ctrl-socket"
},
// Temporizadores globais de aluguel de IP (em segundos)
"valid-lifetime": 28800, // Tempo total de validade do IP (8 horas)
"renew-timer": 14400, // Tempo até o cliente tentar renovar (4 horas)
"rebind-timer": 25200, // Tempo até o cliente tentar qualquer servidor DHCP (7 horas)
// Opções globais enviadas a todos os clientes
"option-data": [
{
"name": "domain-name-servers",
"data": "10.48.1.2" // IP do servidor DNS interno (ns1)
},
{
"name": "domain-search",
"data": "geanmartins.net" // Sufixo DNS padrão
}
],
// Definição das sub-redes e pools de IP
"subnet4": [
{
"id": 1,
"subnet": "10.48.7.0/24", // Bloco CIDR da rede dhcp-net
"interface": "enp5s0",
"pools": [
{
"pool": "10.48.7.50 - 10.48.7.250" // Range de IPs disponíveis para clientes
}
],
// Opções específicas desta sub-rede
"option-data": [
{
"name": "routers",
"data": "10.48.7.1" // IP do Gateway (Roteador padrão)
},
{
"name": "subnet-mask",
"data": "255.255.255.0" // Máscara de rede
},
{
"name": "broadcast-address",
"data": "10.48.7.255" // Endereço de broadcast
}
]
}
],
// Configuração de logs
"loggers": [
{
"name": "kea-dhcp4",
"output_options": [
{
"output": "/var/log/kea/kea-dhcp4.log",
"maxsize": 1048576, // Rotaciona o log ao atingir 1MB
"maxver": 8 // Mantém até 8 arquivos de log antigos
}
],
"severity": "INFO" // Nível de detalhamento do log
}
]
}
}
A configuração do IPv6 é muito semelhante à do IPv4, mas com particularidades do protocolo, como a ausência de opções de roteador e broadcast (que são tratados pelo radvd).
Crie ou edite o arquivo /etc/kea/kea-dhcp6.conf:
{
"Dhcp6": {
"interfaces-config": {
"interfaces": ["enp5s0"]
},
"lease-database": {
"type": "memfile",
"lfc-interval": 3600,
"name": "/var/lib/kea/kea-leases6.csv"
},
"control-socket": {
"socket-type": "unix",
"socket-name": "/run/kea/kea6-ctrl-socket"
},
// Temporizadores IPv6 (em segundos)
"valid-lifetime": 28800, // Validade total (8 horas)
"preferred-lifetime": 14400, // Tempo em que o IP é "preferido" (4 horas)
"renew-timer": 7200, // Tenta renovar em 2 horas
"rebind-timer": 21600, // Tenta rebind em 6 horas
"option-data": [
{
"name": "dns-servers",
"data": "fd00:0:b:1::2" // IPv6 do servidor DNS interno (ns1)
},
{
"name": "domain-search",
"data": "geanmartins.net"
}
],
"subnet6": [
{
"id": 1,
"subnet": "fd00:0:b:7::/64", // Prefixo IPv6 da rede dhcp-net
"interface": "enp5s0",
"pools": [
{
"pool": "fd00:0:b:7::100-fd00:0:b:7::ffff" // Range de IPs dinâmicos
}
],
"option-data": [
{
"name": "dns-servers",
"data": "fd00:0:b:1::2" // Sobrescrita explícita do DNS para esta sub-rede
}
]
}
],
"loggers": [
{
"name": "kea-dhcp6",
"output_options": [
{
"output": "/var/log/kea/kea-dhcp6.log",
"maxsize": 1048576,
"maxver": 8
}
],
"severity": "INFO"
}
]
}
}
Como os arquivos de configuração são JSON, qualquer vírgula fora do lugar impedirá a inicialização do serviço. O Kea possui uma ferramenta embutida para validar a sintaxe antes de aplicar.
# Valida a sintaxe do arquivo IPv4 (-t = test)
sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
# Valida a sintaxe do arquivo IPv6
sudo kea-dhcp6 -t /etc/kea/kea-dhcp6.conf
Se ambos os comandos retornarem sucesso (sem erros fatais), reinicie os serviços:
# Reinicia os daemons para aplicar as novas configurações
sudo systemctl restart kea-dhcp4-server
sudo systemctl restart kea-dhcp6-server
# Verifica se estão rodando corretamente (Active: active (running))
sudo systemctl status kea-dhcp4-server
sudo systemctl status kea-dhcp6-server
Diferente do IPv4, o DHCPv6 não fornece o endereço do gateway padrão (roteador). No IPv6, os roteadores anunciam sua presença na rede enviando pacotes ICMPv6 chamados Router Advertisements (RA).
Para que nossa rede IPv6 funcione corretamente e de forma centralizada, usaremos o daemon radvd para enviar RAs com as flags Managed (M) e Other (O) ativadas. Isso diz aos clientes: "Eu sou o roteador, mas não gere seu próprio IP (SLAAC). Vá perguntar ao servidor DHCPv6 para obter seu IP e DNS".
Crie ou edite o arquivo /etc/radvd.conf com o seguinte conteúdo:
# /etc/radvd.conf
# Configuração de Router Advertisement Daemon (radvd) para a rede dhcp-net
interface enp5s0 {
AdvSendAdvert on; # Habilita o envio de Router Advertisements
MinRtrAdvInterval 3; # Intervalo mínimo entre envios (segundos)
MaxRtrAdvInterval 10; # Intervalo máximo entre envios (segundos)
# Flag 'M' (Managed): Instruir os clientes a obterem IP via DHCPv6
AdvManagedFlag on;
# Flag 'O' (Other): Instruir os clientes a obterem outras informações (DNS, Domain) via DHCPv6
AdvOtherConfigFlag on;
prefix fd00:0:b:7::/64 {
AdvOnLink on; # Indica que este prefixo está na mesma rede física (L2)
# Desativar SLAAC (Stateless Address Autoconfiguration)
# Isso força os clientes a usarem o DHCPv6, permitindo controle centralizado de IPs
AdvAutonomous off;
AdvValidLifetime 2592000; # Tempo de validade do prefixo (30 dias)
AdvPreferredLifetime 604800; # Tempo de preferência do prefixo (7 dias)
};
# Tempo de vida do gateway padrão. Se o cliente não receber outro RA neste tempo,
# ele removerá o roteador da sua tabela de rotas (1800 segundos = 30 minutos).
AdvDefaultLifetime 1800;
};
Habilite o serviço para iniciar no boot e inicie-o imediatamente:
sudo systemctl enable --now radvd
# Verifique se está rodando sem erros
sudo systemctl status radvd
A partir deste momento, qualquer VM conectada à rede dhcp-net (via interface enp5s0 do Gateway) receberá automaticamente IPs IPv4 e IPv6, além das rotas e servidores DNS corretos, totalmente orquestrados pelo Gateway.