Monter un serveur DHCP avec une Debian 10

Toutes les machines qui communiquent sur un réseau informatique est “joignable” par son adresse IP (je fais abstraction du hostname dans un domaine, ce n'est pas le sujet ici). A moins de le faire manuellement, le serveur DHCP permet d'attribuer une adresse IP à un appareil qui se connecte sur le réseau. Si vous créez votre propre réseau interne (maison, entreprise) il vous faut donc un serveur DHCP. Voici comment monter un serveur de base sous Debian. A vous par la suite de l'améliorer dans ses fonctionnalités.

Pré-requis

avoir une Debian 10 minimal. Si vous avez autre chose d'installé adaptez ce qui suit. Mais partez sur le principe que moins vous avez de chose sur un serveur moins vous aurez de risque de sécurité ou dysfonctionnement. Pour être sure de partir sur de bonne base on va d'abord vérifier les paramètres réseau du futur serveur.

Configurez d'abord les interfaces réseaux. S'il y a plusieurs interfaces, il faut au moins une interface en IP fixe.

Uniquement à faire si vous avez une interface en DHCP que vous ne gérez pas en plus d'une interface statique (sinon passez directement au paramétrage du réseau static). Le DNS de l'interface DHCP est prioritaire et supprime le DNS indiqué en statique. Pour éviter cette suppression il faut installer resolvconf ET utiliser la premiere carte montée comme interface statique.

apt install resolvconf

Pour connaitre le nom des interfaces:

ls /sys/class/net

la configuration des interfaces se fait dans /etc/network/interfaces

On déclare la méthode de configuration des interfaces en mode manuel (statique) et pas en DHCP.

iface eth0 inet static

On paramètre la configuration réseau

address 192.168.1.1/24
gateway 192.168.1.1

Vérifier le fichier /etc/hostname pour le nom du serveur, le modifier et rebooter si besoin. Maintenant que la configuration du réseau du futur serveur DHCP est opérationnel, passons à l'installation de la fonctionnalité serveur DHCP.

Installation

Tout d'abord faire une mise à jour de votre système (sous root ou sudo):

apt update
apt upgrade

Ensuite installez les paquets nécessaires:

apt install isc-dhcp-server

Vous aurez probablement des erreurs à la fin de l'installation du paquet lorsque le serveur DHCP va démarrer ! C'est normal… on n'a rien configuré.

Configuration

Adaptez le fichier /etc/default/isc-dhcp-server à votre besoin

# 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="enp0s9"
#INTERFACESv6=""

Configurez le serveur /etc/dhcp/dhcpd.conf, en adaptant ou créant un fichier de configuration (créer une copie de sauvegarde de l'original)

Contenu strictement minimal

# durée d'attribution et de renouvellement de l'adresse IP
default-lease-time 600;
max-lease-time 7200;

# indique que c'est le serveur DHCP principal
authoritative;

# La plage d'adresse disponible dans mon réseau
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.1 192.168.1.10;
}

Il est possible d'utiliser le serveur DHCP pour founir dynamiquement le hostname aux OS (pas Windows) qui gèrent l'option 12 du client DHCP au boot de client. D'autre information peuvent etre aussi transmis aux clients (domaine, passerelle, ntp, pxe, …)

contenu amélioré

# options communes à tous les réseaux gérés par le DHCP (apparait dans le resolv.conf sous linux)
#option domain-name "beemoon.fr";
#option domain-search "beemoon.fr";
#option domain-name-servers 192.168.1.1;
#option ntp-servers 192.168.1.1;

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

# indique que c'est le serveur DHCP principal
authoritative;

# This is a very basic subnet declaration.
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.2 192.168.1.3;
  # spécifique à ce subnet et remplace les options communes
  option domain-name-servers 192.168.1.1;
  option domain-name "beemoon.fr";
  option domain-search "beemoon.fr";
  option routers 192.168.1.1;
  option broadcast-address 192.168.1.255;
}

# Fixed IP addresses can also be specified for hosts.
host clientLinux{
 hardware ethernet 08:00:27:D9:F0:1C;
 fixed-address 192.168.1.2;
 # attribue le hostname dynamiquement au boot de ce client (si le fichier hostname est vide sous linux)
 option host-name "clientLinux";
 # spécifique à ce client et remplace les options spécifiques dans ce subnet
 option domain-name-servers 8.8.8.8;
}

redémarrez le serveur ou le service.

sudo systemctl stop isc-dhcp-server.service
sudo systemctl start isc-dhcp-server.service
sudo systemctl status isc-dhcp-server.service

Astuce

Je sépare la liste de mes appareils qui doivent toujours récupérer la meme IP du fichier de configuration globale. Ces appareils sont listés dans un fichier que j'ai nommé staticDHCP.conf

Pour qu'il soit pris en compte je rajoute à la fin de mon fichier de configuration globale la directive:

include "/etc/dhcp/staticDHCP.conf"

Les blocs qui déclarent les IP fixe peuvent etre supprimés ou commentés dans le fichier dhcpd.conf, contenu d'un bloc pour définir une IP en DHCP fixe dans mon fichier staticDHCP.conf

# Fixed IP addresses can also be specified for hosts.
host clientLinux{
 hardware ethernet 08:00:27:D9:F0:1C;
 fixed-address 192.168.1.2;
 # attribue le hostname dynamiquement au boot de ce client (si le fichier hostname est vide sous linux)
 option host-name "clientLinux";
 # spécifique à ce client et remplace les options spécifiques dans ce subnet
 option domain-name-servers 8.8.8.8;
}

en cas de modification/ajout d'un appareil (ou modification de la configuration globale) pensez à redémarrer le serveur ou au moins recharger la configuration.

Dernière modification : le 2022/05/22