DHCP et DHCP Relais sous Debian 9

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

Setup Network 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

Setup Network Debian

Schéma réseau

Voici un petit schéma réseau pour y voir clair.

DHCP Relay Schema

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

Installation DHCP Relais sous Debian

  • 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.

Rules pfSense WAN

  • Interface LAN1 : il y a déjà une règle par défaut qui autorise le trafic vers les autres interfaces (toutes).

Rules pfSense LAN1

  • Interface LAN2 : aucune règle.

Rules pfSense LAN2

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

Add Rules pfSense Multi LAN

Test PING LAN

Ping Multi LAN pfSense Rules

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 DHCP Relay on 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

Network DHCP Relais Windows

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *