Ressources informatiques

Ressources informatiques

Ressources informatiques

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 :

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 :
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 :
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;
}