Linux – Mise en place d’un serveur DHCP

Présentation

Le service DHCP (Dynamic Host Configuration Protocol) permet de configurer dynamiquement des hôtes en leurs envoyant des informations sur leur adresse, le routage, les DNS etc. Il n’y a en général qu’un serveur DHCP par segment du réseau, le plus souvent, si un second est présent, il aura comme rôle DHCP relay. Nous ne parlerons pas des DHCP Relay dans cet article.
DHCP est une sur couche de BOOTP (Bootstrap Protocol), quand le client veut contacter le DHCP, c’est BOOTP qui est utilisé pour fournir les informations qui valident sur une durée donnée (un bail)Un client, va donc, au travers de BOOTP, broadcasté le réseau (sur 255.255.255.255 donc) avec une trame contenant, entre autre, sa MAC, le type de request, le port, etc. Il effectue une DHCPDISCOVER, ensuite, une fois que le serveur a detecté un DHCPDISCOVER, il va répondre au client avec un DHCPOFFER (via sa MAC donc, on est toujours en Layer 2, il n’y a pas encore d’IP ici, d’où la limitiation du champ qux subnets) qui contient une première configuration. L’hôte établit cette configuration et renvoi un DHCPREQUEST pour confirmer que la configuration envoyé plus tôt est correcte. Si c’est le cas, le DHCP renvoi un DHCPHACK avec des informations complémentaires (durée de bail par exemple).
Voici une analyse de cette négociation, réalisé sur mon LAN avec Wireshark.

Dans mon cas, pour une question de facilité, mon serveur et mon client sont connecté en mode AdHoc.

Installation

La première chose à faire est d’installer le DHCP, rien de plus simple :
apt-get install dhcpd

DHCPD est donc un daemon. Il se lance via “/etc/init.d/dhcpd start” ou “service dhcpd start” selon la distribution. Il y a deux fichiers importants, /etc/dhcpd.conf et /var/lib/dhcpd/dhcpd.leases. Le premier contient les configurations à envoyer  aux clients, le second, les configurations déjà envoyées.

Configuration.

Nous allons faire deux configurations. Un première avec des hôtes entièrement dynamique, une seconde où l’on voudra que certains hôtes aient toujours la même ip ou une route différente par exemple.
Configuration A – Full Dynamic
Il n’y a qu’un fichier a éditer, /etc/dhcpd.conf
Voici une configuration de “base”, mais pleinement fonctionnelle qui conviendra  aussi  bien à un réseau domestique que d’entreprise. Avant de configurer notre DHCP nous devons connaître certains infos :

Quel est le subnet ?
Quels sont les DNS à utiliser ?
Quel est le nom de domaine transmit au client ?
Le DNS est-il dynamique ?
Quelles sont les durées de bail ?
Quelle est la route par défaut ?
Il y a-t-il des hôtes statiques ?
Quel est le range d’ip disponible a attribué ?

Dans notre exemple :

Quel est le subnet ?  192.168.1.0/24 (255.255.255.0)
Quels sont les DNS à utiliser ?  194.7.1.4
Quel est le nom de domaine transmit au client ?  404Network.local
Le DNS est-il dynamique ?  Non
Quelles sont les durées de bail ?  21600 secondes
Quelle est la route par défaut ?  192.168.1.254
Il y a-t-il des hôtes statiques ? Non
Quel est le range d’ip disponible a attribué ?
De 192.168.1.2 a 192.168.1.253
192.168.1.1 = DHCP, 192.168.1.254 = Gateway

Ce qui nous donne un fichier de ce type :

ddns-update-style none;  #Pas de mise a jours du DNS
option domain-name "404Netowork.local";  #Domaine
option domain-name-servers 194.7.1.4; #Addresse ip des DNS
default-lease-time 21600; #Bail par défaut
max-lease-time 43200; #Bail envoyé lorsque le client demande un bail plus élevé
#Nous allons ici créer une zone ou spool DHCP
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.254; #route par défaut
option subnet-mask 255.255.255.0; #masque de sous réseau
range 192.168.1.2 192.168.1.253; #Range d'ip a attribué
}

Configuration B – Mixed DHCP

Nous voulons maintenant que certaines machines dans notre réseau aient toujours la même ip. Pour ce faire nous allons préciser une ip par Mac Address. Les hôtes, n’étant pas dans la liste, auront une ip dymanique “classique”. Il nous faut juste nous poser une question supplémentaire,  quels sont les hôtes statiques et quels sont leurs ip ?

Quel est le subnet ?  192.168.1.0/24 (255.255.255.0)
Quel sont les DNS à utiliser ?  194.7.1.4
Quel est le nom de domaine transmit au client ?  404Network.local
Le DNS est-il dynamique ?  Non
Quelles sont les durées de bail ?  21600 secondes
Quelle est la route par défaut ?  192.168.1.254
Il y a-t-il des hôtes statiques ? Non
Quel est le range d’ip disponnible a attribué ?
De 192.168.1.100 a 192.168.1.253
192.168.1.254 = Gateway
192.168.1.1 -> 192.168.1.100 = Hôtes statiques

Quels sont les hôtes statiques ?
00:04:ad:41:5c:98 -> Maxime
00:b1:57:c5:75:ad -> Julie

Quelles sont les ips des hôtes statiques ?
Maxime -> 192.168.1.2
Julie -> 192.168.1.3

Le fichier de configuration devient donc :

ddns-update-style none;  #Pas de mise à jour du DNS
option domain-name "404Netowork.local";  #Domaine
option domain-name-servers 194.7.1.4; #Adresse ip des DNS
default-lease-time 21600; #Bail par défaut
max-lease-time 43200; #Bail envoyé lorsque le client demande un bail plus élevé
#Nous allons ici créer une zone ou spool DHCP
subnet 192.168.1.0 netmask 255.255.255.0
{
 option routers 192.168.1.254; #route par defaut
 option subnet-mask 255.255.255.0; #masque de sous réseau
 range 192.168.100 192.168.1.253; #Range d'ip a attribué
 host Maxime
 {
 hardware ethernet 00:04:ad:41:5c:98;
 fixed-address 192.168.1.2;
 }

 host Julie
 {
 hardware ethernet 00:b1:57:c5:75:ad;
 fixed-address 192.168.1.3;
 }
}

Il ne reste plus qu’à relancer le serveur DHCP pour prendre en compte la nouvelle configuration.
Il se peut que le fichier dhcp.leases ne soit pas créé à l’installation, dans ce cas, le serveur DHCP grognera. Il suffit de le créé avec touch, et le serveur fonctionnera correctement.
Pour la sécurisation de serveurs DHCP contre le DHCP Spoofing (en résumé, se faire passer pour un dhcp et donc, envoyer des informations corrompues aux hôtes), j’ai écris un article pour éviter ce type d’attaque que vous pouvez le lire à cette adresse

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s