Utiliser Debian et dérivées

Debian : Installer et configurer le serveur DHCP avec kea

Table des matières

dhcp_logo



Introduction



Dynamic Host Configuration Protocol (DHCP) est un protocole réseau dont le rôle est d’assurer la configuration automatique des paramètres IP d’une station, notamment en lui affectant automatiquement sa configuration IP.

DHCP peut aussi configurer l’adresse de la passerelle par défaut ainsi que des serveurs de noms DNS par exemple.

Le serveur DHCP historique ISC DHCP server n'est plus maintenu depuis 2022.
Dans cet article, nous allons voir comment configurer ce service avec kea, son remplaçant.


L'ensemble des actions est à effectuer en tant que root.

Installation de DHCP



On va installer le service :
Code BASH :
apt install kea


Le service est démarré automatiquement sur Debian.
Vu qu'il n'est pas configuré, on va le stopper :
Code BASH :
systemctl stop kea-dhcp4-server.service


Si on n'utilise pas l'IPv6 dans notre réseau, on peut désactiver le service en question :
Code BASH :
systemctl disable --now kea-dhcp6-server.service


Configuration du serveur DHCP



Le fichier de configuration du DHCP en IPv4 est /etc/kea/kea-dhcp4.conf.

On renomme le fichier original :
Code BASH :
mv /etc/kea/kea-dhcp4.conf /etc/kea/kea-dhcp4.conf.ori


On va créer le nôtre :
Code BASH :
vim /etc/kea/kea-dhcp4.conf


Ci-dessous, un exemple de fichier de configuration. C'est une syntaxe en JSON.
Il est commenté, ça devrait suffire pour le comprendre.

Code TEXT :
{
"Dhcp4": {
    // Interface d'écoute
    "interfaces-config": {
        "interfaces": [ "ens18" ]
    },
    //"control-socket": {
    //    "socket-type": "unix",
    //    "socket-name": "/tmp/kea4-ctrl-socket"
    //},
    // /var/lib/kea/kea-leases4.csv
    // facultatif, car fichier par défaurt
    "lease-database": {
        "type": "memfile",
        "lfc-interval": 3600
    },
    // Bail
    //"expired-leases-processing": {
    //    "reclaim-timer-wait-time": 10,
    //    "flush-reclaimed-timer-wait-time": 25,
    //    "hold-reclaimed-time": 3600,
    //    "max-reclaim-leases": 100,
    //    "max-reclaim-time": 250,
    //    "unwarned-reclaim-cycles": 5
    //},
    //"renew-timer": 900,
    //"rebind-timer": 1800,
    "valid-lifetime": 86400,
    // Options Server
    "option-data": [
        {
            "name": "domain-name-servers",
            "data": "192.168.221.2, 192.168.221.3"
        },
        {
            "code": 15,
            "data": "linuxtrickstest.lan"
        }
    ],
    // Définition
    "subnet4": [
        {
            "id": 1,
            "subnet": "192.168.221.0/24",
            "pools": [ { "pool": "192.168.221.150 - 192.168.221.200" } ],
            "option-data": [
                {
                    "name": "routers",
                    "data": "192.168.221.254"
                }
            ],
            "reservations": [
        // Exemple de réservation
                {
                    "hw-address": "BC:24:11:A6:96:5C",
                    "ip-address": "192.168.221.11"
                },
        // Exemple de refus
                {
                    "hw-address": "BC:24:11:A6:96:5B",
                    "client-classes": [ "DROP" ]
                }
            ]
        }
    ],
    // Des logs
    "loggers": [
    {
        "name": "kea-dhcp4",
        "output_options": [
            {
                "output": "/var/log/kea/kea-dhcp4.log"
            }
        ],
        "severity": "INFO",
        "debuglevel": 0
    }
  ]
}
}


Il est possible de vérifier la syntaxe du fichier via :
Code BASH :
sudo -u _kea kea-dhcp4 -t /etc/kea/kea-dhcp4.conf


On démarre ensuite le serveur DHCP :
Code BASH :
systemctl restart kea-dhcp4-server.service


Voir les logs



On peut consulter le fichier de log précédemment défini :
Code BASH :
cat /var/log/kea/kea-dhcp4.log


On peut repérer le "DORA" DHCP (DISCOVER, OFFER, REQUEST, ACK) :
Code TEXT :
2025-07-16 21:21:02.312 INFO  [kea-dhcp4.dhcp4/1580.140629476951744] DHCP4_QUERY_LABEL received query: [hwtype=1 bc:24:11:1b:cc:fb], cid=[01:bc:24:11:1b:cc:fb], tid=0x154c2b9
2025-07-16 21:21:02.312 INFO  [kea-dhcp4.packets/1580.140629476951744] DHCP4_PACKET_RECEIVED [hwtype=1 bc:24:11:1b:cc:fb], cid=[01:bc:24:11:1b:cc:fb], tid=0x154c2b9: DHCPDISCOVER (type 1) received from 0.0.0.0 to 255.255.255.255 on interface ens18
2025-07-16 21:21:02.312 INFO  [kea-dhcp4.leases/1580.140629476951744] DHCP4_LEASE_OFFER [hwtype=1 bc:24:11:1b:cc:fb], cid=[01:bc:24:11:1b:cc:fb], tid=0x154c2b9: lease 192.168.221.150 will be offered
2025-07-16 21:21:02.312 INFO  [kea-dhcp4.packets/1580.140629476951744] DHCP4_PACKET_SEND [hwtype=1 bc:24:11:1b:cc:fb], cid=[01:bc:24:11:1b:cc:fb], tid=0x154c2b9: trying to send packet DHCPOFFER (type 2) from 192.168.221.2:67 to 192.168.221.150:68 on interface ens18
2025-07-16 21:21:02.313 INFO  [kea-dhcp4.dhcp4/1580.140629468559040] DHCP4_QUERY_LABEL received query: [hwtype=1 bc:24:11:1b:cc:fb], cid=[01:bc:24:11:1b:cc:fb], tid=0x154c2b9
2025-07-16 21:21:02.313 INFO  [kea-dhcp4.packets/1580.140629468559040] DHCP4_PACKET_RECEIVED [hwtype=1 bc:24:11:1b:cc:fb], cid=[01:bc:24:11:1b:cc:fb], tid=0x154c2b9: DHCPREQUEST (type 3) received from 0.0.0.0 to 255.255.255.255 on interface ens18
2025-07-16 21:21:02.314 INFO  [kea-dhcp4.leases/1580.140629468559040] DHCP4_LEASE_ALLOC [hwtype=1 bc:24:11:1b:cc:fb], cid=[01:bc:24:11:1b:cc:fb], tid=0x154c2b9: lease 192.168.221.150 has been allocated for 86400 seconds
2025-07-16 21:21:02.314 INFO  [kea-dhcp4.packets/1580.140629468559040] DHCP4_PACKET_SEND [hwtype=1 bc:24:11:1b:cc:fb], cid=[01:bc:24:11:1b:cc:fb], tid=0x154c2b9: trying to send packet DHCPACK (type 5) from 192.168.221.2:67 to 192.168.221.150:68 on interface ens18


Voir les IP attribuées



Bien que kea puisse stocker dans une base de données les adresses IP affectées, on n'a rien configuré donc les infos sont stockées dans un simple fichier CSV : /var/lib/kea/kea-leases4.csv

Voici ce qu'il contient dans mon exemple :
Code TEXT :
address,hwaddr,client_id,valid_lifetime,expire,subnet_id,fqdn_fwd,fqdn_rev,hostname,state,user_context,pool_id
192.168.221.150,bc:24:11:1b:cc:fb,01:bc:24:11:1b:cc:fb,86400,1752780062,1,0,0,client1,0,,
Cette page a été vue 207 fois