DHCP (Dynamic Host Configuration Protocol) est un protocole qui permet d’assurer la configuration automatique des interfaces réseaux. Cette configuration comprend : Adresse IP, Masque de sous-réseau, une passerelle…etc. D’autre paramètre supplémentaires peuvent être distribués…
Le DHCP offre l’avantage d’offrir une configuration complète à chaque machine qui en fait la demande, de plus, il est impossible de distribuer deux configurations identiques. Le conflit est donc évité et l’administration est également facilitée.
Machine virtuelle nécessaire :
- pfSense : Install , Conf, 4 NICS
- Debian-1 : DHCP principal
- Debian-2 : DHCP Relais
- Serveur AD : Windows Server 2016 (facultatif)
Machine de test :
- PC-Pixel : Windows 10
- Debian : Debian 9
Serveur DHCP :
- isc-dhcp-server : le serveur le plus utilisé sous Debian.
- kea-dhcp4-server : un nouveau serveur moderne et performant. Pour plus d’info : kb.isc.org/docs#
- kea-dhcp6-server : le même que le précédent mais uniquement pour les adresses IPv6.
Les fichiers de configuration DHCP :
- /etc/default/isc-dhcp-server
- /etc/dhcp/dhcpd.conf
Création de VM sous Oracle VM VirtualBox : machine-virtuelle-pixelabs/
Configuration VM & Network
Commençons par le début. Nous allons avoir besoin d’un routeur (pfSense) et de 4 machines virtuelles :
- Routeur : pfSense : 3 interfaces :
- Carte 1 : Accès par Pont – WAN (em0) (pfSense)
- Carte 2 : Réseau Interne :
- Nom : LAN1 (em1) (Debian-1)
- Carte 3 : Réseau Interne :
- Nom : LAN2 (em2) (Debian-2)
- Machine 1 : Debian-1
- Nom de la machine : Debian-1
- Carte 1 : Réseau Interne
- Nom : LAN1
- Adresse IP : 172.16.1.5
- Masque : 255.255.192.0
- Passerelle : 172.16.1.1
- DNS : 172.16.1.6 (AD-SERVER16)
- Machine de test :
- PC-Pixel : Windows 10
- Debian : Debian 9
Machine 2 : Debian-2
- Nom de la machine : Debian-2
- Carte 1 : Réseau Interne :
- Nom : LAN2
- Adresse IP : 172.16.64.5
- Masque : 255.255.192.1
- Passerelle : 172.16.64.1
- DNS : 172.16.1.6 (AD-SERVER16)
- Machine de test :
- PC-Pixel : Windows 10
- Debian : Debian 9
Schéma réseau
Voici un petit schéma réseau pour y voir clair.
Installation DHCP (Debian-1)
Sur la machine virtuelle Debian-1, mettez à à jour votre système.
root@pixelabs:~# apt update ... ... All packages are up to date. root@pixelabs:~# root@pixelabs:~# cat /etc/issue Debian GNU/Linux 9 \n \l root@pixelabs:~#
Installez le serveur DHCP :
root@pixelabs:~# apt install isc-dhcp-server Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait The following additional packages will be installed: libirs-export141 libisccc-export140 libisccfg-export140 policycoreutils selinux-utils Paquets suggérées : isc-dhcp-server-ldap Les NOUVEAUX paquets suivants seront installés : isc-dhcp-server libirs-export141 libisccc-export140 libisccfg-export140 policycoreutils selinux-utils 0 mis à jour, 6 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 1 745 ko dans les archives. Après cette opération, 6 662 ko d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer ? [O/n] o
Après l’installation, le serveur DHCP va essayer de démarrer, mais il échouera, c’est normal, il faut d’abord configurer les plages d’adresses IP.
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; vendor preset: enabled) Active: failed (Result: exit-code) since Sat 2018-06-30 16:56:20 CEST; 21ms ago Docs: man:systemd-sysv-generator(8) Process: 1478 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=1/FAILURE) juin 30 16:56:18 pixelabs dhcpd[1489]: to which interface enp0s3 is attached. ** juin 30 16:56:18 pixelabs dhcpd[1489]: juin 30 16:56:18 pixelabs dhcpd[1489]: juin 30 16:56:18 pixelabs dhcpd[1489]:# Not configured to listen on any interfaces! juin 30 16:56:20 pixelabs isc-dhcp-server[1478]: Starting ISC DHCPv4 server: dhcpdcheck syslog for diagnostics. ... failed! juin 30 16:56:20 pixelabs isc-dhcp-server[1478]:# failed! juin 30 16:56:20 pixelabs systemd[1]: isc-dhcp-server.service: Control process exited, code=exited status=1 juin 30 16:56:20 pixelabs systemd[1]:# Failed to start LSB: DHCP server. juin 30 16:56:20 pixelabs systemd[1]: isc-dhcp-server.service: Unit entered failed state. juin 30 16:56:20 pixelabs systemd[1]: isc-dhcp-server.service: Failed with result 'exit-code'.
Configuration DHCP
Passons donc à la configuration. Sauvegarder le fichier dhcpd.conf
root@pixelabs:~# cd /etc/dhcp/ root@pixelabs:/etc/dhcp# cp dhcpd.conf dhcpd.conf.old root@pixelabs:/etc/dhcp#
Éditez le fichier dhcpd.conf :
root@pixelabs:/etc/dhcp# nano dhcpd.conf
Voici ma configuration, adaptez les paramètres par rapport à votre configuration et enregistrer.
# Nom de domaine ad-server16.pixelabs.local option domain-name "pixelabs.local"; # Serveur DNS ad-server16.pixelabs.local option domain-name-servers 172.16.1.6; # Temps de l'attribution d'une adresse IP default-lease-time 600; # Temps maximum de l'attribution d'une adresse IP max-lease-time 7200; # Le sous-réseau et le masque subnet 172.16.1.0 netmask 255.255.255.0 { # Plage d'adresses IP range 172.16.1.10 172.16.1.20; # Adresse de broadcast option broadcast-address 172.16.1.255; # Masque de sous-réseau option subnet-mask 255.255.192.0; # La passerelle par défaut option routers 172.16.1.1; # Serveur DNS ad-server16.pixelabs.local option domain-name-servers 172.16.1.6; # Domaine AD ad-server16.pixelabs.local option domain-name "pixelabs.local"; } # Le sous-réseau et le masque subnet 172.16.64.0 netmask 255.255.255.0 { # Plage d'adresses IP range 172.16.64.30 172.16.64.40; # Adresse de broadcast option broadcast-address 172.16.64.255; # Masque de sous-réseau option subnet-mask 255.255.192.0; # La passerelle par défaut option routers 172.16.64.1; # Serveur DNS ad-server16.pixelabs.local option domain-name-servers 172.16.1.6; # Domaine AD ad-server16.pixelabs.local option domain-name "pixelabs.local"; }
Éditez le fichier /etc/default/isc-dhcp-relay et ajoutez le nom de l’interface réseau de votre serveur Debian : INTERFACESv4= »enp0s3″
root@pixelabs:/etc/dhcp# nano /etc/default/isc-dhcp-server
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server) ... ... # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACESv4="enp0s3" INTERFACESv6=""
Remarque : si vous avez plusieurs interfaces réseau, séparez-les par un Espace.
Installation DHCP Relais (Debian-2)
Sur la machine virtuelle Debian-2, mettez à à jour votre système.
root@pixelabs:~# apt update ... All packages are up to date. root@pixelabs:~#
Installez le Relais DHCP :
root@pixelabs:~# apt install isc-dhcp-relay Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait The following additional packages will be installed: libirs-export141 libisccc-export140 libisccfg-export140 Les NOUVEAUX paquets suivants seront installés : isc-dhcp-relay libirs-export141 libisccc-export140 libisccfg-export140 0 mis à jour, 4 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 896 ko dans les archives. Après cette opération, 1 399 ko d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer ? [O/n] O
Lors de l’installation, la fenêtre graphique DHCP Relay s’affiche et on peut directement configurer le serveur de relais DHCP. Si ce n’est pas le cas pour vous, pas de panique, il y a un fichier de configuration pour DHCP-Relay.
- Mettez l’adresse du serveur DHCP principal. Ici c’est Debian-1
- Cliquez sur Entrée
- Interface où le relais DHCP sera à l’écoute : Ne rien mettre
- Cliquez surEntrée
- Option supplémentaires : Ne rien mettre
- Cliquez sur Entrée.
- L’installation se poursuit :
... ... Paramétrage de isc-dhcp-relay (4.3.5-3+deb9u1) ... Generating /etc/default/isc-dhcp-relay... Traitement des actions différées (« triggers ») pour libc-bin (2.24-11+deb9u3) ... Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u3) ... root@pixelabs:~#
Une fois l’installation terminée, le serveur se lance automatiquement.
Configuration DHCP Relais
Le fichier de configuration se trouve dans /etc/default/isc-dhcp-relay.
Éditez le fichier de configuration :
root@pixelabs:~# nano /etc/default/isc-dhcp-relay
... ... # What servers should the DHCP relay forward requests to? SERVERS="172.16.1.5" # On what interfaces should the DHCP relay (dhrelay) serve DHCP requests? INTERFACES="" # Additional options that are passed to the DHCP relay daemon? OPTIONS=""
Rules Firewall pfSense
Pour que le serveur DHCP fonctionne, il faut ouvrir les ports sur le routeur pfSense. Voici les ports par défaut :
- Serveur DHCP : Port 67/UDP
- Client DHCP : Port 68/UDP
Il faut également une connexion internet pour le réseau LAN2 (Debian-2). Bref, vous avez surement compris, il faut que les deux réseaux LAN1 et LAN2 puissent communiquer ensemble.
La configuration actuelle :
- Interface WAN : aucune règle.
- Interface LAN1 : il y a déjà une règle par défaut qui autorise le trafic vers les autres interfaces (toutes).
- Interface LAN2 : aucune règle.
Sans rien modifier encore, nous allons faire un test.
- Depuis la machine Debian-1 (LAN1 : 172.16.1.5)
- PING –> Debian-2 (LAN2 : 172.16.64.5)
- Depuis la machine Debian-2 (LAN2 : 172.16.64.5)
- PING –>Debian-1 (LAN1 : 172.16.1.5)
- PING –> google.fr
Résultat : LAN1 =Ok / LAN2 =Failed
Pour autoriser le réseau LAN2 (Debian-2). Vous pouvez :
- Soit autoriser tout le trafic vers toutes les interfaces
- Créer exactement la même règle que le LAN1
- Soit autoriser uniquement les ports nécessaires.
- Serveur DHCP : 67/udp
- Client DHCP : 68/udp
- Active Directory : 50636 tcp/udp
- Serveur DNS : 53 tcp/udp
- Internet : HTTPS 443 tcp
Si vous êtes en PROD (en entreprise) vous devez autoriser uniquement les ports nécessaires afin de renforcer la sécurité de votre infrastructure. Dans mon cas, je vais autoriser tout le trafic. Rien ne nous empêche de cibler par part une fois le serveur DHCP opérationnel. Voir #Regles_Firewall_pfSense
Connectez-vous à l’interface pfSense : 172.16.1.1 . Allez dans le menu Pare-feu > Règles > LAN2 (Firewall > Rules)
- Cliquez sur le bouton vert (flèche vers le haut)
- Action : Autoriser
- Interface : LAN2
- Famille d’adresse : IPv4
- Protocole : Tous
- Source : LAN2 net
- Destination : tout
- Description : LAN2 to any rule
- Enregistrer / Appliquer les modifications
Test PING LAN
Test Serveur DHCP (Debian-1)
Démarrez le serveur DHCP :
root@pixelabs:~# systemctl start isc-dhcp-server
root@pixelabs:~# systemctl status isc-dhcp-server ● isc-dhcp-server.service - LSB: DHCP server Loaded: loaded (/etc/init.d/isc-dhcp-server; generated; vendor preset: enabled) Active: active (running) since Sat 2018-06-30 21:25:55 CEST; 12min ago Docs: man:systemd-sysv-generator(8) Process: 2290 ExecStop=/etc/init.d/isc-dhcp-server stop (code=exited, status=0/SUCCESS) Process: 2302 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=0/SUCCESS) Tasks: 1 (limit: 4915) CGroup: /system.slice/isc-dhcp-server.service └─2317 /usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf enp0s3
Client Windows
Test sur une machine virtuelle Windows 10 :
- Carte 1 : Réseau Interne :
- Nom : LAN1
C:\Users\PC-PIXEL># ipconfig /release C:\Users\PC-PIXEL># ipconfig /renew
Rappel de la plage d’adresses IP : 172.16.1.10 – 172.16.1.20
Client Linux
Test sur une machine virtuelle Linux. Assurez-vous que le client DHCP est bien installé. Sous Debian 9, le package est installé par défaut.
- Carte 1 : Réseau Interne :
- Nom : LAN1
root@pixelabs:~# apt-get install isc-dhcp-client
Rappel de la plage d’adresses IP : 172.16.1.10 – 172.16.1.20
Remarque : l’adresse 172.16.1.10 est déjà attribuée à la machine Windows 10 ci-dessus.
Test sur une nouvelle VM Debian en mode DHCP :
Le serveur DHCP a bien distribué une adresse IP à la machine Debian
Test Relais DHCP (Debian-2)
Vérifier que le service est bien démarré :
root@pixelabs:~# systemctl start isc-dhcp-relay
root@pixelabs:~# systemctl status isc-dhcp-relay ● isc-dhcp-relay.service - LSB: DHCP relay Loaded: loaded (/etc/init.d/isc-dhcp-relay; generated; vendor preset: enabled) Active: active (running) since Sat 2018-06-30 19:23:16 CEST; 2h 13min ago Docs: man:systemd-sysv-generator(8) Tasks: 1 (limit: 4915) CGroup: /system.slice/isc-dhcp-relay.service └─2187 /usr/sbin/dhcrelay -q -i enp0s3 172.16.1.5 juin 30 19:23:16 pixelabs systemd[1]: Starting LSB: DHCP relay... juin 30 19:23:16 pixelabs isc-dhcp-relay[2183]: Requesting: enp0s3 as upstream: Y downstream: Y juin 30 19:23:16 pixelabs systemd[1]: Started LSB: DHCP relay. root@pixelabs:~# root@pixelabs:~#
Client Windows
Test sur une machine virtuelle Windows 10.
Remarque : pour tester sur la même chose, changer de carte réseau sous VirtualBox. LAN1 > LAN2
- Carte 1 : Réseau Interne :
- Nom : LAN2
C:\Users\PC-PIXEL># ipconfig /release C:\Users\PC-PIXEL># ipconfig /renew
Rappel de la plage d’adresses IP : 172.16.64.30 – 172.16.64.40
Client Linux
Test sur une machine virtuelle Linux. Assurez-vous que le client DHCP est bien installé.
Remarque : pour tester sur la même chose, changer de carte réseau sous VirtualBox. LAN1 > LAN2
- Carte 1 : Réseau Interne :
- Nom : LAN2
root@pixelabs:~# apt-get install isc-dhcp-client
Rappel de la plage d’adresses IP : 172.16.64.30 – 172.16.64.40
Remarque : l’adresse 172.16.64.30 est déjà attribuée à la machine Windows 10 ci-dessus.
Le serveur Relais DHCP a bien distribué une adresse IP à la machine Debian
Réservation d’adresses IP
Pour plus de sécurité, il est possible de réserver une adresse IP pour une machine en fonction de son adresse MAC. Le but est d’éviter que la machine change d’adresse IP.
Éditez le fichier de configuration du serveur DHCP sur le serveur principal Debian-1
root@pixelabs:/etc/dhcp# nano dhcpd.conf
Ajoutez les deux blocs :
- host PC-PIXEL – sous le réseau 172.16.1.0
- host Debian – sous le réseau 172.16.64.0
# Le sous-réseau et le masque subnet 172.16.1.0 netmask 255.255.255.0 { # Plage d'adresses IP range 172.16.1.10 172.16.1.20; # Adresse de broadcast option broadcast-address 172.16.1.255; # Masque de sous-réseau option subnet-mask 255.255.192.0; # La passerelle par défaut option routers 172.16.1.1; # Serveur DNS ad-server16.pixelabs.local option domain-name-servers 172.16.1.6; # Domaine AD ad-server16.pixelabs.local option domain-name "pixelabs.local"; } #------- Réservation pour PC-PIXEL---------- host PC-PIXEL { hardware ethernet 08:00:27:34:F5:ED; fixed-address 172.16.1.28; } # Le sous-réseau et le masque subnet 172.16.64.0 netmask 255.255.255.0 { # Plage d'adresses IP range 172.16.64.30 172.16.64.40; # Adresse de broadcast option broadcast-address 172.16.64.255; # Masque de sous-réseau option subnet-mask 255.255.192.0; # La passerelle par défaut option routers 172.16.64.1; # Serveur DNS ad-server16.pixelabs.local option domain-name-servers 172.16.1.6; # Domaine AD ad-server16.pixelabs.local option domain-name "pixelabs.local"; } #------- Réservation pour Debian---------- host Debian { hardware ethernet 08:00:27:6D:40:36; fixed-address 172.16.64.39; } root@pixelabs:~#
Redémarrez le serveur DHCP :
root@pixelabs:~# systemctl restart isc-dhcp-server
Client Windows
C:\Users\PC-PIXEL># ipconfig /release C:\Users\PC-PIXEL># ipconfig /renew
host PC-PIXEL { hardware ethernet 08:00:27:34:F5:ED; fixed-address 172.16.1.28; }
Client Linux
root@pixelabs:~# ifdown enp0s3 root@pixelabs:~# ifup enp0s3
host Debian { hardware ethernet 08:00:27:6D:40:36; fixed-address 172.16.64.39; }
C’est terminé les amis. Vous venez d’installer et configurer avec succès un serveur DHCP sous Debian 9 pour votre startup.
Bonne journée et à très bientôt.