Configurer un serveur DHCP
Documentation : Documentation Ubuntu
Installer le serveur DHCP
(Devenir l'utilisateur root)
doe@debian:~$ su - root
Télécharger le dépôt
root@debian:~# apt update
root@debian:~# apt install isc-dhcp-server
See "systemctl status isc-dhcp-server.service" and "journalctl -xeu isc-dhcp-server.service" for details.
serveurX systemd[1]: Failed to start isc-dhcp-server.service - LSB: DHCP server.
Le système ne parvient pas à lancer le serveur DHCP : c'est normal car il n'est pas configuré.
root@debian:~# journalctl -xe | grep -e subnet -e interfaces -e failed sept. 22 10:45:10 serveurX systemd[1]: Starting networking.service - Raise network interfaces... sept. 22 10:45:12 serveurX systemd[1]: Finished networking.service - Raise network interfaces. sept. 22 11:06:23 serveurX dhcpd[1173]: No subnet declaration for enp0s8 (10.0.3.15). sept. 22 11:06:23 serveurX dhcpd[1173]: you want, please write a subnet declaration sept. 22 11:06:23 serveurX dhcpd[1173]: No subnet declaration for enp0s3 (192.168.56.11). sept. 22 11:06:23 serveurX dhcpd[1173]: you want, please write a subnet declaration sept. 22 11:06:23 serveurX dhcpd[1173]: Not configured to listen on any interfaces! sept. 22 11:06:25 serveurX isc-dhcp-server[1161]: Starting ISC DHCPv4 server: dhcpdcheck syslog for diagnostics. ... failed! sept. 22 11:06:25 serveurX isc-dhcp-server[1161]: failed! ░░ Subject: Unit failed ░░ The unit isc-dhcp-server.service has entered the 'failed' state with result 'exit-code'. ░░ L'unité (unit) isc-dhcp-server.service a échoué, avec le résultat failed.
Nous devons modifier le fichier /etc/default/isc-dhcp-server pour définir l'interface réseau sur laquelle écoute le serveur, puis indiquer dans
le fichier /etc/dhcp/dhcpd.conf les allocations d'adresses IP.
Configurer le serveur DHCP
Définir l'interface réseau sur laquelle écoute le serveur
Copier le fichier d'origine
root@debian:~# cp /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.origin
Déterminer les interfaces réseau de sa Debian
root@debian:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> ...
...
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:42:0f:40 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.34/24 brd 192.168.1.255 scope global enp0s3
...
Définir l'interface réseau à utiliser par le serveur DHCP
Utilisez un éditeur pour modifier le fichier de configuration. Exemple vi, nano, ...
Il faut modifier la directive INTERFACESv4 avec le nom de l'interface choisie.
Exemple :
root@debian:~# nano /etc/default/isc-dhcp-server
Résultat de la modification :
root@debian:~# cat /etc/default/isc-dhcp-server | grep INTERFACESv4 INTERFACESv4="enp0s3"
Configurer l'allocation des adresses IP
Pour cela, il faut définir :
- La durée du bail par défaut. Ce paramètre est utilisé si le client ne fait pas de demande de durée de bail.
- La durée du bail maximale. Ce paramètre est utilisé si le client fait une demande de durée de bail.
- Sur quelle adresse de réseau
IPva répondre le serveurDHCP. Pour chacun de ces réseaux IP :- La plage d'adresses
IPallouées. - L'adresse
IPdu serveur de nom (si différent de celui précisé dans la configuration pour tous les réseaux supportés). - Eventuellement, l'adresse
IPde la passerelle. - Eventuellement, le nom de domaine.
- Eventuellement, d'autres paramètres.
- La plage d'adresses
- Eventuellement, l'adresse
IPà allouer à un client en fonction de son adresseMAC.
Pour des précisions complémentaires, consultez les pages de man : man dhcpd et man dhcpd.conf.
Je donne ci-dessous deux exemples d'un fichier /etc/dhcp/dhcpd.conf (pensez, au préalable, à faire une copie du fichier d'origine) :
Copier le fichier d'origine
root@debian:~# cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.origin
Créer un fichier de configuration minimal en supprimant les commentaire du fichier précédent
Toutes les lignes commençant par le caractère # sont des commentaires et peuvent donc être supprimées. Cela permet de rendre plus lisible le fichier de configuration. On ajoutera des commentaires expliquant notre configuration.
root@debian:~# grep -E -v '^(#)' /etc/dhcp/dhcpd.conf.origin > /etc/dhcp/dhcpd.conf
Exemple 1 : définir une plage d'allocation d'adresses IP pour des clients inconnus
Cahiers des charges :
- Serveur de noms :
192.168.1.254 - Bail par défaut :
12 heures - Bail maximal :
24 heures - Plage d'adresses
IP:192.168.1.181 192.168.1.189 - Passerelle :
192.168.1.254 - Serveur de temps :
192.168.1.254
Modifier le fichier /etc/dhcp/dhcpd.conf
Utilisez un éditeur pour modifier le fichier de configuration. Exemple vi, nano, ...
Si vous ne possédez pas de serveur DNS gérant un nom de domaine, la ligne option domain-name "example.org"; est à
commenter ou à supprimer.
root@debian:~# nano /etc/dhcp/dhcpd.conf
Résultat de la modification :
root@debian:~# cat /etc/dhcp/dhcpd.conf
# Définition communes à tous les réseaux supportés
option domain-name-servers 192.168.1.254;
default-lease-time 43200; # 12 heures
max-lease-time 86400; # 24 heures
ddns-update-style none;
# Allocation pour le réseau 192.168.1.0/24
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.181 192.168.1.189;
option routers 192.168.1.254;
option ntp-servers 192.168.1.254;
}
Exemple 2 : allouer une adresse IP aux clients en fonction de leur adresse MAC
Objectif : allouer une adresse IP fixe pour un hôte en fonction de son adresse MAC. Les clients dont on ne connait pas l'adresse MAC n'obtiendront pas d'adresse IP.
Cahiers des charges :
- Serveur de noms :
192.168.1.254 - Bail par défaut :
12 heures - Bail maximal :
24 heures - Passerelle :
192.168.1.254 - Serveur de temps :
192.168.1.254
Modifier le fichier /etc/dhcp/dhcpd.conf
On souhaite que l'hôte possédant l'adresse MAC : 08:00:27:90:d6:bf se voit affecter
l'adresse IP : 192.168.1.41.
Fichier /etc/dhcp/dhcpd.conf :
root@debian:~# cat /etc/dhcp/dhcpd.conf
# Définition communes à tous les réseaux supportés
option domain-name-servers 192.168.1.254;
default-lease-time 43200; # 12 heures
max-lease-time 86400; # 24 heures
ddns-update-style none;
deny unknown-clients; # Les clients dont l'adresse MAC n'est pas connue
# n'obtiennent pas d'adresses IP
# Allocation pour le réseau 192.168.1.0/24
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.254;
option ntp-servers 192.168.1.254;
}
host client1 {
hardware ethernet 08:00:27:ce:4f:43;
fixed-address 192.168.1.41;
}
Démarrer le serveur DHCP
root@debian:~# systemctl start isc-dhcp-server
Contrôler l'état du serveur DHCP
root@debian:~# systemctl status isc-dhcp-server
● isc-dhcp-server.service - LSB: DHCP server
Loaded: loaded (/etc/init.d/isc-dhcp-server; generated)
Active: active (running) ...
...
...... debian isc-dhcp-server[2438]: Launching IPv4 server only.
...
...... debian isc-dhcp-server[2438]: Starting ISC DHCPv4 server: dhcpd.
...... debian systemd[1]: Started LSB: DHCP server.
Le serveur DHCP est actif.
Visualiser les erreurs éventuelles
root@serveurX:~# journalctl -xe | grep dhcp serveurX systemd[1]: Started isc-dhcp-server.service - LSB: DHCP server. ░░ Subject: L'unité (unit) isc-dhcp-server.service a terminé son démarrage ░░ L'unité (unit) isc-dhcp-server.service a terminé son démarrage, avec le résultat done.
Effectuer les tests de validation
Configurer le client pour qu'il obtiennne une adresse IP par le protocole DHCP
root@clientDebian:~# cat /etc/network/interfaces source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto enp0s3 iface enp0s3 inet dhcp
Effectuer une demande d'adresse IP depuis le client Debian
root@clientDebian:~# ifdown enp0s3 root@clientDebian:~# ifup enp0s3 Listening on LPF/enp0s3/008:00:27:ce:4f:43 Sending on LPF/enp0s3/08:00:27:ce:4f:43 Sending on Socket/fallback DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 5 DHCPOFFER of 192.168.1.41 from 192.168.1.34 DHCPREQUEST for 192.168.1.41 on enp0s3 to 255.255.255.255 port 67 DHCPACK of 192.168.1.41 from 192.168.1.34
Visualiser le bail alloué depuis le seveur DHCP
root@debian:~# journalctl -xe | grep -B 4 DHCPACK | tail -n 4 août 22 17:53:13 debian dhcpd[1626]: DHCPDISCOVER from 08:00:27:ce:4f:43 via enp0s3 août 22 17:53:13 debian dhcpd[1626]: DHCPOFFER on 192.168.1.41 to 08:00:27:ce:4f:43 via enp0s3 août 22 17:53:13 debian dhcpd[1626]: DHCPREQUEST for 192.168.1.41 (192.168.1.34) from 08:00:27:ce:4f:43 via enp0s3 août 22 17:53:13 debian dhcpd[1626]: DHCPACK on 192.168.1.41 to 08:00:27:ce:4f:43 via enp0s3
Visualiser le bail obtenu, sur le client Debian
Visualiser l'adresse IP obtenue
root@clientDebian:~# ip a | grep -A2 enp0s3:
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:ce:4f:43 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.41/24 brd 192.168.1.255 scope global dynamic enp0s3
Visualiser le bail obtenu par le client
Rechercher le nom du fichiers contenant les baux
root@clientDebian:~# ps -ef | grep dhclient root 952 1 0 17:53 ? 00:00:00 /sbin/dhclient -4 -v -i -pf /run/dhclient.enp0s3.pid -lf /var/lib/dhcp/dhclient.enp0s3.leases -I -df /var/lib/dhcp/dhclient6.enp0s3.leases enp0s3 doe 1059 1055 0 18:08 pts/0 00:00:00 grep dhclient
root@clientDebian:~# tail -20 /var/lib/dhcp/dhclient.enp0s3.leases | grep -A 20 lease
lease {
interface "enp0s3";
fixed-address 192.168.1.41;
option subnet-mask 255.255.255.0;
option routers 192.168.1.254;
option dhcp-lease-time 43200;
option dhcp-message-type 5;
option domain-name-servers 192.168.1.254;
option dhcp-server-identifier 192.168.1.34;
option ntp-servers 192.168.1.254;
renew 0 2021/08/22 21:50:41;
rebind 1 2021/08/23 02:23:13;
expire 1 2021/08/23 03:53:13;
}