Mettre en place un serveur DHCP

Ce petit article décrit la configuration minimale nécessaire pour mettre en place un serveur DHCP. Pour rappel un DHCP permet d'attribuer dynamiquement des adresses ip des ordinateurs ou toute machine se connectant au réseau et envoyant des demandes (imprimantes, ordinateurs,... ) en tout genre.

Un DHCP peut être très pratique sur des réseaux de toutes tailles. Mais cela peut être néanmoins dangereux, surtout avec les options routers, dns : un individu se connectant pourra alors sans problème profiter de votre connection internet si vous avez pas fait des règles de routagei assez sécurisées. Pour un petit réseau où il y a souvent des ordinateurs portables qui viennent s'y greffer, cela peut faciliter la vie de leurs utilisateurs.

Prérequis

Pour ce qui est des connaissances : un minimum de connaissances systèmes et réseaux sont nécessaires, sans être indispensables. Si vous pouviez comprendre ce que vous faites serait un plus.

Pour ce qui est des logiciels : dhcpd évidement, disponible en général via le gestionnaire de package de votre unix flavor libre préféré.

Base de fichier

Le fichier de configuration du serveur DHCP est le fichier dhcp.conf, généralement situé à la racine
du répertoire /etc. Mais il arrive qu'il soit dans un sous-répertoire dhcp/ de celui ci.
Pour commencer il faut spécifier au serveur DHCP un réseau sur lequel il va opérer pour cela il suffit d'utiliser subnet :

subnet <reseau> netmask <masque-de-sous-reseau> {}

<reseau> est un réseau ip du type 192.168.1.0 ou
192.168.0.0 et <masque-de-sous-reseau> un masque de sous réseau de la
forme : 255.255.255.0 ou 255.255.0.0. De cette façon vous avez défini le réseau
sur lequel opérera votre serveur DHCP et par là même l'interface réseau concernée.

Prenons mon cas en exemple : mon réseau est du type : 192.168.1.0 et mon masque du type : 255.255.255.0.
Ce qui nous donne :

subnet 192.168.1.0 netmask 255.255.255.0 {}

Configuration d'un serveur DHCP : range

La façon la plus simple de faire un dhcp.conf est de définir une plage (en anglais range) d'adresses attribuables par le serveur. Pour celà on va utiliser la commande range dans la commande subnet vue précédement :

subnet 192.168.1.0 netmask 255.255.255.0 {
	range 192.168.1.50 192.168.1.150;
}

Ainsi nous avons défini une plage d'adresse dans laquelle le serveur DHCP va piocher. Évidemment vous êtes limité à 254 adresses (de 1 à 254) maximum.
Enfin tout dépend de la classe de réseau que vous avez.

Vous pouvez spécifier plusieurs plages évidemment, il suffit d'ajouter des lignes range, une pour chaque plage.

Configuration d'un serveur DHCP : host

Une autre façon est de spécifier hôte par hôte l'adresse ip et diverses options. Pour cela on utilise la commande host.

subnet 192.168.1.0 netmask 255.255.255.0 {
 	range 192.168.1.50 192.168.1.150;
}
 
host <nom> {
 	hardware ethernet <macadress>;
	fixed-address <adresse_ip>;
	option host-name "<nom>";
 }

L'hôte <nom> dont l'adresse mac (de la forme : CC:CC:CC:CC:CC:CC) est <macadress>aura pour adresse ip
<adresse_ip>; et se verra passer le nom <nom> (optionnel). C'est surtout utilisé avec un bootp.

Récuperer l'adresse mac d'une carte réseau

Si elle n'est pas indiquée sur la carte, ou sur la machine, il existe plusieurs manières d'obtenir l'adresse mac d'une carte réseau.
La plus simple, si vous avez un shell sur la machine en question, est de taper ifconfig device
device est le nom de l'interface réseau qui vous interesse.
Une autre méthode consiste à pinguer la machine voulue et ensuite d'utiliser la commande arp <adresse_ip>

ce qui vous donnera l'adresse mac de la machine distante.
Enfin sur certaines machines (notament les sun) l'open boot affiche l'adresse mac au démarrage.

dhcp.conf : options utiles

Vous pouvez rajouter des options particulièrement utiles : temps de libération, adresse du dns, de la passerelle ...

Lease time

Il peut être utile de spécifier le temps (en secondes) au bout duquel le ou les clients devront libérer l'adresse attribuée. Deux
options vous le permette : default-lease-time et max-lease-time. Dans notre exemple cela
pourrait donner :

subnet 192.168.1.0 netmask 255.255.255.0 {
 	range 192.168.1.50 192.168.1.150;
	default-lease-time 600;
	max-lease-time 7200;
}

Domain name, domain name servers

Deux autres options peuvent être très utiles : domain-name et domain-name-servers

grâce à elles vous pouvez spécifier aux clients le domaine et les serveurs de noms de celui ci. Dans notre exemple ça nous donnera :

subnet 192.168.1.0 netmask 255.255.255.0 {
	range 192.168.1.50 192.168.1.150;
	default-lease-time 600;
	max-lease-time 7200;
	option domain-name-servers 192.168.1.42;
	option domain-name "domain.net";
}

Passerelle

Une dernière option peut être très utile : routers qui vous permet de spécifier aux clients l'adresse ip de la passerelle.
Dans notre exemple cela nous donnera :

 subnet 192.168.1.0 netmask 255.255.255.0 {
	range 192.168.1.50 192.168.1.150;
	default-lease-time 600;
	max-lease-time 7200;
	option domain-name-servers 192.168.1.42;
	option domain-name "domain.net";
	option routers 192.168.1.42;
}
 

Conclusion

Avec ça il y a de quoi mettre en place un serveur DHCP minimal et efficace. Pour plus de détails je vous renvoie vers le man de dhcpd et surtout celui, très complet, de dhcpd.conf (5).

N'hésitez pas à nous envoyer (à moi ou au club) pour toute remarque, question, suggestion, sur cette documentation.

Licence

Cet article est publié sous la licence Creative Commons by-sa : http://creativecommons.org/licenses/by-sa/2.0/fr/ . Pour toute question merci de contacter
l'auteur : ange(at)librium.org.