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
IP
va répondre le serveurDHCP
. Pour chacun de ces réseaux IP :- La plage d'adresses
IP
allouées. - L'adresse
IP
du serveur de nom (si différent de celui précisé dans la configuration pour tous les réseaux supportés). - Eventuellement, l'adresse
IP
de 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; }