Dynamic Host Configuration Protocol

1 Position du problème

Lorsque vous connectez une machine à un réseau Ethernet TCP/IP, cette machine, pour fonctionner correctement, dois disposer de :

- une adresse IP unique dans votre réseau et appartenant au même réseau

logique que toutes les autres machines du réseau en question

- un masque de sous réseau, le même pour tous les hôtes du réseau

- une adresse de DNS, pour pouvoir résoudre les noms des hôtes, surtout si votre réseau est	connecté au Net

- une adresse de la passerelle qui vous permet justement d'accéder au Net.

Pour configurer vos hôtes locaux, vous avez deux possibilités :

- Vous passez de machine en machine, avec un petit carnet et vous configurez à chaque fois	tous les paramètres de la pile IP à la main, en n'oubliant pas de tout marquer dans votre	carnet. Ce n'est pas le plus compliqué, ce qui est d'avantage gênant, c'est de ne jamais	oublier de noter toutes les modifications que vous pourriez être amené à faire par la suite.

- Vous installez un serveur DHCP sur votre réseau et vous dites à vos clients d'aller chercher	toute leur configuration IP sur ce serveur. En gros, il remplacera votre carnet, sera	naturellement à jour et vous évitera des déplacements.

Comme vous le voyez, le luxe de la seconde solution est tout de même tentant, au point que nous allons le mettre en oeuvre.

2 Que disent les livres ?

Les choses se passent avec le peu de moyens dont vous disposez :

- Votre "MAC Address" que vous ne perdez jamais, puisqu'elle est écrite "en dur" dans votre	interface Ethernet.

- Le "Broadcast" qui permet d'envoyer des trames à toutes les machines du réseau physique.

Le dialogue est décrit de la manière suivante :

1 Lorsque le client DHCP démarre, il n'a aucune connaissance du réseau, du moins, en principe. Il envoie donc une trame "DHCPDISCOVER", destinée à trouver un serveur DHCP. Cette trame est un "broadcast", donc envoyé à l'adresse 255.255.255.255. N'ayant pas encore d'adresse IP, il adopte provisoirement l'adresse 0.0.0.0. Comme ce n'est pas avec cette adresse que le DHCP va l'identifier, il fournit aussi sa "MAC Address".

2 Le, ou les serveurs DHCP du réseau qui vont recevoir cette trame vont se sentir concernés et répondre par un "DHCPOFFER". Cette trame, elle aussi en "broadcast" car il n'est pas encore possible d'atteindre le client nommément (il n'a pas encore d'adresse IP valide), contient une proposition de bail et la "MAC Address" du client, avec également l'adresse IP du serveur. Tous les DHCP répondent et le client normalement accepte la première réponse venue.

3 Le client répond alors par un DHCPREQUEST à tous les serveurs (donc toujours en "Broadcast") pour indiquer quelle offre il accepte.

4 Le serveur DHCP Concerné répond définitivement par un DHCPACK qui constitue une confirmation du bail. L'adresse du client est alors marquée comme utilisée et ne sera plus proposée à un autre client pour toute la durée du bail.

3 Détails sur le bail

Dans le bail, il y a non seulement une adresse IP pour le client, avec une durée de validité, mais également d'autres informations de configuration comme :

- L'adresse d'un ou de plusieurs DNS (Résolution de noms)

- L'adresse de la passerelle par défaut (pour sortir du réseau où le DHCP vous a installé).

- L'adresse du serveur DHCP (nous allons voir pourquoi).

Cette liste est loin d'être complête, il existe en effet une grande quantité d'options qui peuvent êtres transmises. Lorsque le bail arrive à environ la moitié de son temps de vie, le client va essayer de renouveler ce bail, cette fois-ci en s'adressant directement au serveur qui le lui a attribué. Il n'y aura alors qu'un DHCPREQUEST et un DHCPACK. Si, au bout des 7/8e de la durée de vie du bail en cours, ce dernier n'a pu être renouvelé, le client essayera d'obtenir un nouveau bail auprès d'un DHCP quelconque qui voudra bien lui répondre. Il pourra alors se faire que le client change d'adresse IP en cours de session. Normalement, cette situation ne devrait pas se produire, sauf en cas de panne du DHCP.

Dans les manuels, il est recommandé de ne pas créer de baux inutilement courts, ceci entraînant une augmentation significative du broadcast sur le réseau. Le compromis est à trouver entre la durée moyenne de connexion des utilisateurs, la réserve d'adresses IP du serveur, le nombre d'abonnés...

En règle générale, un FAI dispose toujours de moins d'adresses que d'abonnés, parce que tous les abonnés ne se connectent pas en même temps. Une mauvaise analyse des statistiques peut alors entraîner de graves problèmes aux heures de pointe.

4 Question subsidiaire.

Doit-il donc y avoir nécessairement un serveur DHCP par sous-réseau et doit-il disposer d'une adresse IP dans la même classe que celle qui constitue sa plage d'adresses ?

Non, pas nécessairement. Votre réseau physique peut être formé de plusieurs sous réseaux logiques, avec des routeurs entre chaque sous réseau et le tout peut fonctionner avec un seul serveur DHCP... Mais alors, comment la négociation peut-elle se faire, puisque, normalement, un "broadcast" n'est pas retransmis par les routeurs ?

Les requêtes DHCP doivent pouvoir atteindre le serveur qui est situé sur un autre réseau logique, elles doivent donc passer les routeurs, ce qui n'est théoriquement pas possible. Il est alors nécessaire d'installer sur un ou plusieurs routeurs un agent de relais qui va intercepter les requêtes en broadcast et les transmettre à un serveur DHCP connu de cet agent.

C'est l'agent de relais situé sur la passerelle qui va faire l'intermédiaire et le client réussira tout de même à obtenir une adresse, donnée par un DHCP situé sur un autre réseau, mais relayé par l'agent de relais. Le serveur DHCP sera même capable d'envoyer des paramètres différents, suivant le sous réseau du client...

5 Topologie du réseau.

Nous allons prendre une configuration simple, avec une machine Linux qui va cumuler plusieurs fonctions	- passerelle entre le réseau local et l'Internet

- firewall

- serveur DHCP

- serveur DNS

Les clients peuvent être de tout type : Windows, Mac OS, Linux...

Nous allons donc installer sur la passerelle un serveur DHCP. Le DNS est tout à fait optionnel, mais ce serait bien qu'il y soit, il peut même y être déjà, ça n'est absolument pas gênant. S'il n'y est pas encore, vous pourrez le rajouter par la suite. Les fonctions de passerelle et de firewall ne sont pas fondamentales, nous pourrions nous contenter d'un serveur Linux, non connecté au Net.

6 Installation du serveur DHCP

Sous Debian, ça se fait très simplement en installant les paquetages dhcp3-common et dhcp3-server. Il y a un seul fichier de configuration : /etc/dhcp3/dhcpd.conf, que vous pourrez configurer avec un éditeur de texte, où à travers l'interface Webmin.

7 Configuration du serveur

Comme nous l'avons vu plus haut, un serveur DHCP, en plus de fournir la configuration IP "de base" (adresse et masque), peut aussi transmettre un nombre plus ou moins grand de paramètres supplémentaires. Nous aurons donc au moins deux choses à configurer :

- La réserve d'adresses dont le serveur pourra disposer pour les attribuer aux clients

- les paramètres optionnels à leur communiquer dans la foulée, comme l'adresse d'un DNS et	de la passerelle par défaut. Dans le cas d'un réseau domestique; ce sera suffisant, mais il y a	beaucoup d'autres options, plus ou moins spécifiques aux divers systèmes d'exploitation.

Nous avons vu qu'un seul serveur DHCP pouvait être utilisé pour plusieurs réseaux logiques interconnectés, pourvu que les interconnexions disposent d'un agent de relais DHCP. Dans un tel cas, le serveur DHCP devra disposer d'au moins une étendue d'adresses IP par réseau logique dont il aura la charge.

En ce qui concerne les options, nous disposons d'une architecture hiérarchique :

- Nous pouvons définir des options globales, qui seront les mêmes pour tous les clients du	DHCP, tous sous réseaux confondus

- nous pouvons définir également des options propres à chaque sous réseau, celles-ci	écrasant les options globales, en cas de conflit

Si l'on veut aller encore plus loin, sachez que DHCPd peut créer des groupes distincts de machines dans un même sous réseau et même gérer des clients de façon individuelle.

8 Une configuration basique.

Nous avons un seul réseau, avec des IP choisies dans la classe C privée 192.168.0.0, donc avec un masque 255.255.255.0

Nous avons donc une passerelle par défaut unique pour tous nos hôtes du réseau, dans l'exemple, ce sera 192.168.0.253

Nous disposons enfin d'un DNS, également unique pour tous les hôtes du réseau, il est sur la même machine, à savoir 192.168.0.253. Le "domaine" que nous avons construit sur notre réseau local s'appelle greta.fr. Il n'a aucune réalité sur le Net, mais ça n'a pas d'importance, puisque c'est un domaine qui ne doit pas être visible depuis le Net

Sur la totalité de la classe C disponible, nous allons réserver les adresses comprises entre 192.168.0.1 et 192.168.0.9 pour les clients du réseau. Cette plage constituera la réserve d'adresses que le DHCP pourra fournir aux clients.

Un dernier point important, c'est la durée de vie du bail que le DHCP va attribuer aux clients. L'un des avantages de DHCP, c'est de pouvoir attribuer une configuration IP qui ne sera valide que dans un laps de temps donné, à charge pour le client de demander le renouvellement de ce bail avant chaque expiration. Ce temps de vie pourra aller de quelques minutes à l'infini, suivant les besoins. Sur un réseau qui évolue peu, le bail peut être sans problèmes de quelques jours, à quelques semaines, voire plusieurs mois. Sur un réseau où les hôtes vont et viennent, il sera plus sage de ne laisser vivre les configurations que quelques heures. Bien entendu, plus le bail est court, plus le trafic généré par DHCP devient important et plus la charge du serveur augmente. Dans l'exemple, nous utiliserons une heure (3600 secondes).

9 Note importante

Le daemon DHCPd écoute par défaut sur toutes les interfaces réseau actives sur le serveur. Ce n'est pas forcément souhaitable, c'est même assez souvent ennuyeux. Fort heureusement, ce comportement par défaut peut être modifié, mais pas dans le fichier de configuration. Il faut utiliser un paramètre dans la ligne de commande qui va démarrer DHCPd. Dans le cas de Debian, il faut éditer le script /etc/init.d/dhcpd3-server. Il est bien documenté et vous trouverez aisément la variable interfaces qu'il faut initialiser avec le nom de la ou des interfaces qui doivent êtres écoutées.

# Les trois lignes qui suivent doivent être présentes

# même si pour le moment, elles ne nous servent pas.

# Elles concernent la mise à jour dynamique du DNS

# que nous verrons plus tard

ddns-domainname "greta.fr";

ddns-update-style none;

ddns-updates off;

# tous les clients sont acceptés, même si l'on ne connaît pas

# leur adresse MAC.

allow unknown-clients;

# Durée de vie du bail

max-lease-time 3600;

default-lease-time 3600;

# Les options que l'on va donner aux clients

option domain-name-servers 192.168.0.253;

option domain-name "greta.fr";

option routers 192.168.0.253;

# La définition du seul "sous-réseau" dont nous disposons

# Avec la plage d'IP à distribuer.

subnet 192.168.0.0 netmask 255.255.255.0 {

range 192.168.0.1 192.168.0.9;

}

Cette configuration simplissime va suffire à nos besoins, du moins dans un premier temps. Dans ce fichier, il y a des directives, qui sont obligatoires :

- les directives ddns-xxx : elles doivent cependant figurer dans la configuration pour que le	démon dhcpd puisse démarrer

- allow unknown-clients : c'est en principe la configuration par défaut, mais autant le spécifier.	Ca veut dire que le DHCP acceptera tous les clients qui feront une requête DHCP. Dans le	cas contraire, le serveur ne répondrait qu'aux machines dont il connaît l'adresse MAC

Et des options qui seront dans la pratique, des paramètres de configuration optionnels. Ici :

- domain-name-servers : qui attribuera aux hôtes une adresse de DNS. Dans l'exemple, notre	DNS à nous. Si nous n'en avons pas, il faudra ici mettre l'IP du DNS de notre fournisseur	d'accès. Eventuellement, nous pouvons spécifier plusieurs DNS

- domain-name : est vraiment optionnel, ça permettra aux clients de savoir dans quel domaine	ils sont enregistrés

- routers : c'est la passerelle par défaut. Il pourrait y avoir plusieurs routeurs, mais tous les	systèmes ne savent pas gérer de façon efficace une information contenant plusieurs	passerelles.

Toutes les options qui figurent avant le paragraphe "subnet 192.168.0.0 netmask 255.255.255.0" sont des options globales, il n'y a ici aucune option d'étendue (de sous-réseau) de définie.

Cette configuration doit nous permettre de fonctionner dans notre contexte. Il nous suffit de lancer ou de relancer le serveur : /etc/init.d/dhcpd3-server restart

10 Le coté client

Windows 95/98

Par le panneau de configuration, icône réseau, cliquez sur TCP/IP. L'adresse IP doit être configurée dynamiquement, c'est d'ailleurs le choix par défaut à l'installation.

Windows NT4/2000/XP

La configuration se fait dans le panneau de configuration, icône réseau, onglet protocoles, puis propriétés de TCP/IP. Là, vous avez indiqué que la carte doit recevoir une adresse IP dynamiquement. Tapez dans une console, la commande "ipconfig"

La commande "ipconfig" permet également :

- de résilier le bail: "ipconfig /release"

- de renouveler le bail: "ipconfig /renew"

C'est cette commande qui est à utiliser pour essayer de récupérer une adresse IP lorsque vous avez des problèmes.

Notes

Les rubriques "Bail obtenu" et "Expiration du bail" contiennent des valeurs calculées par votre machine. Le serveur DHCP ne donne que la durée.

La commande en mode graphique "winipcfg" n'existe pas nativement sous Windows NT mais vous pouvez la récupérer dans le kit de ressources techniques.

Linux

DHCLIENT est écrit par ISC, les auteurs de BIND et de DHCPD. Ce client cumule à mon sens tous les avantages :

- un fichier de configuration /etc/dhclient.conf, sans doute encore plus performant que celui	de PUMP.

- des scripts optionnels exécutés automatiquement avant l'obtention du bail et après	l'obtention du bail, avec à disposition des variables contenant toutes les informations	recueillies par le client auprès du serveur. Très pratique par exemple pour vous envoyer par	mail l'adresse courante de votre machine si celle-ci change.

- il tient un historique des baux obtenus dans le fichier /var/lib/dhcp/dhclient.leases

- son seul inconvénient est sa richesse. Il n'est pas le plus facile à mettre en oeuvre.

Dhcp et Dns	6

2003-03-03T14:13:26