The manual Page
English version
accueil | glossaire | downloads | liens ]
 

Le serveur DHCP

Où trouver un serveur DHCP ?

L'Internet Software Consortium développe un serveur DHCP pour le monde du logiciel libre. C'est le serveur DHCP le plus répandu, et celui qui "suit" au mieux les RFCs. La dernière version en date est la 3.0 et elle est encore en version beta. Les versions antérieures marchent toutefois très bien, bien que l'ISC sortent beaucoup de patchs. L'une des principales inovations de la version 3 est la possibilité de mettre à jour un DNS dynamiquement en fonction des adresses IP fournies par le serveur DHCP. Pour information, le première draft sur le DNS dynamique date de mars 1996... Plus d'informations sur la mise à jour de DNS par serveurs DHCP.

Microsoft a bien entendu son propre serveur DHCP pour Windows. Seule la version pour Windows 2000 Server permet de mettre à jour les DNS dynamiquement avec DHCP.

le reste de cette section traite de l'installation et de la configuration d'un serveur DHCP sous système Unix. L'exemple pris est celui d'un serveur fourni par l'ISC.

Compilation du serveur

La première étape de la réalisation d'un serveur DHCP est bien entendu sa compilation.

Allez sur le site de l'ISC et téléchargez une version d'un serveur DHCP ou téléchargez simplement ma version qui, bien que vieille, prend en charge la mise a jour de DNS. Copier le fichier dans un répertoire.

Décompressez l'archive : tar xzf dhcp-2.0b1pl6.tar.gz

Déplacez-vous dans le répertoire (commande cd), et tapez : ./configure

Cela va générer les fichiers Makefile correspondant à votre système. Tapez ensuite make pour compiler le serveur et enfin make install pour installer le serveur.

Avant de faire le ./configure, il est hautement recommandé de lire le fichier README qui explique comment installer correctement le serveur. Par exemple, pour ma version, tapez ./configure --with-nsupdate pour compiler le serveur avec le support Dynamic DNS update. make install copiera les fichiers perl dans le répertoire /usr/local/DHCP-DNS-0.52mdn.

Le fichier dhcpd.conf

Ce fichier est la base de la configuration du serveur. Par défaut, il se trouve dans le répertoire /etc/, mais vous pouvez le mettre n'importe où. il est composé de plusieurs sections, chacune limitée par des accolades { et } :

  • des paramètres globaux qui s'appliquent à tout le fichier,
  • shared-network,
  • subnet,
  • host,
  • group.

Chaque section peut contenir des paramètres et des options. Une section group peut contenir des sections host. Au début du fichier, on peut placer des paramètres globaux, comme par exemple la durée des baux, les adresses des DNS...

Chaque ligne du fichier de configuration doit se terminer par un ;, sauf lorsqu'il y a une accolade.

Les commentaires sont possibles en ajoutant un # en début de ligne.

Les paramètres globaux

Ils peuvent être un peu tout et n'importe quoi, pourvu qu'ils aient une signification applicable à toutes les déclarations du fichier. Par exemple, on peut redefinir la durée des baux (max-lease-time et default-lease-time), empêcher le serveur de répondre à des requêtes venant d'hôtes non déclarés (deny unknown-clients;), indiquer le nom de domaine que les machines doivent utiliser, les serveurs DNS... Voir un exemple.

shared-network

Ce paramètre est utilisé pour regrouper plusieurs zones subnet lorsque ceux-ci concerne le même réseau physique. Les paramètres rentrés en début de zone seront utilisés pour le boot des clients provenant des sous-réseaux déclarés, à moins de spécifier pour certains hôtes de ne pas booter (zone host). Son utilisation se rapproche de celle de host ; il faut toutefois l'utiliser systématiquement que le réseau est divisé en différents sous-réseaux administrés par le serveur DHCP.

Syntaxe :

shared-network FOO-BAR {
	filename "boot";

	subnet 192.168.2.0 netmask 255.255.255.224 {
		range 192.168.2.10 192.168.2.30;
	}

	subnet 192.168.2.32 netmask 255.255.255.224 {
		range 192.168.2.40 192.168.2.50;
	}
}

subnet

subnet permet de définir les sous-réseaux sur lesquels le serveur DHCP doit intervenir. C'est la partie la plus importante du fichier de configuration du serveur DHCP ; sans ça, votre serveur ne marchera jamais.

La syntaxe exacte pour cette zone est comme suit :

subnet numero_sous-reseau netmask netmask {
	[ paramètres globaux... ]
	[ déclarations... ]
}

numero_sous-reseau et netmask sont donnés sous format adresse IP pointées. Un exemple se trouve juste au dessus, dans la partie décrivant la zone shared-network.

On peut bien entendu commencer la zone par des paramètres globaux qui ne seront appliqués que pour les ordinateurs de ce sous-réseau. Par exemple, le nom de domaine à appliquer sur ce sous-réseau (option domain-name). Ensuite, on peut ajouter des déclarations d'hôtes. Le paramètre global indispensable est :

range [ dynamic-bootp ] adresse_inferieure [ adresse_superieure ] qui définit la zone d'adresses IP (limitée par adresse_inferieure et adresse_superieure) que le DHCP peut distribuer. Plusieurs range peuvent se suivre. On peut ne pas spécifier d'adresse supérieure, cela revient à ne considérer qu'une seule adresse IP distribuable (celle indiquée, bien sûr). dynamic-bootp doit être mis pour indiquer que le DHCP doit répondre aux requêtes BOOTP en donnant une adresse de cette plage.

host

Ce mot permet de déclarer des machines que le DHCP doit connaître et leur appliquer une configuration particulière. Vous n'êtes pas obligé d'utiliser cette zone, mais elle est par exemple indispensable lorsque vous avez déclaré deny unknown-clients; en début de fichier pour empêcher le serveur DHCP de répondre à des requêtes provenant d'hôtes non déclarés.

host est utilisé de la façon suivante :

host nom {
	paramètres...
}

Un hôte peut être reconnu de deux façons : en utilisant son nom (le nom qui suit le mot clé host) ou en utilisant son adresse hardware (ethernet ou token-ring). Dans ce dernier cas, il faut ajouter une ligne dans la déclaration host : hardware ethernet|token-ring adresse-hardware;. Il est fortement recommandé d'authentifier les ordinateurs à partir de leur adresse hardware plutôt que leur nom, surtout qu'il sont supposés ne pas posséder de véritable nom Internet et que l'on peut redéfinir ce nom.

Un point important : c'est dans une déclaration host que l'on décide d'attribuer une adresse fixe ou non à un hôte. Il suffit alors d'utiliser une ligne comme celle-ci : fixed-address 192.168.2.4;. ATTENTION ! Toute adresse IP attribuée de manière fixe ne doit pas faire partie des zones d'adresses IP déclarées avec range... (zone subnet).

group

Cette zone est simplement utilisée pour rassembler plusieurs déclarations (de toute sorte, y compris d'autres déclarations group) pour leur appliquer des différents paramètres. Exemple :

group {
	option domain-name "bar.org";
	option routers 192.168.1.254;

	host foo1 {
		...
	}

	host foo2 {
		...
	}
}

Les options

Les paramètres qui doivent commencer avec option sont les options définies dans la RFC2132. Il y en a environ 60 définies dans la RFC, mais le serveur peut en gérer jusqu'à 254 (les options 0 et 255 sont réservées). Pour trouver les options possibles et leur nom, vous pouvez consulter le fichier common/tables.c des sources du serveur. ATTENTION ! les noms des options peut varier d'une version de serveur à une autre.

Le format des valeurs des options est donné dans ce même fichier au début ("format codes:"). Les options plus utiles sont les suivantes :

  • subnet-mask (option 1) qui indique le masque de sous-réseau pour la configuration IP,
  • routers (option 3) qui indique les routeurs à utiliser,
  • domain-name-servers (option 6) qui indique les DNS à utiliser. On peut aussi bien donner le nom que l'adresse IP (!)
  • host-name (option 12) qui indique au client quel nom d'hôte il doit prendre,
  • domain-name (option 15) qui fournit au client le nom du domaine arpa dans lequel il se trouve,
  • broadcast-address (option 28) qui indique l'adresse de broadcast en vigueur sur le réseau,
  • dhcp-lease-time (option 51) qui indique au client la durée de validité du bail.

D'autres options (60 en particulier) permettent de personnaliser les messages DHCP circulant sur le réseau.

Exemple de fichier dhcpd.conf

max-lease-time 240;
default-lease-time 240;
deny unknown-clients;
option domain-name "bar.com";
option domain-name-servers foo1.bar.com, foo2.bar.com;

subnet 192.168.1.0 netmask 255.255.255.0 {
	range 192.168.1.2 192.168.1.100;
	range 192.168.1.110 192.168.1.254;
	option broadcast-address 192.168.1.255;
}

group {
	option routers 192.168.2.101;

	host foo3 {
		hardware ethernet 00:c0:c3:11:90:23;
		option host-name pc3;
	}

	host foo4 {
		hardware ethernet 00:c0:c3:cc:0a:8f;
		fixed-address 192.168.1.105;
	}
}

host foo5 {
	hardware ethernet 00:c0:c3:2a:34:f5;
	server-name "bootp.bar.com";
	filename "boot";
}

Explications :

Les cinq premières lignes définissent les paramètres globaux. Les 2 premiers concernent les baux (leases). La ligne suivante dit au serveur de ne pas répondre aux requêtes DHCP venant d'hôtes qu'il ne connaît pas (i.e. non définis dans dhcpd.conf). On définit enfin les paramètres du domaine du réseau (nom de domaine et serveurs DNS).

On définit ensuite le sous-réseau sur lequel le serveur DHCP est censé intervenir : c'est la ligne "subnet...". Dans ce sous-réseau, on dit au serveur de ne fournir des adresses IP que dans les plages d'adresses définies par les lignes "range...". la dernière ligne de la section définit l'adresse de broadcast à utiliser sur le sous-réseau.

On crée ensuite un groupe dont le but est uniquement de fournir des adresses de passerelles à des machines bien déterminées (par leur adresse MAC). On remarque que foo4.bar.com obtiendra une adresse IP fixe.

foo5, enfin, sera une machine qui bootera à travers le réseau, en se connectant au serveur TFTP bootp.bar.com, et booter avec le fichier boot.

Lancer le démon dhcpd

Pour lancer le serveur, il faut d'abord être root sur le système. Il suffit ensuite de taper la commande suivante :

dhcpd -lf fichier_de_leases -cf fichier_de_config adpateur1 adapteur2...

le serveur DHCP va alors se lancer sur les adapteurs réseau adapteur1, adapteur2..., en trouvant sa configuration dans le fichier fichier_de_config et en utilisant le fichier fichier_de_leases pour stocker ses baux. Sans tous les arguments, le serveur DHCP va aller chercher ses fichiers dans des emplacements déterminés au moment de la compilation, dans le fichier includes/dhcpd.h et utiliser eth0 comme interface par défaut. Vous pouvez bien entendu modifier tout ça.

Exécuter le démon à chaque démarrage (pour Linux)

Pour lancer le démon au démarrage de votre machine, il faut d'abord placer un script shell de lancement du démon dans le répertoire /etc/rc.d/init.d/. Ce script va en fait gérer le démarrage et l'arrêt de dhcpd. Ce fichier n'est hélàs par fourni avec les archives de l'ISC. Vous pouvez le créer vous même en vous inspirant des autres scripts figurant dans le répertoire ou simplement reprendre celui-ci. Faites un chmod 755 dhcpd pour mettre les bons droits.

Il faut maintenant dire à GNU/Linux d'exécuter ce script au démarrage. Cela se fait en créant des liens symboliques dans les répertoires /etc/rc.d/rcx.d/ avec x un entier correspondant au runlevel auquel le démon doit être lancé. Faites simplement chkconfig --add dhcpd, cela va créer les liens symboliques pour vous.

Vous pouvez maintenant redémarrer votre ordinateur, le serveur DHCP sera lancé automatiquement.

ATTENTION ! Il se peut que linuxconf prenne le contrôle du serveur DHCP. Si vous voulez garder indéprendante la gestion de votre serveur DHCP (comme c'est par exemple le cas pour moi car j'ai modifié la script /etc/rc.d/init.d/dhcpd), désactivez la prise en charge de dhcpd dans linuxconf.

Documentation

La commande make install a dû installer sur votre système les manuels du serveur. Pour y accéder, tapez simplement :

  • man dhcpd pour connaître le fonctionnement du démon dhcpd,
  • man dhcpd.conf pour savoir comment écrire et configurer le fichier dhcpd.conf,
  • man dhcpd.leases pour avoir des informations sur les baux du serveur DHCP.

Cette doc n'est toutefois ni très simple ni complète. Les options ne sont par exemple pas détaillées. La meilleure documentation est finalement de loin la RFC qui pour une fois a la bonne idée d'être claire et concise.


format imprimable format imprimable



Copyright © 2000-2006 themanualpage.org - Ce site est soumis aux conditions décrites dans les licences GNU GPL et FDL.