User Tools

Site Tools


centos:dhcp

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 :

  • DHCPDISCOVER (pour localiser les serveurs DHCP disponibles)
  • DHCPOFFER (réponse du serveur à un paquet DHCPDISCOVER, qui contient les premiers paramètres)
  • DHCPREQUEST (requête diverse du client pour par exemple prolonger son bail)
  • DHCPACK (réponse du serveur qui contient des paramètres et l'adresse IP du client)
  • DHCPNAK (réponse du serveur pour signaler au client que son bail est échu ou si le client annonce une mauvaise configuration réseau)
  • DHCPDECLINE (le client annonce au serveur que l'adresse est déjà utilisée)
  • DHCPRELEASE (le client libère son adresse IP)
  • DHCPINFORM (le client demande des paramètres locaux, il a déjà son adresse IP)

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 :

  • Le client émet un message de demande de bail IP (DHCPDISCOVER) qui est envoyé sous forme d'une diffusion sur le réseau avec adresse IP source 0.0.0.0 et adresse IP destination 255.255.255.255 et adresse MAC.
  • Les serveurs DHCP répondent en proposant une adresse IP avec une durée de bail et l'adresse IP du serveur DHCP (DHCOFFER)
  • Le client sélectionne la première adresse IP (s'il y a plusieurs serveurs DHCP) reçue et envoie une demande d'utilisation de cette adresse au serveur DHCP (DHCPREQUEST requête en broadcast car DHCPOFFER ne contient par son adresse IP)). Son message envoyé par diffusion comporte l'identification du serveur sélectionné qui est informé que son offre a été retenue ; tous les autres serveurs DHCP retirent leur offre et les adresses proposée redeviennent disponibles.
  • Le serveur DHCP accuse réception de la demande et accorde l'adresse en bail (DHCPACK), les autres serveurs retirent leur proposition.

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 :

  • Une adresse de début (la première qui sera attribuée)
  • Une adresse de fin (la dernière)
  • Une ou plusieurs plages d'adresses à exclure de la location (ceci permet de faire cohabiter un modèle de configuration IP dynamique avec un modèle statique)
  • Un masque de sous-réseau

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.

  • Si le routeur prend en charge la RFC 1542, il peut faire office d'agent de relais DHCP, et ainsi relayer les diffusions de demande d'adresse IP des clients DHCP dans chaque sous-réseau.
  • Si le routeur ne prend pas en charge la RFC 1542, une machine serveur peut être configurée comme agent de relais DHCP, il suffira de lui spécifier l'adresse du serveur DHCP. Les demandes des clients DHCP seront relayées vers le serveur DHCP par l'agent de relais DHCP qui transmettra les offres aux clients.

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

  • Après avoir envoyé une trame de broadcast, le client DHCP dialoque avec l'agent de relai DHCP en unicast.
  • L'agent demande une adresse au serveur DHCP dont il connaît l'adresse (2)
  • Le serveur retourne à l'agent une adresse
  • qui est donnée au client DHCP par l'agent

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

  • écoute sur toutes les interfaces à moins que certaines soient spécifiées avec l'option -i,
  • utilise, comme le protocole Bootp, le port 67 par défaut (voir /etc/services ) modifiable avec l'option -p,
  • fonctionne en avant-plan avec l'option -d (option debug), sinon en arrière-plan,
  • n'affiche pas les informations de démarrage avec l'option -q,
  • utilise les serveurs spécifiés sur la ligne de commande server0, …serveurN.

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
centos/dhcp.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1