Salta el contingut

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:

sudo apt update
sudo apt install -y kea-dhcp4-server kea-common kea-ctrl-agent kea-admin

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 (backend memfile per 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):

kea-dhcp4 -t /etc/kea/kea-dhcp4.conf

Veure el log del servei:

sudo journalctl -u isc-kea-dhcp4-server -f

Consulta de concessions actives (backend memfile):

cat /var/lib/kea/kea-leases4.csv

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:

kea-dhcp4 -t /etc/kea/kea-dhcp4.conf && sudo systemctl restart isc-kea-dhcp4-server

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.