MONTER UN SERVEUR DHCP

LE PROTOCOLE DHCP

DHCP (Dynamic Host Configuration Protocol) est un protocole client-serveur qui a pour objet d’affecter automatiquement une adresse IP ainsi que des paramètres fonctionnels aux hôtes du réseau. Il est exploité par tout équipement qui ne peut pas être configuré de façon statique par un administrateur réseau.

FONCTIONNEMENT

Découverte d’un serveur : les clients DHCP font une requête sur le réseau dans l’espoir de trouver un serveur DHCP (une bouteille à la mer!). Cette requête initiale ne peut être qu’un broadcast : la station à l’origine de la requête ne connaît même pas sa propre adresse, il est donc peu probable qu’elle connaisse par avance l’adresse d’un serveur DHCP. Les paquets envoyés pour la découverte portent le nom normalisé de DHCPDISCOVER.

Première réponse du serveur ; si un serveur DHCP présent sur le réseau entend la requête d’un client, il lui fera une proposition d’adresse et de paramètres réseau. Comme le client auquel le serveur d’adresse répond n’a pas encore d’adresse IP, cette réponse se fera également sous forme de broadcast. Les paquets envoyés pour la réponse du serveur portent le nom normalisé de DHCPOFFER.

Acceptation de l’offre : le client DHCP satisfait de l’offre qui lui a été faite, va l’accepter. À ce stade, cette réponse pourrait être envisagée en unicast puisque le client a déjà une proposition d’adresse IP et connaît celle du serveur. Toutefois, cet échange se fera encore en broadcast. En effet : si un deuxième serveur DHCP est en concurrence avec le premier pour fournir une adresse, ce broadcast d’acceptation envoyé à un autre serveur mais reçu par les deux prétendants fait office de fin de non-recevoir pour le serveur non choisi. Les paquets envoyés pour l’acceptation de l’offre du serveur portent le nom normalisé de DHCPREQUEST.

Accusé de réception du serveur : enfin, le serveur prend acte de l’affectation de l’adresse, et clos la transaction par un accusé de réception. Le serveur profite de ce dernier échange pour annoncer la durée de l’allocation de l’adresse. On appelle cette durée le bail DHCP, et sa durée varie selon la configuration du serveur entre quelques heures et quelques jours. Les paquets envoyés pour accusé de réception portent le nom normalisé de DHCPACK.

LE SERVICE DHCP SUR LES SYSTÈMES LINUX

Le service est lancé par un script normalisé dans /etc/init.d. Son nom varie selon les distributions et implémentations.

CONFIGURATION DU SERVEUR

L’essentiel de la configuration d’un serveur DHCP se trouve dans le fichier :

/etc/.../dhcpd.conf

On y trouvera les directives de fonctionnement, les options générales du serveur, et la déclaration des ressources à allouer. Chacune des lignes de paramètres devra se terminer par un point-virgule.

directives principales de comportement du serveur dans dhcpd.conf

default-lease-time durée;
authoritative;
log-facility cible;

dhcpd.conf : comportement du serveur
default-lease-time “durée”	Indique la durée du bail DHCP en secondes.
authoritative	Facultatif. Un client qui demande le renouvellement d’une adresse hors plage doit y renoncer.
log-facility cible	Gestion des journaux : renvoie les événements vers le “facility” cible du serveur syslog.

Les paramètres transmis aux clients

On peut dans le fichier de configuration définir des paramètres fonctionnels qui seront transmis aux clients. Ces paramètres sont annoncés par la directive option.

Déclaration d’options dans le fichier dhcpd.conf

option domain-name suffixe;
option domain-name-servers serveurs_dns;
option nis-domain domaine_nis;
option nis-servers serveurs-nis;

dhcpd.conf : déclaration d’options
suffixe	Suffixe DNS pour les clients.
serveurdns|Serveur DNS utilisé par les clients. Si plusieurs serveurs doivent être proposés, les valeurs sont séparées par des virgules.| |domainenis	En voie de raréfaction. Domaine NIS pour les clients.
serveurs_nis	En voie de raréfaction. Serveur NIS utilisé par les clients. Si plusieurs serveurs doivent être proposés, les valeurs sont séparées par des virgules.

déclaration de plages d’adresses

Les adresses à allouer sont définies dans une ou plusieurs sections subnet du fichier dhcpd.conf. Au sein de ces sections, on trouvera en plus des plages d’adresses les options DHCP qui seront envoyées avec les propositions d’adresses. Les options les plus courantes sont la passerelle par défaut à utiliser avec l’adresse proposée, ainsi que les serveurs DNS à utiliser. Les options peuvent être déclarées en dehors ou au sein des sections subnet, elles concerneront alors selon le cas l’ensemble des adresses allouées ou seulement celles du sous-réseau. En cas de conflit entre options (la même option est déclarée dans la configuration générale et dans la section subnet), c’est l’option du subnet qui prévaut.

Déclaration de subnet dans le fichier dhcpd.conf

subnet reseau netmask masque {
range debut fin;
option routers routeur;
}

dhcpd.conf : déclaration de subnet
reseau	L’adresse de réseau dans lequel se trouveront les adresses à attribuer.
masque	Masque associé au réseau géré.
debut	Définition de la plage des adresses qui seront proposées aux clients. La première adresse de la plage.
fin	Définition de la plage des adresses qui seront proposées aux clients. La dernière adresse de la plage.
routeur	La passerelle par défaut associée aux adresses proposées.

paramètres spécifiques à une machine

Il est possible d’affecter spécifiquement à une machine des options particulières. Cette machine fera alors l’objet d’une déclaration particulière avec la directive host, un peu comme on configurerait un subnet à une seule adresse.

On pourra utiliser cette méthode pour affecter spécifiquement à un hôte du réseau une adresse IP fixe pour une machine qui, bien que client DHCP, devrait systématiquement utiliser la même adresse. On peut par exemple imaginer une imprimante réseau dont l’interface de configuration peu confortable encourage à la laisser en configuration dynamique, et pour laquelle la réservation dhcp garantirait l’attribution de l’adresse voulue.

Réservation d’adresse dans dhcpd.conf

host machine {
hardware ethernet adresse_mac;
fixed-address adresse_ip;
option routers routeur;
option domain-name suffixe;
option domain-name-servers serveur_dns;
}

dhcpd.conf : configuration d’hôte
machine	Déclaration de paramètres pour un hôte. Si l’identification par adresse mac est utilisée, le nom machine est sans importance.
adressemac|L’adresse MAC de l’hôte à configurer.| |adresseip	Adresse IP de l’hôte en cours de configuration.

serveur à plusieurs interfaces

Les serveurs DHCP possédant plusieurs interfaces réseau doivent restreindre leurs communications aux seules cartes compétentes. Par exemple, si un serveur possède une interface configurée en 10.11.12.1 et une autre en 192.168.200.1, et qu’il propose des adresses dans le subnet 192.168.200.0, il est évident qu’il ne doit écouter les requêtes et proposer des adresses que sur l’interface correspondante (192.168.200.1).

Pour que le serveur écoute sur certaines interfaces, il faut spécifier ces interfaces dans /etc/default/dhcp3-server en rajoutant la ligne :

INTERFACES="eth0 eth1"

Dans ce cas l'écoute se fait sur eth0 et eth1.

visualisation des baux dhcp

Le serveur DHCP conserve une information sur chacun des baux alloués dans un fichier dhcpd.leases se trouvant dans le répertoire /var/lib/dhcp/.

Ce fichier est accessible à la consultation mais ne devrait pas être modifié.

Exemple de fichier dhcpd.leases

Notez les horaires de renouvellement et d’expiration du bail DHCP.

lease {
interface "eth0";
fixed-address 192.168.1.51;
option subnet-mask 255.255.255.0;
option routers 192.168.1.254;
option dhcp-lease-time 864000;
option dhcp-message-type 5;
option domain-name-servers 194.2.0.20,194.2.0.50;
option dhcp-server-identifier 192.168.1.1;
renew 6 2010/07/10 14:55:34;
rebind 3 2010/07/14 14:33:58;
expire 4 2010/07/15 20:33:58;
}

CONFIGURATION DES CLIENTS

La commande dhclient permet aux stations clientes d’effectuer les requêtes DHCP.

Si la commande n’est pas lancée manuellement par un administrateur, elle est appelée par les scripts d’initialisation réseau.

Si la station client ne possède pas d’adresse IP, elle effectue toutes les étapes de la procédure de requête DHCP. Dans le cas contraire, elle demande au serveur un renouvellement de bail. dhclient peut également être utilisée pour libérer une adresse affectée précédemment par un serveur DHCP.

Exemple d’utilisation de dhclient pour requérir une adresse

Notez les étapes de l’affectation d’adresse DHCPDISCOVER, DHCPOFFER, DHCPREQUEST et DHCPACK.

root@serveur# dhclient eth1
Internet Systems Consortium DHCP Client V3.1.3
Copyright 2004-2009 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/eth1/00:22:68:98:8a:da
Sending on LPF/eth1/00:22:68:98:8a:da
Sending on Socket/fallback
DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 8
DHCPOFFER of 172.18.142.243 from 172.18.142.225
DHCPREQUEST of 172.18.142.243 on eth1 to 255.255.255.255 port 67
DHCPACK of 172.18.142.243 from 172.18.142.225
bound to 172.18.142.243 -- renewal in 49 seconds.
root@serveur#

Exemple de libération d’adresse IP

On constate un paquet DHCPRELEASE envoyé à l’exécution de la commande.

root@serveur# dhclient -r eth1
There is already a pid file /var/run/dhclient.pid with pid 2735
killed old client process, removed PID file
Internet Systems Consortium DHCP Client V3.1.3
Copyright 2004-2009 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/eth1/00:22:68:98:8a:da
Sending on LPF/eth1/00:22:68:98:8a:da
Sending on Socket/fallback
DHCPRELEASE on eth1 to 172.18.142.225 port 67
root@serveur#

LES AGENTS RELAIS DHCP

Les échanges DHCP se faisant par broadcast et les broadcasts ne passant pas les routeurs, les requêtes DHCP comme les réponses des serveurs n’ont aucune action en dehors du réseau local. La solution simple consiste évidemment à mettre un serveur DHCP sur chacun des segments où ils sont nécessaires. Toutefois, si on ne souhaite utiliser qu’un seul serveur pour plusieurs réseaux, il existe une solution : les agents relais DHCP.

principe de fonctionnement

L’intégralité de la configuration DHCP, comprenant la déclaration de tous les subnets et toutes les plages d’adresses, locaux ou distant, se trouvera sur un serveur DHCP unique. Une partie des clients en revanche se trouvera sur un segment ethernet différent. Pour que les communications puissent s’établir entre les clients distants et le serveur, l’agent relais DHCP qui se trouvera lui aussi sur le segment devra traiter les broadcasts reçus, et relayer la requête sous forme d’unicast vers le serveur DHCP. Les unicasts pouvant passer les routeurs, l’information arrivera à bon port. Le serveur DHCP répondra alors sous forme d’unicast à destination de l’agent relais, et l’agent relais enverra un broadcast qui sera récupéré par la station cliente. Le client DHCP n’a pas conscience de traiter avec un agent relais, mais pense qu’un serveur DHCP réel est présent sur son segment.

configuration de l’agent de relais

L’agent de relais est lancé de façon interactive par la commande dhcrelay. Sur la plupart des distributions, cette commande est appelée depuis un script de lancement de service, et ses paramètres de fonctionnement sont lus dans un fichier de configuration.

Syntaxe de la commande dhcrelay

dhcrelay -i interface adresse_serveur

dhcrelay : options et paramètres
-i interface	Facultatif. Spécifie l’interface par laquelle l’agent de relais sera à l’écoute du serveur DHCP et des requêtes des clients.
adresse_serveur	L’adresse IP du serveur auquel transmettre les requêtes DHCP.