Mémento 7.2 - Kea DHCP Server
DHCP = Dynamic Host Configuration Protocol
Le DHCP sera activé sur la VM srvlan pour la zone LAN.
1 - Préambule
Il est aujourd'hui préconisé d'utiliser Kea DHCP à la place d'ISC DHCP qui n'est plus maintenu.
1.1 - Rôle du serveur DHCP
Il permet à un hôte qui se connecte sur un réseau local d'obtenir automatiquement sa configuration IP, ceci pour une durée déterminée appelée bail DHCP.
But, faciliter l'affectation des adresses IP sur un réseau.
Les hôtes enregistrés via un serveur DHCP peuvent aussi être ajoutés dynamiquement à un serveur DNS.
DHCP représente donc une suite logique au DNS dans la construction du réseau local virtuel.
1.2 - Fonctionnement du protocole DHCP
Le DHCP repose sur des requêtes UDP émises par les clients et traitées par le serveur.
Exemple d'un échange de requêtes client/serveur :
- DHCPDISCOVER - Le client cherche un serveur
- DHCPOFFER - le 1er trouvé soumet une IP
- DHCPREQUEST - Le client traite et valide l'IP
- DHCPACK - Le serveur confirme la configuration
Les requêtes UDP circulent sur les ports 67 et 68.
Le client au final reçoit une confirmation de son IP temporaire (bail) ainsi que souvent en complément l'IP de sa passerelle ainsi que les IP de ses serveurs DNS.
Nota : Si pas de serveur DHCP, le client s'attribue une adresse IP dans la plage 169.254.0.0/16.
Le serveur DHCP Kea utilisé ci-dessous est issu de l'organisme déjà créateur du serveur DNS BIND 9 soit l'Internet Software Consortium (ISC).
2 - Installation et configuration du service DHCP
2.1 - Installation du service Kea
Installez ce paquet pour gérer la zone LAN en IPv4 :
[srvlan@srvlan] sudo apt install kea-dhcp4-serverLes dépendances suivantes ont été ajoutées :
- kea-common
- liblog4cplus
Vérifiez le statut du service :
[srvlan@srvlan] sudo systemctl status kea-dhcp4-serverRetour normal :
● kea-dhcp4-server.service - Kea IPv4 DHCP daemon
Loaded: loaded (/usr/lib/systemd/system/kea-dhcp4-server.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-02-09 11:36:50 CET; 3min 8s ago
Invocation: c6e1f34b0a834861a66759ee518542ab
Docs: man:kea-dhcp4(8)
Main PID: 2468 (kea-dhcp4)
Tasks: 7 (limit: 1675)
Memory: 3.7M (peak: 4M)
CPU: 82ms
CGroup: /system.slice/kea-dhcp4-server.service
└─2468 /usr/sbin/kea-dhcp4 -c /etc/kea/kea-dhcp4.conf
févr. ... kea-dhcp4[2468]: INFO COMMAND_ACCEPTOR_START Starting to accept connections via unix domain ...
...
...
févr. ... kea-dhcp4[2468]: INFO DHCP4_STARTED Kea DHCPv4 server version 2.6.3 startedLe service est démarré et activé par défaut (enabled).
2.2 - Configuration
Le fichier de configuration kea-dhcp4.conf se trouve dans le dossier /etc/kea/.
Sauvegardez celui-ci en le renommant ainsi :
[srvlant@srvlan] sudo mv /etc/kea/kea-dhcp4.conf /etc/kea/kea-dhcp4.conf_saveCréez ensuite un nouveau fichier kea-dhcp4.conf :
[srvlant@srvlan] sudo nano /etc/kea/kea-dhcp4.confet entrez ce qui suit en respectant le format JSON :
// Serveur DHCP Kea
// Configuration de base IPv4
{
"Dhcp4": {
// Interface réseau enp0s8 en écoute DHCP.
"interfaces-config": {
"interfaces": ["enp0s8"]
},
// Serveur en autorité DHCP pour la zone LAN.
"authoritative": true,
// Pas de MAJ dynamique du serveur DNS Bind9.
"ddns-send-updates" : false,
// Position du fichier contenant les baux DHCP.
"lease-database": {
"type": "memfile",
"persist": true,
"name": "/var/lib/kea/kea-leases4.csv",
"lfc-interval": 3600
},
// Bail (renew=50%,rebind=87.5%,valid=100%=8H).
"renew-timer": 14400,
"rebind-timer": 27720,
"valid-lifetime": 28800,
"option-data": [
// Serveur DNS proposé aux clients DHCP.
{
"name": "domain-name-servers",
"data": "192.168.3.1"
},
// Domaine proposé aux clients pour
// résoudre les noms d'hôtes via le DNS.
{
"name": "domain-search",
"data": "intra.loupipfire.fr"
}
],
// Plage d'adresses IP pour la zone LAN.
"subnet4": [
{
"id":1,
"subnet": "192.168.3.0/24",
"pools": [ { "pool": "192.168.3.30 - 192.168.3.50" } ],
"option-data": [
{
"name": "routers",
"data": "192.168.3.1"
}
],
// IP et noms d'hôtes réservés.
"reservations": [
{
"hw-address": "e2:f0:31:2a:b6:05",
"ip-address": "192.168.3.20",
"hostname": "ctn1"
}
]
}
]
}
}Nota : La ligne "id":1, est à priori inutile sous Debian 12.
Remarques :
- La carte enp0s8, située côté LAN, sera surveillée par le serveur DHCP.
- A 50% de la durée du bail, la séquence de prolongation/renouvellement de celui-ci débutera.
- L'IP fixe réservée pour ctn1 se situe en dehors de la plage des IP dédiée aux autres clients.
- Attention, l'adresse MAC de ctn1 actuellement dynamique devra être déclarée fixe ci-dessous.
Redémarrez le service DHCP et vérifiez son statut :
[srvlan@srvlan] sudo systemctl restart kea-dhcp4-server
[srvlan@srvlan] sudo systemctl status kea-dhcp4-server Retour du statut sous Debian 13 :
● kea-dhcp4-server.service - Kea IPv4 DHCP daemon
Loaded: loaded (/usr/lib/systemd/system/kea-dhcp4-server.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-02-09 12:29:31 CET; 4min 38s ago
Invocation: 06184716b85c4a4c9e40404b4e2be7de
Docs: man:kea-dhcp4(8)
Main PID: 2687 (kea-dhcp4)
Tasks: 7 (limit: 1675)
Memory: 2.7M (peak: 2.9M)
CPU: 69ms
CGroup: /system.slice/kea-dhcp4-server.service
└─2687 /usr/sbin/kea-dhcp4 -c /etc/kea/kea-dhcp4.conf
févr. ... DHCPSRV_CFGMGR_ADD_IFACE listening on interface enp0s8
févr. ... DHCPSRV_CFGMGR_SOCKET_TYPE_DEFAULT "dhcp-socket-type" not specified , using default ... raw
févr. ... DHCP4_CONFIG_COMPLETE DHCPv4 server has completed ...: added IPv4 subnets: 1; DDNS: disabled
févr. ... DHCPSRV_MEMFILE_DB opening memory file lease database: ... name=/var/lib/kea/kea-leases4.csv ...
févr. ... DHCPSRV_MEMFILE_LEASE_FILE_LOAD loading leases from file /var/lib/kea/kea-leases4.csv
févr. ... DHCPSRV_MEMFILE_EXTRACT_EXTENDED_INFO4 extracting extended info saw 0 leases, extended ...
févr. ... DHCPSRV_MEMFILE_LFC_SETUP setting up the Lease File Cleanup interval to 3600 sec
févr. ... DHCPSRV_CFGMGR_USE_ALLOCATOR using ... for V4 leases in subnet 192.168.3.0/24
févr. ... DHCP4_MULTI_THREADING_INFO enabled: yes, number of threads: 2, queue size: 64
févr. ... DHCP4_STARTED Kea DHCPv4 server version 2.6.3 startedCelui-ci ne montre pas d'erreur, le service DHCP sera lancé automatiquement au boot de srvlan.
Vérifiez l'utilisation par le service du port UDP 67 :
[srvlan@srvlan] sudo ss -anup | grep dhcpRetour :
UNCONN 0 0 192.168.3.1:67 0.0.0.0:* users:(("kea-dhcp4",pid=2687,fd=11))3 - Gestion des logs du service DHCP
3.1 - Création d'un fichier de stockage des logs
Editez le fichier de configuration kea-dhcp4-server :
[srvlan@srvlan] sudo nano /etc/kea/kea-dhcp4.confet entrez ce qui suit sous la section subnet4 :
"subnet4": [
...
],
// Gestion des logs du serveur DHCP.
"loggers": [
{
"name": "kea-dhcp4",
"output_options": [
{
"output": "/var/log/kea/kea-dhcp4.log",
"pattern": "%D{%Y-%m-%d %H:%M:%S.%q} %-5p %m\n"
}
],
"severity": "INFO",
"debuglevel": 0
}
]
// Ci-dessous, accolades existantes
}
}Nota : Ne pas oublier d'ajouter une virgule derrière le crochet de fin de section subnet4.
Redémarrez le serveur DHCP :
[srvlan@srvlan] sudo systemctl restart kea-dhcp4-server
[srvlan@srvlan] sudo systemctl status kea-dhcp4-server et affichez le contenu du fichier kea-dhcp4.log qui a été créé dans le dossier /var/log/kea/.
[srvlan@srvlan] sudo cat /var/log/kea/kea-dhcp4.log4 - Modification de la configuration DNS statique
Ouvrez le fichier DNS de zone directe intra.loupipfire.fr :
[srvlan@srvlan] cd /etc/bind
[srvlan@srvlan] sudo nano db.intra.loupipfire.fr.directe et supprimez ou commentez (;) les 4 lignes suivantes :
debian-vm1 IN A 192.168.3.2
debian-vm2 IN A 192.168.3.4
ctn1 IN A 192.168.3.6
ctn2 IN A 192.168.3.8Ouvrez le fichier DNS de zone inverse intra.loupipfire.fr :
[srvlan@srvlan] sudo nano db.intra.loupipfire.fr.inverse et supprimez ou commentez (;) les 4 lignes suivantes :
2 IN PTR debian-vm1.intra.loupipfire.fr.
4 IN PTR debian-vm2.intra.loupipfire.fr.
6 IN PTR ctn1.intra.loupipfire.fr.
8 IN PTR ctn2.intra.loupipfire.fr.Relancez le service DNS :
[srvlan@srvlan] sudo systemctl restart bind9Nota : Ne modifiez pas les lignes des hôtes srvlan/ovs.
5 - Tests de bon fonctionnement du DHCP
5.1 - Préparation
Au préalable, éditez le fichier apparmor suivant :
[srvlan@srvlan] cd /etc/apparmor.d
[srvlan@srvlan] sudo nano usr.sbin.kea-dhcp4et ajoutez ce contenu à la fin de celui-ci :
# Section ajoutée pour tracer les messages DHCP
owner /var/log/kea/kea-dhcp4.packets.log rw,
owner /var/log/kea/kea-dhcp4.packets.log.[0-9]* rw,
owner /var/log/kea/kea-dhcp4.packets.log.lock rwk,
// Ci-dessous, accolade existante
}Ceci permettra de créer un fichier kea-dhcp4.packets.log qui stockera les messages DHCP clients <- -> serveur.
Il est parallèlement nécessaire de modifier cet autre fichier apparmor :
[srvlan@srvlan] sudo nano usr.sbin.kea-lfcen ajoutant ce contenu sous la ligne "owner /var/log/kea/kea-dhcp6.log w," :
owner /var/log/kea/kea-dhcp4.packets.log w,Editez ensuite le fichier de configuration du serveur :
[srvlan@srvlan] sudo nano /etc/kea/kea-dhcp4.confet ajoutez ce contenu à l'intérieur de la section loggers :
// Gestion des logs du serveur DHCP.
"loggers": [
{
"name": "kea-dhcp4",
...
},
{
"name": "kea-dhcp4.packets",
"output_options": [
{
"output": "/var/log/kea/kea-dhcp4.packets.log",
"maxver": 3
}
],
"severity": "DEBUG",
"debuglevel": 99
}
// Ci-dessous, crochet et accolades existants
]
}
}Nota : Ne pas oublier d'ajouter une virgule derrière l'accolade de fin du name précédent.
Redémarrez les services AppArmor et DHCP :
[srvlan@srvlan] sudo systemctl restart apparmor
[srvlan@srvlan] sudo systemctl status apparmor
[srvlan@srvlan] sudo systemctl restart kea-dhcp4-server
[srvlan@srvlan] sudo systemctl status kea-dhcp4-server Un fichier vide kea-dhcp4.packets.log a été créé dans le dossier /var/log/kea/.
Ouvrez à présent un second terminal et connectez-vous en tant que root (Cde : su root).
Entrez la Cde de traçage qui permettra d'observer en temps réel les messages DHCP échangés :
[root@srvlan] tail -f /var/log/kea/kea-dhcp4.packets.log5.2 - Test depuis les VM debian-vm1 et 2
Référez-vous au Mémento 4.1 pour modifier les paramètres réseau.
- VM debian-vm1
Ajustez la Méthode de l'onglet Paramètres IPv4 sur Automatique (DHCP).
Supprimez ensuite l'adresse IP statique et enregistrez.
Redémarrez la VM Debian :
[clientlinux@debian-vm1] sudo rebootet contrôlez l'affectation d'une nouvelle adresse IP :
[clientlinux@debian-vm1] ip addressqui doit faire partie de la plage DHCP du serveur DHCP.
Démarrez Firefox et vérifiez le bon accès à Internet.
- VM srvlan
Vérifiez que le terminal de traçage contient ces lignes :
DEBUG [kea...] DHCP4_BUFFER_RECEIVED ... from 0.0.0.0:68 to 255.255.255.255:67 over interface enp0s8
DEBUG [kea...] DHCP4_SUBNET_SELECTED [hwtype=1 08:00:27:...], cid..., tid...: the subnet with ID 1 was ...
DEBUG [kea...] DHCP4_SUBNET_DATA [hwtype=1 08:00:27:...], cid..., tid...: ... details: 192.168.3.0/24
INFO [kea...] DHCP4_PACKET_RECEIVED [hwtype=1 08:00:27:...], cid..., tid...: DHCPDISCOVER ... enp0s8
DEBUG [kea...] DHCP4_QUERY_DATA [hwtype=1 08:00:27:...], cid..., tid..., packet ...type=DHCPDISCOVER ...
options:
type=012, len=010: "debian-vm1" (string)
...
type=061, len=007: 01:08:00:27:a0:d2:05
DEBUG [kea...] DHCP4_SUBNET_SELECTED [hwtype=1 08:00:27:...], cid..., tid...: the subnet with ID 1 was ...
DEBUG [kea...] DHCP4_SUBNET_DATA [hwtype=1 08:00:27:...], cid..., tid...: ... details: 192.168.3.0/24
INFO [kea...] DHCP4_PACKET_SEND [hwtype=1 08:00:27:...], cid..., tid...: trying ... DHCPOFFER ... from 192.168.3.1:67 to 192.168.3.30:68 on ... enp0s8
DEBUG [kea...] DHCP4_RESPONSE_DATA [hwtype=1 08:00:27:...], cid..., tid...: responding ... DHCPOFFER ..., ... local...3.1:67, remote...3.30:68, ...,
options:
...
type=003, len=004: 192.168.3.1
...
type=051, len=004: 28800 (uint32)
...
type=058, len=004: 14400 (uint32)
type=059, len=004: 27720 (uint32)
...
type=119, len=021: "intra.loupipfire.fr." (fqdn)
DEBUG [kea...] DHCP4_BUFFER_RECEIVED ... from 0.0.0.0:68 to 255.255.255.255:67 over interface enp0s8
DEBUG [kea...] DHCP4_SUBNET_SELECTED [hwtype=1 08:00:27:...], cid..., tid...: the subnet with ID 1 was ...
DEBUG [kea...] DHCP4_SUBNET_DATA [hwtype=1 08:00:27:...], cid..., tid...: ... details: 192.168.3.0/24
INFO [kea...] DHCP4_PACKET_RECEIVED [hwtype=1 08:00:27:...], cid..., tid...: DHCPREQUEST ... enp0s8
DEBUG [kea...] DHCP4_QUERY_DATA [hwtype=1 08:00:27:...], cid..., tid..., packet ...type=DHCPREQUEST ...
options:
...
type=050, len=004: 192.168.3.30 (ipv4-address)
...
DEBUG [kea...] DHCP4_SUBNET_SELECTED [hwtype=1 08:00:27:...], cid..., tid...: the subnet with ID 1 was ...
DEBUG [kea...] DHCP4_SUBNET_DATA [hwtype=1 08:00:27:...], cid..., tid...: ... details: 192.168.3.0/24
INFO [kea...] DHCP4_PACKET_SEND [hwtype=1 08:00:27:...], cid..., tid...: trying ... DHCPACK ... from 192.168.3.1:67 to 192.168.3.30:68 on ... enp0s8
DEBUG [kea...] DHCP4_RESPONSE_DATA [hwtype=1 08:00:27:...], cid..., tid...: responding ... DHCPACK ..., ... local...3.1:67, remote...3.30:68, ...,
options:
...et que le fichier des baux /var/lib/kea/kea-leases4.csv contient celles-ci :
address, hwaddr, client_id, valid_lifetime, expire, subnet_id, ... hostname, ...
192.168.3.30, 08:00:27:a0:d2:05, 01:08:00:27:..., 28800, 1770672033, 1, ... debian-vm1, ...
Le fichier /var/log/kea/kea-dhcp4.log du serveur doit également montrer ceci :
INFO DHCP4_LEASE_OFFER [hwtype=1 08:00:27:a0:d2:05], cid..., tid=...: lease 192.168.3.30 will be offered
INFO DHCP4_LEASE_ALLOC [hwtype=1 08:00:27:a0:d2:05], cid..., tid=...: lease 192.168.3.30 has been allocated for 28800 seconds- VM debian-vm2
Procédez de la même manière que pour debian-vm1.
5.3 - Test depuis le conteneur Podman ctn1
Pour affecter à ctn1 une adresse MAC fixe et le déclarer client DHCP, éditez ce script d'ovs :
[switch@ovs] sudo nano /root/networknamespace.shet remplacez la ligne ci-dessous concernant ctn1 :
## Activation des extrémités vctn1/2 et lo côté nsctn1...
...
...
ip netns exec nsctn1 ip link set vctn1 up
...par celle-ci :
ip netns exec nsctn1 ip link set vctn1 address e2:f0:31:2a:b6:05 up Nota : L'adresse MAC doit être celle entrée ci-dessus dans le fichier kea-dhcp4.conf de srvlan.
Commentez ensuite la ligne affectant une IP fixe à ctn1 :
## Ajout adresses IP extrémités vctn1/2 côté nsctn1...
#ip netns exec nsctn1 ip addr add 192.168.3.6/24 dev vctn1
...et ajoutez ceci à la fin du fichier juste avant exit 0 :
## Déclaration de l'interface vctn1 comme client DHCP.
ip netns exec nsctn1 dhclient -4 vctn1Nota : Sous Debian 13, remplacez dhclient -4 par dhcpcd -4.
Puis rebootez la VM ovs et contrôlez le résultat :
[switch@ovs] sudo reboot
[switch@ovs] sudo podman exec -it ctn1 bash
Starting OpenBSD Secure Shell server: sshd.
[root@ctn1] ip addressLe conteneur doit avoir reçue l'adresse IP 192.168.3.20.
6 - Bilan
Le DHCP remplit son rôle mais la résolution DNS locale sur les VM debian-vm* et les conteneurs ctn* est perdue suite aux modifications du DNS statique.
Il est, pour corriger cela et disposer à l'avenir d'une modification automatique des fichiers DNS, nécessaire de mettre en place un DNS dynamique.

Nouvelle étape franchie.
Le mémento 7.3 vous attend à
présent pour modifier le DNS statique
en DNS dynamique.

