Table of Contents

Centos: Mise en oeuvre d'un serveur DHCP

Introduction

Dynamic Host Configuration Protocol (DHCP) est un protocole réseau dont le rôle est d’assurer la configuration automatique des paramètres IP d’une station, notamment en lui affectant automatiquement sa configuration IP.

DHCP peut aussi configurer l’adresse de la passerelle par défaut ainsi que des serveurs de noms DNS par exemple

Fonctionnement du protocole DHCP

Le mécanisme de base de la communication est BOOTP (avec trame UDP). Quand une machine est démarrée, elle n'a aucune information sur sa configuration réseau, et surtout, l'utilisateur ne doit rien faire de particulier pour trouver une adresse IP. Pour faire ça, la technique utilisée est le broadcast : pour trouver et dialoguer avec un serveur DHCP, la machine va simplement émettre un paquet spécial de broadcast (broadcast sur 255.255.255.255 avec d'autres informations comme le type de requête, les ports de connexion…) sur le réseau local. Lorsque le serveur DHCP recevra le paquet de broadcast, il renverra un autre paquet de broadcast ( le client n'a pas encore d'adresse IP et donc il n'est pas joignable directement) contenant toutes les informations requises pour le client.

Il existe plusieurs types de paquets DHCP susceptibles d'être émis soit par le client pour le ou les serveurs, soit par le serveur vers un client :

Attribution d'une adresse DHCP

Lorsqu'un client DHCP initialise un accès à un réseau TCP/IP, le processus d'obtention du bail IP se déroule en 4 phases :

Enfin le client utilise l'adresse pour se connecter au réseau.

Installation et configuration

Installation de DHCP

Installer le service DHCP

$ yum install dhcp

Configuration du serveur DHCP

Le fichier de configuration

Toute la configuration du serveur dhcp se trouve dans le fichier /etc/dhcp/dhcpd.conf.

Par défaut, toutes les lignes sont commentées. Le serveur n'est donc pas en action.

Définir un bail

Pour des raisons d'optimisation des ressources réseau, les adresses IP sont délivrées avec une date de début et une date de fin de validité. C'est ce qu'on appelle un “bail”. Un client qui voit son bail arriver à terme peut demander au serveur une prolongation du bail par un DHCPREQUEST. De même, lorsque le serveur verra un bail arriver à terme, il émettra un paquet DHCPNAK pour demander au client s'il veut prolonger son bail. Si le serveur ne reçoit pas de réponse valide, il rend disponible l'adresse IP.

On peut optimiser l'attribution des adresses IP en jouant sur la durée des baux. Si aucune adresse n'est libérée au bout d'un certain temps, plus aucune requête DHCP ne pourra être satisfaite, faute d'adresses à distribuer.

Sur un réseau où beaucoup d'ordinateurs se branchent et se débranchent souvent (réseau d'école ou de locaux commerciaux par exemple), il est intéressant de proposer des baux de courte durée. A l'inverse, sur un réseau constitué en majoritéde machines fixes, très peu souvent rebootées, des baux de longues durées suffisent. N'oubliez pas que le DHCP marche principalement par broadcast, et que cela peut bloquer de la bande passante sur des petits réseaux fortement sollicités.

default-lease-time 86400; # Bail de 24H
max-lease-time 172800; # Bail maxi de 48H

Réserver une adresse IP dans la plage

En général, on donne :

Tous ces éléments sont attribués pour la durée de bail fixée. Si, au bout de cette durée, l'hôte ne sollicite pas à nouveau une adresse au serveur, cette adresse est jugée disponible pour un autre hôte.

Exemple d'une réservation basique:

# Déclaration d'un réseau
subnet 192.168.1.0 netmask 255.255.255.0 {
    range                           192.168.1.100 192.168.1.199; # Plage IP
    option domain-name-servers      192.168.1.11; # DNS
    option routers                  192.168.1.1; # Passerelle
    }

On peut réserver une adresse IP dans une plage, pour une adresse MAC donnée, il suffit de déclarer un “host” dans le “subnet”.

Démonstration avec 2 réservations :

# Plage DHCP
subnet 10.21.27.0 netmask 255.255.255.0 {
    range                           10.21.27.100 10.21.27.199;
    option domain-name-servers      10.21.27.253;
    option routers                  10.21.27.254;

    # Réservations DHCP
    host superlinux-eth {
            hardware ethernet 10:bf:48:13:f6:cc;
            fixed-address 10.21.27.100;
    }

    host superlinux-wlan {
            hardware ethernet 68:5d:43:2a:f3:af;
            fixed-address 10.21.27.101;
    }
   
}

Refuser un hôte

Si on veut bloquer une adresse MAC, afin qu'elle ne reçoive pas d'IP, voici quelques lignes à ajouter dans le dhcpd.conf (on suppose que 00:00:00:00:00 est l'adresse MAC)

host banni {
  hardware ethernet 00:00:00:00:00;
  deny booting;
}

Lancement du service

Une fois la config terminée, on lance notre DHCP:

 $ systemctl start dhcpd

Et on ajoute le service au démarrage :

 $ systemctl enable dhcpd

Agent de relais DHCP dans un réseau routé

Routeur et agent relais DHCP (RFC 1542)

Les trames arp, bootp ne traversent pas les routeurs. Sur un réseau segmenté par des routeurs il est donc impossible de servir tous les segments avec le même serveur DHCP. Il faut donc mettre un serveur DHCP sur chaque segment, ou alors utiliser un agent de relais DHCP.

Un agent relais DHCP relaie les messages DHCP échangés entre un client et un serveur DHCP situés sur des sous-réseaux différents.

Il est généralement installé sur un routeur pour pouvoir diriger les messages vers le serveur DHCP, mais ce n'est pas obligatoire. L'agent doit connaître l'adresse du serveur DHCP mais ne peut pas être lui-même client DHCP.

Rôle de l'agent de relais DHCP

Comme les clients contactent les serveurs DHCP à l'aide d'une diffusion, dans un inter-réseau, on doit théoriquement installer un serveur DHCP par sous-réseau.

Serveur DHCP et agent de relais ont des adresses ip statiques. Le dialogue traverse le routeur et se fait en unicast.

Dialogue client DHCP, agent de relai DHCPet serveur DHCP

Mise en oeuvre d'un agent de relais

Présentation

Description

Sous Linux il existe un agent relais DHCP (dhcrelay). Ce produit de l'ISC (Internet Software Consortium) permet de router des requêtes BOOTP et DHCP provenant de clients d'un réseau sur lequel il n'y a pas de serveur DHCP vers un autre segment sur lequel un serveur pourra répondre.

Mode de fonctionnement

L'agent relais DHCP écoute les requêtes et les réponses BOOTP et DHCP. Quand une requête arrive, l'agent route la requête vers la liste de serveurs spécifiée sur la ligne de commande. Quand une réponse arrive d'un serveur, l'agent transmet la réponse (broadcast ou unicast cela dépend de la réponse) sur le segment d'où provenait la requête (broadcast) ou directement vers le client (unicast).

Installation et configuration

Installer dhcp

$ yum install dhcp

Utilisation de dhcrelay en ligne de commande

 dhcrelay [-p port] [-d] [-q] [-i if0 [... -i ifN ] ]server0 [ ...serverN ]
 

L'agent

La commande “dpkg-reconfigure ” peut également permettre de configurer l'agent et indiquer à quel serveur l'agent doit passer les requêtes:

dhcrelay 192.168.1.1 -d

Configuration du daemon dhcrelay

Pour exécuter dhcrelay en mode démon copier puis modifier le fichier dhcrelay.service en tant qu'utilisateur root:

$ cp /lib/systemd/system/dhcrelay.service /etc/systemd/system/
$ vi /etc/systemd/system/dhcrelay.service

Modifier l'option ExecStart dans la section [Service] et ajouter une ou plusieurs adresses IPv4 du serveur à la fin de la ligne, par exemple:

ExecStart=/usr/sbin/dhcrelay -d --no-pid 192.168.1.1

On peut également spécifier des interfaces sur lesquelles l'agent relais DHCP écoute les requêtes DHCP, à l'option ExecStart avec l'argument -i (sinon, il écoutera toutes les interfaces), par exemple:

ExecStart=/usr/sbin/dhcrelay -d --no-pid 192.168.1.1 -i em1

Pour activer les modifications apportées, redémarrer le service:

$ systemctl --système démon-recharger
$ systemctl restart dhcrelay