Linux : installer et configurer un serveur DHCP KEA sur Debian 12
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à installer et à configurer un serveur DHCP sous Debian 12, à l'aide de la solution ISC KEA DHCP Server. Il s'agit du successeur du célèbre serveur DHCP nommé ISC DHCP Server.
Si vous désirez travailler avec ISC DHCP Server, malgré la fin de vie de ce dernier, vous pouvez lire ce tutoriel disponible sur notre site :
ISC KEA a été développé pendant plusieurs années, en parallèle de la solution ISC DHCP Server, et elle se veut plus moderne et plus évolutive. Elle se décompose en plusieurs paquets, notamment :
- isc-kea-dhcp4 : serveur DHCP pour IPv4, que nous allons installer et configurer dans le cadre de ce tutoriel.
- isc-kea-dhcp6 : serveur DHCP pour IPv6.
- isc-kea-dhcp-ddns : serveur KEA DHCP DDNS pour les mises à jour DNS dynamiques.
- isc-kea-admin : outil d'administration de base de données.
Il est intéressant de noter que ISC KEA s'appuie sur un fichier de configuration au format JSON. De plus, il est capable de s'appuyer sur une base de données MySQL, PostgreSQL ou CQL (Cassandra) pour stocker ses données, bien que ce soit facultatif (voir cette page). Dans cet exemple, nous allons utiliser le mode par défaut basé sur la mémoire vive et un fichier CSV.
Nous n'aborderons pas le fonctionnement du DHCP dans ce tutoriel, cela a été abordé à plusieurs reprises dans d'autres articles de notre site. Mais, pour rappel, le service DHCP permet de fournir automatiquement une configuration IP à un appareil (adresse IP, masque de sous-réseau, passerelle par défaut, serveur DNS, etc.).
Dans le cadre de ce tutoriel, notre objectif sera d'installer un serveur DHCP est de distribuer la plage d'adresses IP suivante : de 192.168.14.100 à 192.168.14.120. Nous verrons aussi comment distribuer un serveur DNS, une passerelle par défaut et comment effectuer une réservation par adresse MAC.
Prérequis :
- Une machine Debian avec une adresse IP fixe, à savoir 192.168.14.99/24, pour ma part.
- Aucun autre serveur DHCP actif sur le réseau afin d’éviter les conflits.
- Une machine cliente (Debian, Ubuntu, Windows, etc...) sans configuration IP afin de tester notre serveur DHCP.
- Une connexion Internet pour télécharger les paquets d'installation.
II. Installation du serveur DHCP KEA
La première étape consiste à effectuer la mise à jour du cache des paquets du système et à installer le paquet correspondant au serveur DHCP IPv4 :
sudo apt-get update
sudo apt-get install kea-dhcp4-server
Ci-dessous, une image qui illustre l'installation de ce paquet.
Sans plus attendre, vous pouvez vérifier l'état du service :
sudo systemctl status kea-dhcp4-server
● kea-dhcp4-server.service - Kea IPv4 DHCP daemon
Loaded: loaded (/lib/systemd/system/kea-dhcp4-server.service; enabled; preset: enabled)
Active: active (running) since Tue 2024-12-03 15:05:39 CET; 54s ago
Docs: man:kea-dhcp4(8)
Main PID: 3427 (kea-dhcp4)
Tasks: 5 (limit: 2249)
Memory: 3.1M
CPU: 24ms
CGroup: /system.slice/kea-dhcp4-server.service
└─3427 /usr/sbin/kea-dhcp4 -c /etc/kea/kea-dhcp4.conf
Cette sortie dans la console permet de voir que le serveur DHCP KEA charge le fichier de configuration suivant : "/etc/kea/kea-dhcp4.conf". Voyons comment effectuer la configuration.
III. Configuration du serveur DHCP KEA
A. Configuration globale du serveur DHCP
Comme nous pouvons le faire avec ISC DHCP Server, nous allons commencer par configurer le serveur DHCP KEA en lui-même. Ce sera l'occasion de définir l'interface réseau sur laquelle le serveur DHCP doit être en écoute.
À partir de la console, affichez la configuration IP de votre machine pour identifier le nom de l'interface réseau. Dans cet exemple, il s'agit de l'interface nommée "ens33".
ip a
Voici en image :
Nous allons partir sur un fichier de configuration vierge, car le fichier d'origine contient beaucoup d'informations. Nous allons renommer le fichier de configuration par défaut, car il peut être utile afin d'avoir un exemple :
sudo mv /etc/kea/kea-dhcp4.conf /etc/kea/kea-dhcp4.conf.bkp
Puis, créez et éditez le fichier de configuration du serveur DHCP via cette commande :
sudo nano /etc/kea/kea-dhcp4.conf
Dans ce fichier, vous devez commencer par indiquer les lignes spécifiées ci-dessous.
Attention : il est déconseillé d'utiliser des commentaires dans un fichier JSON (cela peut être à l'origine de certains problèmes), donc supprimez les lignes commençant par "//", elles sont là uniquement pour vous aider.
{
"Dhcp4": {
// Interface réseau sur laquelle le service DHCP doit être en écoute
"interfaces-config": {
"interfaces": [ "ens33" ]
},
// Durée des baux DHCP (bail de 8 jours, renouvelable à partir de 4 jours)
"valid-lifetime": 691200,
"renew-timer": 345600,
"rebind-timer": 604800,
// Serveur DHCP principal sur ce réseau local
"authoritative": true,
// Configuration de la base des baux DHCP
"lease-database": {
"type": "memfile",
"persist": true,
"name": "/var/lib/kea/kea-leases4.csv",
"lfc-interval": 3600
},
// Suite de la configuration à ajouter ici
}
}
La syntaxe JSON est facilement reconnaissable, mais cela pourra effrayer ceux qui n'ont pas l'habitude de ce format. Voici des explications pour bien comprendre ce que nous venons de faire...
- Spécifier le nom de l'interface réseau sur laquelle le serveur DHCP doit être en écoute, ici "ens33".
"interfaces-config": {
"interfaces": [ "ens33" ]
},
- Spécifier la durée d'un bail DHCP
Le paramètre "valid-lifetime" définit la durée de validité des baux d'adresses IP attribués par le serveur DHCP, soit 8 jours dans cet exemple.
Le paramètre "renew-timer" (T1) définit le moment où le client DHCP commence le processus de renouvellement de son bail avec le serveur, soit 50% de la valeur du paramètre "valid-lifetime".
Le paramètre "rebind-timber" (T2) définit le moment où le client DHCP commence un processus de réengagement avec n'importe quel serveur DHCP disponible, soit 87.5% du paramètre "valid-lifetime" (ce calcul n'est pas propre à KEA). Cela se produit dans le cas où le serveur DHCP n'a pas répondu à la demande de renouvellement du client DHCP.
"valid-lifetime": 691200,
"renew-timer": 345600,
"rebind-timer": 604800,
- Le serveur DHCP fait autorité sur ce réseau local
Si un client DHCP envoie une requête pour renouveler un bail avec une adresse IP qui n'appartient pas au réseau géré par le serveur, notre serveur autoritaire répondra par un message DHCP NAK (Negative Acknowledgement).
"authoritative": true,
- Configuration de la base des baux DHCP
La base de données des baux DHCP sera stockée en mémoire et non dans une base de données ("type": "memfile"), mais elle sera tout de même persistante ("persist": true) puisque ses données seront écrites dans le fichier "/var/lib/kea/kea-leases4.csv". Un nettoyage de cette base de données sera effectué toutes les 3600 secondes (lfc-interval) par le processus LFC (Lease File Cleanup).
"lease-database": {
"type": "memfile",
"persist": true,
"name": "/var/lib/kea/kea-leases4.csv",
"lfc-interval": 3600
},
Enregistrez ce fichier, mais gardez-le ouvert, car nous avons d'autres paramètres à définir.
B. Créer une étendue DHCP
Nous allons poursuivre nos modifications dans le fichier "kea-dhcp4.conf" pour déclarer une première étendue. Ainsi, pour distribuer des adresses IP sur le réseau "192.168.14.0/24", nous allons ajouter un nouveau "subnet4" avec plusieurs options. Ce qui donne :
"subnet4": [
{
"subnet": "192.168.14.0/24",
"pools": [ { "pool": "192.168.14.100 - 192.168.14.120" } ],
"option-data": [
{
"name": "domain-name-servers",
"data": "192.168.14.201"
},
{
"name": "domain-search",
"data": "it-connect.local"
},
{
"name": "routers",
"data": "192.168.14.2"
}
]
}
]
Avec cette configuration, nous allons distribuer les adresses IP de 192.168.14.100 à 192.168.14.120. De plus, voici quelques explications :
- domain-name-servers : serveur DNS à distribuer aux clients (plusieurs valeurs possibles)
- domain-search : domaine de recherche sur le réseau local (plusieurs valeurs possibles)
- routers : passerelle par défaut.
Avec le format JSON, soyez vigilants avec les virgules sur les enchainements d'options (à mettre à chaque fois, sauf sur le dernier élément).
Voici le fichier de configuration complet et correctement formaté :
{
"Dhcp4": {
"interfaces-config": {
"interfaces": [
"ens33"
]
},
"valid-lifetime": 691200,
"renew-timer": 345600,
"rebind-timer": 604800,
"authoritative": true,
"lease-database": {
"type": "memfile",
"persist": true,
"name": "/var/lib/kea/kea-leases4.csv",
"lfc-interval": 3600
},
"subnet4": [
{
"subnet": "192.168.14.0/24",
"pools": [
{
"pool": "192.168.14.100 - 192.168.14.120"
}
],
"option-data": [
{
"name": "domain-name-servers",
"data": "192.168.14.201"
},
{
"name": "domain-search",
"data": "it-connect.local"
},
{
"name": "routers",
"data": "192.168.14.2"
}
]
}
]
}
}
Quand la configuration est prête, enregistrez le fichier et relancez le service du serveur DHCP :
sudo systemctl restart kea-dhcp4-server.service
La configuration est maintenant terminée. Vous pouvez effectuer un test dès maintenant ou poursuivre la configuration avec une réservation DHCP, si vous le souhaitez.
Si le serveur DHCP ne démarre pas, vérifiez les journaux. Vous pouvez utiliser cette commande :
sudo journalctl -xe | grep -e kea
Une erreur de saisie ou de syntaxe est vite arrivée... Donc, vous n'êtes pas à l'abri de voir une erreur telle que celle-ci :
DHCP4_INIT_FAIL failed to initialize Kea server: configuration error using file '/etc/kea/kea-dhcp4.conf': /etc/kea/kea-dhcp4.conf:2.1-7: syntax error
Je vous recommande d'aller sur le site JSONLint pour vous aider à identifier l'erreur si elle est purement liée au JSON.
C. Créer une réservation DHCP
La réservation DHCP va permettre de réserver une adresse IP pour l'associer à une adresse MAC. Ainsi, il n'y a que la machine avec l'adresse MAC correspondante qui pourra obtenir cette adresse IP.
Vous pouvez déclarer une ou plusieurs réservations IP dans le fichier de configuration, au sein de l'étendue DHCP concernée (bloc "subnet4"). Notre objectif sera d'assigner l'adresse IP "192.168.14.100" à la machine qui dispose de l'adresse MAC "00:0c:29:0a:6f:c3". La machine est nommée "Ubuntu2404", donc nous préciserons aussi ce nom dans la réservation pour facilement comprendre à quel appareil correspond cette règle.
Voici les lignes à ajouter :
"reservations": [
{
"hw-address": "00:0c:29:0a:6f:c3",
"ip-address": "192.168.14.100",
"hostname": "Ubuntu2404"
}
]
Ainsi, la configuration ressemblera à celle présentée sur l'image ci-dessous. Vous devez penser à ajouter une virgule à la suite de la section liée aux options.
Quand c'est fait, enregistrez le fichier et relancez le service du serveur DHCP :
sudo systemctl restart kea-dhcp4-server.service
On va pouvoir passer à la phase de test !
IV. Test de bon fonctionnement du DHCP
Pour le test, on va simplement démarrer une machine Linux ou Windows sur le même réseau local que notre serveur DHCP. Ainsi, nous verrons s'il distribue bien une configuration IP à notre machine.
Vous devez configurer la carte réseau de la machine cliente pour qu'elle soit en DHCP. Si vous utilisez Ubuntu, Debian, ou Windows, pour faire ce test, les manipulations ne sont pas les mêmes. Vous pouvez vous aider ces tutoriels :
- Comment configurer une adresse IP statique avec Netplan sur Ubuntu ou Debian ?
- Comment configurer une adresse IP fixe sur Debian ?
À titre d'information, voici la configuration du fichier "/etc/netplan/01-network-manager-all.yaml" de Netplan sur Ubuntu :
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: yes
Également à titre d'information, si vous passez par le fichier "/etc/network/interfaces", voici la configuration attendue :
auto ens33
iface ens33 inet dhcp
Relancez le service réseau sur votre machine (la commande est différente, selon si vous utilisez Netplan ou pas).
Ensuite, vous devriez obtenir une adresse IP ! Vous pouvez le vérifier via la commande habituelle sur le poste client :
ip a
La machine a obtenue l'adresse IP "192.168.14.100" de la part de notre serveur DHCP. Ce n'est pas un hasard : il s'agit de l'adresse IP associée à la réservation DHCP créée précédemment.
Sur le serveur, vous pouvez consulter la base de données des baux DHCP, au format CSV, via la commande suivante :
cat /var/lib/kea/kea-leases4.csv
Il y a bien un bail DHCP dans la base de données du serveur. La première ligne correspond aux en-têtes du fichier CSV, tandis que la seconde correspond au bail DHCP de la machine "Ubuntu2404".
address,hwaddr,client_id,valid_lifetime,expire,subnet_id,fqdn_fwd,fqdn_rev,hostname,state,user_context
192.168.14.100,00:0c:29:0a:6f:c3,01:00:0c:29:0a:6f:c3,691200,1733931089,1,0,0,ubuntu2404,0,
Notre serveur DHCP KEA sur Debian 12 est opérationnel !
V. Conclusion
En suivant ce tutoriel, vous devriez parvenir à installer et à configurer un serveur DHCP ISC KEA sur votre machine Linux, que ce soit sur Debian, Ubuntu ou une autre distribution. Certaines options peuvent être définies au niveau global du serveur ou au niveau de l'étendue, en fonction des besoins. Cela est précisé dans la documentation. D'ailleurs, pour aller plus loin, voici le lien vers la documentation officielle :
Enfin, si vous souhaitez migrer d'ISC DHCP Server vers ISC KEA, sachez qu'il y a un outil nommé Kea Migration Assistant (KeeMA). A ce sujet, regardez cette page :
Si vous avez des questions, vous pouvez commenter cet article ou venir poser votre question sur notre Discord.