Configuració de DHCP en Linux amb Kea DHCP
Per què Kea i no ISC DHCP?
ISC va discontinuar el desenvolupament d'ISC DHCP Server l'octubre de 2022. Kea és el seu successor oficial (fet pel mateix fabricant, ISC), amb una arquitectura moderna: configuració en JSON, backends de base de dades (MySQL/PostgreSQL), API REST, multi-threading i alta disponibilitat nativa. Si comences un desplegament nou, aquesta és l'opció recomanada.
Instal·lació de Kea DHCP
En Ubuntu 23.04 o superior, els paquets ja són nadius:
En sistemes més antics o basats en RHEL/CentOS, cal el repositori oficial d'ISC (Cloudsmith):
# Afegir el repositori de Kea 3.0 LTS
curl -1sLf 'https://dl.cloudsmith.io/public/isc/kea-3-0/setup.rpm.sh' | sudo -E bash
# Instal·lació
sudo dnf install -y isc-kea-dhcp4-server isc-kea-ctrl-agent
Gestió del servei:
sudo systemctl enable isc-kea-dhcp4-server
sudo systemctl start isc-kea-dhcp4-server
sudo systemctl status isc-kea-dhcp4-server
Estructura de Fitxers de Configuració
/etc/kea/kea-dhcp4.conf: fitxer principal de configuració, en format JSON (a diferència del format de text pla d'ISC DHCP)/var/lib/kea/kea-leases4.csv: base de dades de concessions (backendmemfileper defecte, en CSV)/var/log/kea/kea-dhcp4.log: log del servei
Configuració Bàsica del Servidor
{
"Dhcp4": {
"interfaces-config": {
"interfaces": [ "eth0" ]
},
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
},
"valid-lifetime": 86400,
"renew-timer": 43200,
"rebind-timer": 75600,
"option-data": [
{ "name": "domain-name-servers", "data": "192.168.1.10, 8.8.8.8" },
{ "name": "domain-name", "data": "empresa.local" }
],
"subnet4": []
}
}
JSON, no text pla
A diferència de dhcpd.conf (ISC DHCP), la configuració de Kea és un document JSON complet: un clau o coma mal posada trenca tot el fitxer. Valida sempre la sintaxi abans de recarregar (vegeu "Eines de Diagnòstic" més avall).
Creació d'un Àmbit (Subnet)
{
"Dhcp4": {
"subnet4": [
{
"id": 1,
"subnet": "192.168.1.0/24",
"pools": [
{ "pool": "192.168.1.100 - 192.168.1.200" }
],
"option-data": [
{ "name": "routers", "data": "192.168.1.1" },
{ "name": "domain-name-servers", "data": "192.168.1.10, 8.8.8.8" }
]
}
]
}
}
Reserves d'Adreces (per MAC)
{
"reservations": [
{
"hw-address": "08:00:27:aa:bb:cc",
"ip-address": "192.168.1.20",
"hostname": "servidor-web"
}
]
}
Opcions Addicionals
{
"option-data": [
{ "name": "ntp-servers", "data": "192.168.1.10" },
{ "name": "netbios-name-servers", "data": "192.168.1.10" }
]
}
DHCP Relay amb Kea
A diferència d'ISC DHCP (que necessita el paquet separat isc-dhcp-relay), Kea gestiona el relay directament a la definició de la subnet, indicant l'adreça del relay que reenvia les peticions:
{
"subnet4": [
{
"id": 2,
"subnet": "192.168.2.0/24",
"relay": {
"ip-addresses": [ "192.168.1.1" ]
},
"pools": [
{ "pool": "192.168.2.100 - 192.168.2.200" }
]
}
]
}
Alta Disponibilitat (HA)
Kea incorpora un hook d'alta disponibilitat natiu (a diferència del failover peer d'ISC DHCP):
{
"Dhcp4": {
"hooks-libraries": [
{
"library": "/usr/lib/kea/hooks/libdhcp_ha.so",
"parameters": {
"high-availability": [
{
"this-server-name": "server1",
"mode": "hot-standby",
"peers": [
{
"name": "server2",
"url": "http://192.168.1.11:8000/",
"role": "standby"
}
]
}
]
}
}
]
}
}
Eines de Diagnòstic a Linux
Validació de sintaxi abans de recarregar (imprescindible amb JSON):
Veure el log del servei:
Consulta de concessions actives (backend memfile):
API REST via kea-ctrl-agent (si està configurat i escoltant al port 8000):
curl -X POST -H "Content-Type: application/json" \
-d '{"command": "lease4-get-all", "service": ["dhcp4"]}' \
http://127.0.0.1:8000/
Problemes Comuns i Solucions
Problema: el servei no arrenca després d'editar la configuració
Solució: gairebé sempre és un error de sintaxi JSON. Valida sempre abans de reiniciar:
Problema: cal migrar una configuració existent d'ISC DHCP
Solució: ISC ofereix el Kea Migration Assistant (KeaMA), una eina en línia que converteix dhcpd.conf a format JSON de Kea. Les configuracions senzilles es migren gairebé automàticament; les complexes (amb classes o scripts personalitzats) requereixen revisió manual.