#theme/IT/Protocols/DHCP #theme/IT/LNX/Debian
# KB-LNX : Installer ISC DHCP Server sous Debian
Dans ce tutoriel, nous allons apprendre à installer et à configurer un serveur DHCP sous Debian 12. Vous pouvez utiliser une autre distribution puisque le paquet ISC DHCP Server n'est pas limité à cette distribution Linux.
> [!danger] Attention !<span style="font-weight: normal; color: var(--text-normal)"> L'outil isc-dhcp-server n'est plus supporté depuis 2022. Il reste pleinement fonctionnel et peut être utilisé à des fins de tests ou sur un réseau isolé. Consultez [ISC DHCP Server EOL](https://www.isc.org/blogs/isc-dhcp-eol/) pour en savoir plus.</span>
> [!info] À savoir !<span style="font-weight: normal; color: var(--text-normal)"> Si vous désirez installer ISC KEA plutôt que ISC DHCP Server, lisez cet article : [Linux : installer et configurer un serveur DHCP KEA sur Debian 12](https://www.it-connect.fr/linux-installer-et-configurer-un-serveur-dhcp-kea-sur-debian/)</span>
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.100.100 à 192.168.100.120. Dans cette procédure, nous distinguerons 3 types de configurations IP :
- **Statique** : L’IP est configurée par l’administrateur de la machine de façon manuelle.
- **Dynamique** : La machine reçoit une IP automatiquement à partir d’un serveur DHCP. Cette adresse dispose d'une durée de vie (bail dhcp) et elle est susceptible de changer régulièrement.
- **Fixe (réservation)** : C’est une adresse dynamique, mais le serveur DHCP fournit toujours la même IP (identification en fonction de l’adresse mac de la carte réseau).
# Installer un serveur DHCP sous Debian
Pour en savoir plus sur le fonctionnement du protocole DHCP, consultez le cours [[B2-DHCP-Cours|B2-DHCP]] disponible en annexe de cette procédure.
## Prérequis
- Une machine Debian avec une adresse IP statique, à savoir 192.168.100.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.) configurée en client DHCP pour les tests.
- Une connexion Internet pour télécharger les paquets d'installation.
## Installer le paquet isc-dhcp-server
Mettre à jour le système d’exploitation :
```
sudo apt update && sudo apt upgrade
```
Installer le logiciel isc-dhcp-server, suivre les étapes ci-dessous :
```
sudo apt install isc-dhcp-server -y
```
Il est normal de recevoir des alertes pendant l'installation, car à ce stade l'application n'est pas encore configurée ce qui fait planter le service "*isc-dhcp-server*" au démarrage. Ci-dessous le message d'échec qui s'est affiché sur ma machine de démonstration :
![[_img-kb-lnx-dhcp-server.png]]
## Configurer une étendue DHCP
Identifiez le nom de l'interface qui dispose de l'adresse IP statique "192.168.100.99" avec la commande `ip a`. Dans cette démonstration, nous utiliserons l'interface nommée "*enp0s3*".
> [!danger] Attention !<span style="font-weight: normal; color: var(--text-normal)"> Adaptez les configurations ci-dessous en fonction de votre environnement personnel.</span>
Pour configurer le service serveur DHCP, ouvrez le fichier "*isc-dhcp-server*" :
```
sudo nano /etc/default/isc-dhcp-server
```
Commencez par retirer le symbole "**#**" sur cette ligne pour activer la prise en charge du fichier de configuration "*dhcpd.conf*" que nous modifierons par la suite.
```
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
```
> [!info] À savoir !<span style="font-weight: normal; color: var(--text-normal)"> La ligne `DHCPDv4_CONF=/etc/dhcp/dhcpd.conf` indique que la configuration des étendues DHCP en IPv4 s’effectue dans le fichier "*dhcpd.conf*".</span>
Modifiez la ligne "*INTERFACES*" en insérant le nom de l’interface chargée de distribuer les baux DHCP :
```
INTERFACESv4="enp0s3"
```
Enregistrez et fermez le fichier. Il faut à présent configurer l'étendues IP v4 dans le fichier `/etc/dhcp/dhcpd.conf` :
```
sudo nano /etc/dhcp/dhcpd.conf
```
Dans ce fichier, vous pouvez déclarer des options au niveau du serveur ou au niveau de chaque étendue, selon vos besoins.
> [!info] À savoir !<span style="font-weight: normal; color: var(--text-normal)"> Une option peut être positionnée au sein d’un bloc déclaratif “**subnet**” pour être appliquée à une étendue, ou en dehors, pour s’appliquer par défaut sur toutes les étendues.</span>
Commencez par ajouter ces lignes, en adaptant selon vos besoins pour définir les options par défaut au niveau du serveur DHCP :
```
# Nom de domaine
option domain-name "mon-domain.local";
# Durée pour les baux DHCP en secondes (default 10 minutes et 2 joursmaximum)
default-lease-time 600;
max-lease-time 7200;
# Serveur DHCP principal sur ce réseau local
authoritative;
```
Sous ces options de serveur, déclarez votre première étendue DHCP, ajoutez les lignes suivantes qui définissent notre étendue DHCP personnalisée :
```
# Déclaration d'une étendue DHCP
subnet 192.168.100.0 netmask 255.255.255.0 {
# Plage d'adresses IP à distribuer
range 192.168.100.100 192.168.100.120;
# Serveur(s) DNS à distribuer
option domain-name-servers 1.1.1.1;
# Adresse de la passerelle par défaut
option routers 192.168.100.1;
# Adresse de broadcast du réseau
option broadcast-address 192.168.100.255;
}
```
Voici le résultat :
![[_img-kb-lnx-dhcp-server-1.png]]
Sauvegardez le fichier avec la combinaison de touche `[Ctrl]+[X]`, puis `[Y]` et `[Enter]`. Ensuite, redémarrez le service :
```
sudo service isc-dhcp-server restart
```
Si le service DHCP redémarre sans erreurs, félicitations votre serveur DHCP est prêt ! Sinon, vérifiez les fichiers de configurations et les étapes précédentes.
## Optionnel : Configurer une réservation DHCP
Certains équipements fournissent des services accessibles depuis le réseau : une imprimante, une borne Wifi, un serveur Web, etc. Pour standardiser et faciliter l'accès à ces services, il est recommandé de **fixer l'adresse IP** de l'équipement. De cette façon, à chaque fois que le client renouvellera son bail DHCP, il obtiendra toujours la même adresse IP : **c'est une réservation DHCP**.
Pour réaliser une réservation d'adresse IP fixe dans isc-dhcp-server, éditez le fichier "*dhcpd.conf*" :
```
sudo nano /etc/dhcp/dhcpd.conf
```
Ajoutez les lignes suivantes dans la configuration de l'étendue en adaptant l’adresse MAC :
```
# Nom de la réservation
host client1 {
# Adresse MAC client dhcp
hardware ethernet 08:00:27:e2:db:fc;
# Adresse fixe réservée pour l'équipement
fixed-address 192.168.100.120;
}
```
Voici le résultat :
![[_img-kb-lnx-dhcp-server-3.png]]
# Vérifier le fonctionnement sur un client
La méthode de vérification varie selon l'OS client. Ci-dessous les commandes de vérification sous Windows et sous Linux Debian like.
## Sur un client Windows
### Vérification sous Windows
Connectez une machine cliente Windows sur le même switch pour vérifier le bon fonctionnement du serveur DHCP avec la commande :
```
ipconfig /all
```
Vous devriez constater que la machine cliente a bien reçu l'ensemble des options configurées dans votre étendue :
![[_img-kb-lnx-dhcp-server-2.png]]
### Diagnostic sous Windows
En premier lieu, vérifiez toujours que la carte réseau est connectée au même réseau que le serveur DHCP. Dans un second temps, vérifiez que l'interface est configurée en tant que client DHCP dans les paramètres de la carte "_Panneau de configuration / Centre de réseau et de partages_".
Si la machine cliente n'a pas reçu d'adresse IP, exécutez les commandes suivantes :
- Libérer le bail DHCP actuel :
```
ipconfig /release
```
- Renouveler une demande de bail DHCP :
```
ipconfig /renew
```
Si les problèmes persistent, utilisez "*dhcpdump*" sur le serveur Debian afin de vous assurer que les requêtes DHCP parviennent jusqu'à lui (cf. procédure plus loin dans ce document).
## Sur un client Linux Debian
Connectez une machine cliente Linux Debian sur le même switch pour vérifier le bon fonctionnement du serveur DHCP, plusieurs commandes sont nécessaires.
### Afficher l'adresse IP
La commande `ip address` ou `ip a` en raccourci, permet d'afficher les interfaces réseau avec les adresses IP associées.
```
ip a
```
### Afficher la passerelle
Afin de connaître la passerelle par défaut, la commande `ip route show` ou `ip r` en raccourcis retourne les routes statiques configurées sur la machine, ainsi l'adresse IP de la passerelle qui représente la route par défaut :
```
ip r
```
### Afficher la configuration DNS
Enfin, pour le DNS, il faut afficher le contenu du fichier "*/etc/resolv.conf*" :
```
cat /etc/resolv.conf
```
### Afficher l'adresse du serveur DHCP
Lister les interfaces qui ont récupérées un bail DHCP :
```
ls -la /var/lib/dhcp
```
Identifier le fichier `dhclient.*.leases` qui porte le nom de l'interface du poste client. Dans cette démonstration, nous éditerons le fichier "*dhclient.enp0s3.leases*" :
```
less /var/lib/dhcp/dhclient.enp0s3.leases
```
Voici les éléments affichés sur ma machine de démonstration :
![[_img-kb-lnx-dhcp-server-6.png]]
### Diagnostic sous Linux Debian
En premier lieu, vérifier toujours que la carte réseau est connectée au même réseau que le serveur DHCP. Dans un second temps, vérifiez que l'interface est configurée en tant que client DHCP.
Pour savoir si votre adresse IP est configurée de manière statique (static) ou dynamique (dhcp), il faut afficher le contenu du fichier de configuration "*/etc/network/interfaces*" :
```
cat /etc/network/interfaces
```
Dans l'exemple ci-dessous l'interface, on peut voir que les deux interfaces "*lo*" et "*enp0s3*" sont déclarées et que l'option "*inet dhcp*" est activée. L'interface "*enp0s3*" est donc configurée en mode dynamique (client DHCP) :
![[_img-kb-lnx-ip-static-2.png]]
Pour renouveler la demande d'adresse IP, utilisez la commande suivante :
```
sudo dhclient
```
Si cela ne semble pas suffisant, désactivez et réactivez l'interface Ethernet du client, par exemple :
```
sudo ifdown enp0s3 && sudo ifup enp0s3
```
Si les problèmes persistent, utilisez "*dhcpdump*" sur le serveur Debian afin de vous assurer que les requêtes DHCP parviennent jusqu'à lui (cf. procédure ci-dessous).
# Constater les échanges entre le serveur et le client
## Afficher le statut du service
La commande suivante permet l'affichage des trames DHCP traitées par le serveur :
```
sudo service isc-dhcp-server status
```
Par exemple :
![[_img-kb-lnx-dhcp-server-4.png]]
## Utiliser un analyseur de trames dhcpdump
Pour constater les échanges entre le serveur DHCP et les clients, vous pouvez installer le paquet "*dhcpdump*". C'est un analyseur de trames réservé aux trames DHCP : DISCOVER, OFFER, REQUEST, ACK, etc.
```
sudo apt update && sudo apt install dhcpdump
```
Pour visualiser les trame DHCP sur le serveur Debian, lancez "*dhcpdump*" en écoute sur l'interface "*enp0s3*" (adaptez le nom de l'interface à votre configuration personnelle) :
```
dhcpdump -i enp0s3
```
> [!warning] Rappel ! <span style="font-weight: normal; color: var(--text-normal)">Une fois cette commande lancée, le programme reste est en écoute. Appuyez sur `[CTRL+C]` pour arrêter "*dhcpdump*" si besoin.</span>
Une fois "*dhcpdump*" en écoute, déclenchez une demande de renouvellement dhcp sur un client afin de voir apparaitre les différentes trames DHCP dans la console.
Ci-dessous un exemple issu de ma machine de démonstration qui met en évidence la réception d’une trame DHCPREQUEST :
![[_img-kb-lnx-dhcp-server-5.png]]
# Conclusion
Félicitations ! Vous êtes à présent en mesure de déployer et d'administrer un serveur DHCP sous Debian. La configuration de l'étendue DHCP peut être enrichie avec d'autres options, car le serveur DHCP prend en charge de nombreuses options ([voir cette page](https://linux.die.net/man/5/dhcpd.conf)). Ici, nous avons vu les options de base pour un administrateur système et réseau.
## Références
- ISC : [ISC DHCP Server](https://www.isc.org/dhcp/)
- IT-CONNECT : [Serveur DHCP sous Linux](https://www.it-connect.fr/serveur-dhcp-sous-linux/)