DHCP su Linux: Guida ISC DHCP e Kea Server

DHCP su Linux: Guida ISC DHCP e Kea Server

Introduzione al DHCP Server su Linux

DHCP su Linux: Guida ISC DHCP e Kea Server. Il protocollo DHCP (Dynamic Host Configuration Protocol) è uno dei pilastri fondamentali dell’infrastruttura di rete moderna. Permette l’assegnazione automatica di indirizzi IP, gateway, DNS e altri parametri di rete ai client che si connettono a una rete. Su sistemi Linux, le due soluzioni più diffuse per implementare un server DHCP sono ISC DHCP (storico e ampiamente adottato) e Kea (il suo successore moderno sviluppato da ISC).

ISC DHCP, noto anche come dhcpd, è stato per decenni lo standard de facto. Tuttavia, dal 2022 ISC ha dichiarato la fine del supporto attivo per ISC DHCP, spingendo la comunità verso Kea DHCP, una piattaforma più flessibile, modulare e dotata di API REST. In questo articolo analizzeremo entrambe le soluzioni, fornendo istruzioni dettagliate per l’installazione, la configurazione e il troubleshooting.

Prerequisiti

Prima di procedere, assicurati di disporre di:

  • Un sistema Linux (SysLinuxOS 13, Ubuntu 22.04 LTS o Debian 13 consigliati)
  • Accesso root o privilegi sudo
  • Almeno un’interfaccia di rete con IP statico configurato
  • Conoscenza base del networking TCP/IP (subnet, gateway, CIDR)
  • Connessione Internet per il download dei pacchetti

Verifica l’interfaccia di rete disponibile con il comando:

ip addr show
ip link show

Supponiamo che l’interfaccia server sia eth0 con IP statico 192.168.1.1/24.

Parte 1: ISC DHCP Server

Installazione di ISC DHCP

Su sistemi Debian/Ubuntu, installa il pacchetto con:

sudo apt update
sudo apt install isc-dhcp-server -y

Su sistemi RHEL/CentOS/Rocky Linux:

sudo dnf install dhcp-server -y

Configurazione dell’interfaccia

Specifica su quale interfaccia il server DHCP deve essere in ascolto modificando il file /etc/default/isc-dhcp-server:

# Debian/Ubuntu
INTERFACESv4="eth0"
INTERFACESv6=""

Configurazione del file dhcpd.conf

Il file principale di configurazione è /etc/dhcp/dhcpd.conf. Effettua un backup prima di modificarlo:

sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.backup

Ecco un esempio di configurazione completo per una rete 192.168.1.0/24:

# Parametri globali
default-lease-time 86400;
max-lease-time 172800;
authoritative;
log-facility local7;

# Subnet declaration
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.100 192.168.1.200;
  option routers 192.168.1.1;
  option subnet-mask 255.255.255.0;
  option domain-name-servers 8.8.8.8, 8.8.4.4;
  option domain-name "homelab.local";
  option broadcast-address 192.168.1.255;
}

# Host con IP statico (prenotazione)
host server-web {
  hardware ethernet AA:BB:CC:DD:EE:FF;
  fixed-address 192.168.1.50;
  option host-name "server-web";
}

Avvio e gestione del servizio

Abilita e avvia il servizio con systemd:

sudo systemctl enable isc-dhcp-server 
sudo systemctl start isc-dhcp-server 
sudo systemctl status isc-dhcp-server

Per verificare la sintassi della configurazione senza riavviare:

sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf

Visualizzare i lease attivi

I lease assegnati sono registrati nel file /var/lib/dhcp/dhcpd.leases:

cat /var/lib/dhcp/dhcpd.leases
# Output di esempio:
lease 192.168.1.101 {
  starts 2 2024/01/16 10:00:00;
  ends 3 2024/01/17 10:00:00;
  hardware ethernet 00:11:22:33:44:55;
  client-hostname "laptop-mario";
}

Parte 2: Kea DHCP Server

Perché scegliere Kea?

Kea rappresenta l’evoluzione moderna del DHCP su Linux. I vantaggi principali includono:

  • API REST per la gestione remota e l’automazione
  • Supporto nativo per DHCPv4 e DHCPv6 come daemon separati
  • Backend di storage multipli: memfile, MySQL, PostgreSQL, Cassandra
  • Hook library per estensibilità avanzata
  • Alta disponibilità (HA) nativa
  • Configurazione in formato JSON

Installazione di Kea

Su Ubuntu 22.04, Kea è disponibile nei repository ufficiali:

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

Per installare da repository ISC (versione più aggiornata):

curl -1sLf 'https://dl.cloudsmith.io/public/isc/kea-2-4/setup.deb.sh' | sudo bash
sudo apt install isc-kea-dhcp4-server isc-kea-ctrl-agent -y

Configurazione di Kea DHCPv4

Il file di configurazione principale è /etc/kea/kea-dhcp4.conf in formato JSON. Ecco una configurazione equivalente all’esempio ISC DHCP precedente:

{
  "Dhcp4": {
    "interfaces-config": {
      "interfaces": ["eth0"]
    },
    "lease-database": {
      "type": "memfile",
      "lfc-interval": 3600
    },
    "valid-lifetime": 86400,
    "max-valid-lifetime": 172800,
    "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": "8.8.8.8, 8.8.4.4"
          },
          {
            "name": "domain-name",
            "data": "homelab.local"
          }
        ],
        "reservations": [
          {
            "hw-address": "aa:bb:cc:dd:ee:ff",
            "ip-address": "192.168.1.50",
            "hostname": "server-web"
          }
        ]
      }
    ],
    "loggers": [
      {
        "name": "kea-dhcp4",
        "output_options": [
          { "output": "/var/log/kea/kea-dhcp4.log" }
        ],
        "severity": "INFO"
      }
    ]
  }
}

Validazione e avvio di Kea

Verifica la configurazione prima di avviare il servizio:

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

Avvia il servizio:

sudo systemctl enable kea-dhcp4-server
sudo systemctl start kea-dhcp4-server
sudo systemctl status kea-dhcp4-server

Utilizzo dell’API REST di Kea

Una delle funzionalità più potenti di Kea è la sua Control Agent API. Dopo aver configurato /etc/kea/kea-ctrl-agent.conf, puoi interrogare il server via HTTP:

# Recuperare le statistiche del server
curl -s -X POST http://localhost:8000/ 
  -H 'Content-Type: application/json' 
  -d '{"command": "statistic-get-all", "service": ["dhcp4"]}'

# Elencare tutti i lease attivi
curl -s -X POST http://localhost:8000/ 
  -H 'Content-Type: application/json' 
  -d '{"command": "lease4-get-all", "service": ["dhcp4"], "arguments": {"subnets": [1]}}'

Configurazione Avanzata: DHCP con VLAN Multiple

In ambienti enterprise è comune gestire pool DHCP per VLAN diverse. Con Kea, aggiungi semplicemente più subnet nella configurazione:

"subnet4": [
  {
    "id": 1,
    "subnet": "192.168.10.0/24",
    "interface": "eth0.10",
    "pools": [{"pool": "192.168.10.50 - 192.168.10.254"}],
    "option-data": [{"name": "routers", "data": "192.168.10.1"}]
  },
  {
    "id": 2,
    "subnet": "192.168.20.0/24",
    "interface": "eth0.20",
    "pools": [{"pool": "192.168.20.50 - 192.168.20.254"}],
    "option-data": [{"name": "routers", "data": "192.168.20.1"}]
  }
]

Troubleshooting

Problemi comuni con ISC DHCP

  • Il servizio non si avvia: Controlla i log con journalctl -u isc-dhcp-server -n 50 e verifica che l’interfaccia specificata esista.
  • “No subnet declaration for interface”: L’IP statico dell’interfaccia deve rientrare in una subnet dichiarata nel file dhcpd.conf.
  • Lease non assegnati: Verifica che il firewall non blocchi le porte UDP 67 (server) e 68 (client): sudo ufw allow 67/udp.
  • Conflitti di IP: Controlla il file dei lease e rimuovi entry obsolete: sudo systemctl stop isc-dhcp-server && sudo truncate -s 0 /var/lib/dhcp/dhcpd.leases.

Problemi comuni con Kea

  • Errore di parsing JSON: Usa python3 -m json.tool /etc/kea/kea-dhcp4.conf per validare la sintassi JSON prima di avviare il servizio.
  • L’API REST non risponde: Verifica che kea-ctrl-agent sia in esecuzione e che la porta 8000 non sia filtrata.
  • Database di lease corrotto: Con backend memfile, il file si trova in /var/lib/kea/kea-leases4.csv. Puoi eseguire un LFC manuale.
  • Permessi insufficienti: Assicurati che l’utente _kea abbia accesso in scrittura alla directory /var/lib/kea/.

Comandi di diagnostica utili

# Monitorare i log in tempo reale
sudo journalctl -u kea-dhcp4-server -f

# Verificare le porte in ascolto
sudo ss -ulnp | grep 67

# Testare la risposta DHCP con dhcping
sudo apt install dhcping
sudo dhcping -s 192.168.1.1 -r -v

# Catturare traffico DHCP con tcpdump
sudo tcpdump -i eth0 -n port 67 or port 68

Conclusione

Sia ISC DHCP che Kea sono soluzioni robuste per gestire l’assegnazione dinamica degli indirizzi IP su Linux. ISC DHCP rimane un’opzione valida per ambienti legacy o semplici, grazie alla sua configurazione diretta e alla vasta documentazione disponibile. Tuttavia, per nuove implementazioni è fortemente consigliato adottare Kea DHCP, che offre un’architettura moderna, supporto per la gestione via API, alta disponibilità e integrazione con database relazionali.

La scelta tra i due dipende dalle esigenze specifiche: se stai costruendo un’infrastruttura scalabile, automatizzata e pronta per il futuro, Kea è la scelta corretta. Se hai bisogno di manutenere un sistema esistente basato su ISC DHCP, la migrazione a Kea è comunque raccomandata nel medio termine, seguendo la roadmap ufficiale di ISC.

DHCP su Linux: Guida ISC DHCP e Kea Server

 

enjoy 😉