Libre à vous de partager

Nous nous retrouvons pour cette étape 8 qui est la configuration du DHCP du défi. Il s’agit de la première étape réelle de la mise en place de votre réseau indépendant.

Après avoir vu en grande ligne l’intérêt et le fonctionnement du DHCP du défi, nous aborderons une partie plus pratique qui consistera à installer et paramétrer le DHCP du défi sur le Raspberry pi.

Présentation du DHCP du défi

Objectifs

Le DHCP (Dynamic Host Configuration Protocol) est un service réseau dont l’objectif est de centraliser et de faciliter la gestion des adresses IP d’un ou de plusieurs réseaux. Nous n’aborderons pas le cas de plusieurs réseaux dans ce défi.

Il est capable de gérer à la fois des adresses dynamiques et des adresses statiques. En effet une bonne pratique dans l’adressage IP d’un réseau est de fournir des adresses IP qui restent les mêmes dans le temps pour les serveurs.

Généralement, les postes clients ont quant à eux une adresse IP dynamique. C’est-à-dire que à chaque redémarrage du poste, l’adresse peut changer. Mais ce n’est pas une obligation.

Certaines organisations font le choix de fixer la totalité des adresses IP à la fois celle des serveurs et celle des postes clients. Cependant, cela complexifie de manière importante la maintenance et le maintien de la configuration du service.

Chaque modification de la configuration nécessite le redémarrage du service, provoquant ainsi une interruption de quelques secondes. Cela veut dire que durant le redémarrage du service, aucun poste client ou serveur ne pourra obtenir d’adresses IP.

Dans le cadre des adresses dynamiques, l’adresse est fournie à partir d’une plage d’adresses définie dans les fichiers de configuration. Afin d’éviter les doublons d’adresses IP, cette plage ne doit pas contenir d’adresses IP statiques.

Au minimum, le serveur DHCP du défi va fournir l’adresse IP, le masque de sous-réseau ainsi que l’adresse d’une passerelle par défaut. Il existe de très nombreuses options de configuration possible. Il n’est pas rare par exemple que soit fourni aussi l’adresse du serveur DNS, le nom de l’hôte en cas d’adresses statiques, le serveur de temps…

Pour le serveur DNS, nous effectuerons la modification du DHCP du défi lors d’une prochaine étape. Dans un premier temps nous fournirons l’adresse du DNS de la box au client. Nous ne fournirons l’adresse de notre serveur DNS qu’une fois celui-ci configuré et opérationnel. En effet, si nous fournissons maintenant à l’adresse du futur serveur DNS, cela produirait soit une latence importante, si nous maintenons le DNS de la box comme serveur secondaire (ce qui sera le cas), voire une incapacité pure et simple de résoudre les noms de domaine, si nous ne configurons qu’un seul serveur DNS. J’aborderai cette problématique plus en profondeur dans les étapes concernant le DNS.

L’adresse IP est fournie pour un délai précis. On parle alors d’un bail DHCP. La durée est définie directement dans les fichiers de configuration. À l’expiration du bail, une demande de renouvellement est alors effectuée par le client. Si l’adresse est toujours disponible ou qu’elle est définie en statique, le client la garde. La totalité des autres options de configuration du DHCP sont renvoyés en même temps que l’adresse.

Ce fonctionnement permet ainsi aux administrateurs réseaux de modifier des paramètres réseau qui seront automatiquement mis à jour sur la totalité des clients dans la durée du bail définie.

Architecture

Le protocole DHCP est défini par les RFC 1533 et RFC 1534.

L’attribution se fait en quatre étapes :

  • Envoi d’une demande sur l’adresse de diffusion.
  • Réponse d’un ou plusieurs DNS
  • Le client notifie le premier serveur DHCP qu’il accepte son offre. Le client notifie les autres serveurs DHCP que leur offre n’a pas été retenue
  • Le serveur DHCP fournit alors à l’adresse, le masque de sous-réseau, la durée du bail ainsi que tous les autres paramètres présents dans sa configuration.
Requête DHCP du défi

Cas pratique : installation du DHCP du défi

Nous allons installer le logiciel isc-dhcp-server sur notre Raspberry pi comme serveur DHCP du défi. Il s’agit à l’heure actuelle d’un des logiciels les plus répandus bien que celui-ci soit en fin de vie. Il est simple à prendre en main et fait un bon candidat pour une première prise en main de la gestion des adresses IP.

Téléchargement du logiciel

Le logiciel est présent dans les dépôts. L’installation se fait comme n’importe quel logiciel sur le Raspberry pi avec la commande apt.

gabriel@raspberrypi:~ $ sudo apt install isc-dhcp-server
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  libirs-export161 libisccfg-export163 policycoreutils selinux-utils
Paquets suggérés :
  isc-dhcp-server-ldap
Les NOUVEAUX paquets suivants seront installés :
  isc-dhcp-server libirs-export161 libisccfg-export163 policycoreutils selinux-utils
0 mis à jour, 5 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 1 592 ko dans les archives.
Après cette opération, 6 258 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o
Réception de :1 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libisccfg-export163 armhf 1:9.11.19+dfsg-2.1 [263 kB]
Réception de :2 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libirs-export161 armhf 1:9.11.19+dfsg-2.1 [243 kB]
Réception de :3 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf isc-dhcp-server armhf 4.4.1-2.3+deb11u2 [463 kB]
Réception de :4 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian bullseye/main armhf selinux-utils armhf 3.1-3 [135 kB]
Réception de :5 http://distrib-coffee.ipsl.jussieu.fr/pub/linux/raspbian/raspbian bullseye/main armhf policycoreutils armhf 3.1-3 [488 kB]
1 592 ko réceptionnés en 1s (1 516 ko/s)
Préconfiguration des paquets...
Sélection du paquet libisccfg-export163 précédemment désélectionné.
(Lecture de la base de données... 106752 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../libisccfg-export163_1%3a9.11.19+dfsg-2.1_armhf.deb ...
Dépaquetage de libisccfg-export163 (1:9.11.19+dfsg-2.1) ...
Sélection du paquet libirs-export161 précédemment désélectionné.
Préparation du dépaquetage de .../libirs-export161_1%3a9.11.19+dfsg-2.1_armhf.deb ...
Dépaquetage de libirs-export161 (1:9.11.19+dfsg-2.1) ...
Sélection du paquet isc-dhcp-server précédemment désélectionné.
Préparation du dépaquetage de .../isc-dhcp-server_4.4.1-2.3+deb11u2_armhf.deb ...
Dépaquetage de isc-dhcp-server (4.4.1-2.3+deb11u2) ...
Sélection du paquet selinux-utils précédemment désélectionné.
Préparation du dépaquetage de .../selinux-utils_3.1-3_armhf.deb ...
Dépaquetage de selinux-utils (3.1-3) ...
Sélection du paquet policycoreutils précédemment désélectionné.
Préparation du dépaquetage de .../policycoreutils_3.1-3_armhf.deb ...
Dépaquetage de policycoreutils (3.1-3) ...
Paramétrage de selinux-utils (3.1-3) ...
Paramétrage de policycoreutils (3.1-3) ...
Paramétrage de libisccfg-export163 (1:9.11.19+dfsg-2.1) ...
Paramétrage de libirs-export161 (1:9.11.19+dfsg-2.1) ...
Paramétrage de isc-dhcp-server (4.4.1-2.3+deb11u2) ...
Generating /etc/default/isc-dhcp-server...
Job for isc-dhcp-server.service failed because the control process exited with error code.
See "systemctl status isc-dhcp-server.service" and "journalctl -xe" for details.
invoke-rc.d: initscript isc-dhcp-server, action "start" failed.
● isc-dhcp-server.service - LSB: DHCP server
     Loaded: loaded (/etc/init.d/isc-dhcp-server; generated)
     Active: failed (Result: exit-code) since Tue 2023-10-31 15:54:57 CET; 53ms ago
       Docs: man:systemd-sysv-generator(8)
    Process: 2023 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=1/FAILURE)
        CPU: 109ms

oct. 31 15:54:55 raspberrypi dhcpd[2039]: before submitting a bug.  These pages explain the proper
oct. 31 15:54:55 raspberrypi dhcpd[2039]: process and the information we find helpful for debugging.
oct. 31 15:54:55 raspberrypi dhcpd[2039]:
oct. 31 15:54:55 raspberrypi dhcpd[2039]: exiting.
oct. 31 15:54:57 raspberrypi isc-dhcp-server[2023]: Starting ISC DHCPv4 server: dhcpdcheck syslog for diagnostics. ...
oct. 31 15:54:57 raspberrypi isc-dhcp-server[2044]:  failed!
oct. 31 15:54:57 raspberrypi isc-dhcp-server[2045]:  failed!
oct. 31 15:54:57 raspberrypi systemd[1]: isc-dhcp-server.service: Control process exited, code=exited, status=1/FAILURE
oct. 31 15:54:57 raspberrypi systemd[1]: isc-dhcp-server.service: Failed with result 'exit-code'.
oct. 31 15:54:57 raspberrypi systemd[1]: Failed to start LSB: DHCP server.
Traitement des actions différées (« triggers ») pour libc-bin (2.31-13+rpt2+rpi1+deb11u7) ...
Traitement des actions différées (« triggers ») pour man-db (2.9.4-2) ...

Le démarrage a échoué en raison du manque de configuration. Problème que nous allons résoudre dans la section suivante.

Configuration du DHCP du défi

La configuration du DHCP du défi est simple. Nous allons utiliser que les options indispensables. elle se trouve dans le fichier /etc/dhcp/dhcpd.conf

  • range 192.168.1.100 192.168.1.199; : définit la plage d’adresses
  • option broadcast-address 192.168.1.255; : définit l’adresse de diffusion
  • option routers 192.168.1.254; : définit l’adresse de notre passerelle. Il s’agit de l’adresse de votre box.
  • option domain-name-servers 192.168.1.254; : définit l’adresse du serveur DNS. Là aussi il s’agit de l’adresse de votre box.

Voici mon fichier de configuration du DHCP du défi tronqué :

gabriel@raspberrypi:~ $  cat /etc/dhcp/dhcpd.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# option definitions common to all supported networks...
option domain-name "admin-libre.loc";

default-lease-time 600;
max-lease-time 7200;

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
#log-facility local7;

# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.

subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.199;
        option broadcast-address 192.168.1.255;
        option routers 192.168.1.254;
        option domain-name-servers 192.168.1.254;
}
...

Pensez à redémarrer le service!

gabriel@raspberrypi:~ $ sudo systemctl restart isc-dhcp-server.service
gabriel@raspberrypi:~ $ sudo systemctl status isc-dhcp-server.service
● isc-dhcp-server.service - LSB: DHCP server
     Loaded: loaded (/etc/init.d/isc-dhcp-server; generated)
     Active: active (running) since Tue 2023-10-31 17:13:33 CET; 9min ago
       Docs: man:systemd-sysv-generator(8)
    Process: 1279 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=0/SUCCESS)
      Tasks: 4 (limit: 1595)
        CPU: 209ms
     CGroup: /system.slice/isc-dhcp-server.service
             └─1295 /usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf eth0

oct. 31 17:16:46 raspberrypi dhcpd[1295]: reuse_lease: lease age 0 (secs) under 25% threshold, reply with unaltered, existing lease for 192.168.1.101
oct. 31 17:16:46 raspberrypi dhcpd[1295]: DHCPDISCOVER from ac:7b:a1:b9:a5:50 (DESKTOP-N3HE46Q) via eth0
oct. 31 17:16:46 raspberrypi dhcpd[1295]: DHCPOFFER on 192.168.1.101 to ac:7b:a1:b9:a5:50 (DESKTOP-N3HE46Q) via eth0
oct. 31 17:16:46 raspberrypi dhcpd[1295]: reuse_lease: lease age 0 (secs) under 25% threshold, reply with unaltered, existing lease for 192.168.1.101
oct. 31 17:16:46 raspberrypi dhcpd[1295]: DHCPREQUEST for 192.168.1.101 (192.168.1.1) from ac:7b:a1:b9:a5:50 (DESKTOP-N3HE46Q) via eth0
oct. 31 17:16:46 raspberrypi dhcpd[1295]: DHCPACK on 192.168.1.101 to ac:7b:a1:b9:a5:50 (DESKTOP-N3HE46Q) via eth0
oct. 31 17:19:27 raspberrypi dhcpd[1295]: DHCPREQUEST for 192.168.1.100 from 74:56:3c:07:50:da (orion) via eth0
oct. 31 17:19:27 raspberrypi dhcpd[1295]: DHCPACK on 192.168.1.100 to 74:56:3c:07:50:da (orion) via eth0
oct. 31 17:21:47 raspberrypi dhcpd[1295]: DHCPREQUEST for 192.168.1.101 from ac:7b:a1:b9:a5:50 (DESKTOP-N3HE46Q) via eth0
oct. 31 17:21:47 raspberrypi dhcpd[1295]: DHCPACK on 192.168.1.101 to ac:7b:a1:b9:a5:50 (DESKTOP-N3HE46Q) via eth0

Si le démarrage échoue à nouveau, allez voir la section dépannage

Désactivation de celui de l’opérateur

Je ne couvrirai pas plus que ça à la désactivation du DHCP de votre box. En effet la procédure n’est pas la même en fonction des opérateurs. Se référer à la documentation de l’opérateur.

Vérification du bon fonctionnement du DHCP du défi

Pour la vérification, rien de plus simple, il suffit de démarrer un autre PC ou bien d’activer le Wi-Fi de votre téléphone. Si vous avez bien suivi les étapes précédentes, l’appareil obtiendra une nouvelle adresse IP du Raspberry pi et vous pourrez naviguer sur Internet.

Si c’est le cas, alors votre serveur DHCP du défi est fonctionnel.

Dépannage

Comme vous le savez, nous n’avons configuré que la partie IPv4. Cependant, le service fonctionne à la fois pour IPv4 et IPv6. Or, système D ne parvenant pas à démarrer le service IPv6, va signaler que le service ne fonctionne pas alors que le service IPv4 fonctionne correctement.

Pour désactiver ceci, il faut alors aller modifier le fichier de configuration : /etc/default/isc-dhcp-server.

En fin du fichier, il faut commenter en mettant un dièse la ligne : INTERFACESv6.

J’ai aussi rajouté l’interface eth0 à la directive INTERFACESv4. Ainsi je restreins la réponse du service DHCP sur la carte réseau.

Il suffit alors de redémarrer le service.

gabriel@raspberrypi:~ $ sudo systemctl restart isc-dhcp-server.service

Ci-dessous mon fichier /etc/default/isc-dhcp-server :

gabriel@raspberrypi:~ $ cat /etc/default/isc-dhcp-server
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid

# Additional options to start dhcpd with.
#       Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="eth0"
#INTERFACESv6=""

Conclusion

Félicitations, vous venez d’installer votre DHCP du défi sur votre Raspberry pi. Maintenant, vous êtes indépendants du service DHCP de votre fournisseur d’accès, pour votre réseau privé.

La prochaine fois, nous expliquerons le protocole DNS qui est un des piliers d’Internet.

Comme pour les fois précédentes, si vous avez des commentaires ou des questions n’hésitaient pas à les mettre sur le site, LinkedIn ou Facebook.

Laisser un commentaire