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.
Le service est lancé par un script normalisé dans /etc/init.d. Son nom varie selon les distributions et implémentations.
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.
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. |
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. |
serveur_dns | Serveur DNS utilisé par les clients. Si plusieurs serveurs doivent être proposés, les valeurs sont séparées par des virgules. |
domaine_nis | 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. |
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. |
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. |
adresse_mac | L’adresse MAC de l’hôte à configurer. |
adresse_ip | Adresse IP de l’hôte en cours de configuration. |
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.
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; }
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 é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.
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.
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. |