Le DHCP

Le DHCP

Il existe donc deux méthodes pour obtenir une adresse IP. Soit c'est vous qui la configurez (méthode manuelle), soit c'est un serveur qui vous la donne (méthode dynamique).

La méthode manuelle pose quelques problèmes de prime abord. En effet, vous avez vu que pour qu'une machine puisse communiquer avec ses voisines, son adresse IP devait se trouver dans le même réseau que les autres machines. Pour sortir du réseau local, il faut que notre machine connaisse l'adresse de la passerelle. Cela fait déjà quelques informations dont il faut avoir connaissance quand vous branchez votre ordinateur à un réseau local.

Autre problème, même si vous avez ces informations, comment vous assurez-vous que l'adresse IP que vous choisissez n'est pas déjà utilisée par une autre machine sur le réseau ?


On se rend donc bien compte qu'il serait bien d'avoir un mécanisme rapide et fiable pour adresser les machines d'un réseau. C'est là qu'entre en jeu le protocole DHCP.

Un protocole pour distribuer des adresses IP

La première fonction d'un serveur DHCP (Dynamic Host Configuration Protocol) est de fournir des adresses IP (associées à un masque, bien évidemment aux machines en faisant la demande.
Si vous avez configuré votre carte réseau pour récupérer son adresse IP automatiquement, votre machine va chercher à contacter un serveur DHCP susceptible d'être présent sur votre réseau local.


Mais on vient de dire qu'on avait besoin d'une adresse IP pour contacter les autres machines du LAN et ici nous cherchons à dialoguer avec une autre machine. Il nous faut donc une adresse IP, non ? Est-ce qu'on ne se mord pas la queue ?


Oui c'est vrai, on ne peut pas envoyer de paquets IP, étant donné que nous n'avons pas d'adresse IP. Par contre, nous avons une adresse MAC qui est liée à notre carte Ethernet. On peut donc envoyer des trames Ethernet.

Néanmoins, s'il y a un serveur DHCP sur le réseau, nous n'avons aucun moyen de connaître son adresse MAC.

Comment allons-nous pouvoir joindre le serveur DHCP ?

Nous allons utiliser l'adresse de broadcast !

La trame permettant de trouver un serveur DHCP est une trame "DHCPDISCOVER", comme c'est un broadcast, elle est envoyée à l'adresse MAC ff:ff:ff:ff:ff:ff.
Comme la trame est envoyée en broadcast, le serveur DHCP doit obligatoirement se trouver dans le même réseau que la machine. Comme vous le savez, les routeurs (qui délimitent les réseaux) séparent les domaines de broadcast et ne relaient pas. Néanmoins, certains routeurs disposent de méthodes pour relayer ces trames DHCPDISCOVER.

Une fois que notre serveur DHCP reçoit le DHCPDISCOVER, il va renvoyer une proposition, c'est un DHCPOFFER. Il va proposer une adresse IP, un masque ainsi qu'une passerelle par défaut et parfois un serveur DNS.





Le client (votre machine) répond par un DHCPREQUEST. Celui-ci est aussi envoyé en broadcast et sert à prévenir quelle offre est acceptée. Le serveur DHCP dont l'offre a été acceptée valide la demande et envoie un DHCPACK qui valide l'allocation du bail.









Toutefois, lors d'un renouvellement, notre machine ne va pas refaire toute la procédure en commençant par un DHCPDISCOVER. On repart directement du DHCPREQUEST. Les serveurs DHCP conservent en mémoire les adresses qu'ils ont distribuées, associées aux adresses MAC. Ainsi, vous constatez que vous conservez parfois très longtemps la même adresse IP, même si votre bail a sûrement été renouvelé plusieurs fois.


Configuration de DHCP sur debian

Installation et configuration.

Sous Debian, le serveur dhcp le plus couramment utilisé est isc-dhcp-server, mais il en existe plusieurs comme dhcp3-server ou le célèbre dhcpd.

Nous allons commencer par l'installer.



apt-get install isc-dhcp-server

Ce serveur est géré par deux fichiers de configuration :


·         /etc/default/isc-dhcp-server
·         /etc/dhcp/dhcpd.conf

Dans le premier, on ne fera que déclarer sur quelle interface écoutera notre serveur. La plupart du temps, il s'agit de votre interface principale qui s'appelle eth0.

On édite ce fichier et, si ce n'est pas déjà le cas, on rajoute :

INTERFACES="eth0"

Vous pouvez faire écouter votre serveur sur plusieurs interfaces, il suffit juste de les séparer par un espace : INTERFACES="eth0 eth1 eth3"

Mais attention, dans ce cas il faudra bien spécifier quelles adresses distribuer sur chacun des réseaux.

Ensuite, le reste de la configuration se passe dans /etc/dhcp/dhcpd.conf. Ce fichier doit déjà contenir un exemple de configuration. Vous pouvez faire une copie de ce fichier et repartir sur un fichier vierge ou bien continuer avec celui-ci. Si vous l'éditez, notez que l'ordre des lignes de configuration n'a pas d'importance.
On va partir d'un fichier vierge de notre côté.

Voici ce qu'il va contenir :










Notre fichier de configuration est maintenant prêt ! Nous pouvons essayer de lancer le service.

ATTENTION, si jamais vous lancez un serveur DHCP sur un réseau qui possède déjà un serveur DHCP, ça risque de poser un problème, car les deux serveurs vont répondre aux requêtes en broadcast et, potentiellement, attribuer des adresses identiques ou inadaptées.

Test de la solution


Dans un premier temps, nous allons vérifier que le serveur DHCP est bien en écoute :




netstat -anup |grep dhcp
udp        0      0 0.0.0.0:67              0.0.0.0:*                           956/dhcpd

Le serveur est bien en écoute sur le port UDP 67.

Nous allons essayer de faire une demande d'adresse IP et voir ce qui va se passer au niveau du réseau. 

Utilisation de tcpdump  (vous pouvez utiliser wireshark)

Sur le serveur (terminal 1)

#apt-get install tcpdump

# tcpdump -i eth0

Sur le client   (terminal 2)

nous allons forcer une demande DHCP avec la commande dhclient :


# dhclient eth0

Enfin, nous pouvons retourner sur le terminal sur lequel tcpdump est lancé.

Il devrait y avoir quelques paquets reçus, dont ceux qui concernent notre requête DHCP :

17:39:43.007862 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 08:00:27:4e:b7:b1, length 300
17:39:43.032031 IP 10.0.2.2.bootps > 10.0.2.20.bootpc: BOOTP/DHCP, Reply, length 548



On voit ici une requête DHCP request, suivi du DHCP ACK (reply ici). Nous n'avons pas de DHCP DISCOVER ou OFFER, car notre machine a déjà reçu son adresse par DHCP et ne fait donc que les deux dernières étapes de la requête.


D'ailleurs il est possible que vous ayez deux réponses à votre requête : celle de votre serveur local et celle de votre box si elle fait aussi office de serveur DHCP.