• 15 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours est en vidéo.

Ce cours existe en livre papier.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Mis à jour le 28/02/2018

Le service DHCP

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Comme nous l'avons vu dans les chapitres précédents, l'adresse IP permet d'identifier une machine sur un réseau. Dans le cas d'un réseau IP (la majorité que vous rencontrerez et ceux qui nous intéressent), cette adresse est indispensable pour pouvoir communiquer avec les autres machines du réseau.

Nous allons nous intéresser ici à la manière dont cette adresse peut être obtenue. On distinguera deux méthodes, une manuelle, pour laquelle vous choisissez vous-mêmes l'adresse IP de votre machine et une dynamique où c'est un serveur qui vous fournit cette adresse. Ce serveur s'appelle un serveur DHCP et nous verrons qu'il a d'autres utilités que la simple distribution d'adresses IP.

Principe du DHCP

Le DHCP expliqué

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 :p ) 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 ?

Tout ceci devrait vous rappeler quelque chose, non ? Le problème est le même que pour le protocole ARP.

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.

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.

Les deux derniers sont facultatifs, car ils ne sont pas fondamentalement indispensables au fonctionnement réseau de la machine, bien qu'en pratique on ne puisse pas vraiment s'en passer.

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.

Requête DHCP complète
Requête DHCP complète

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.

Mise en place d'un serveur DHCP

Nous allons donc essayer de mettre en place un serveur DHCP. Nous utiliserons pour cela notre machine Debian préférée. ;)

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"

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 :

# Le nom de votre serveur dhcp
server-name "dhcp.monreseau.fr";

# Le domaine attribué à vos clients
option domain-name "monreseau.fr";

# Les serveurs DNS attribués à vos clients
option domain-name-servers 192.168.0.1, 192.168.0.2, 8.8.8.8;

# La durée des baux, en secondes (soit ici 2 heures !)
default-lease-time 7200;
max-lease-time 7200;

# Le masque de sous-réseau
option subnet-mask 255.255.255.0;
# L'adresse de broadcast, qui est optionnelle, mais ça vous fera un bon exercice de la calculer ;-)
option broadcast-address 192.168.0.255;
# Le routeur par défaut
option routers 192.168.0.254;

# Enfin, nous précisons le réseau utilisé et les particularités associées
subnet 192.168.0.0 netmask 255.255.255.0 {
# Ici, nous ne voulons attribuer dynamiquement que les adresses de 10 à 100
        range 192.168.0.10 192.168.0.100;        
# Enfin, nous pouvons spécifier une adresse précise en fonction d'une machine
# grâce à son adresse MAC
        host rguichard-pc {
                hardware ethernet 00:23:8B:4B:D1:BD;
                fixed-address 192.168.0.10;
        }
}

Chaque ligne est commentée dans le fichier.
Notre fichier de configuration est maintenant prêt ! Nous pouvons essayer de lancer, ou relancer, le service.

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.
Mais cette fois, nous allons travailler avec un autre sniffer que Wireshark, en ligne de commande avec tcpdump.
Nous allons tout d'abord l'installer :
# apt-get install tcpdump

Il faut ensuite le lancer dans un autre terminal, vous vous souvenez ? Il est possible de changer de terminal avec la combinaison de touches CTRL+ATL+Fx.

On change de terminal, puis on lance tcpdump :
# tcpdump -i eth0(Modifiez ethx en fonction de la valeur de votre interface)

L'interface se met en écoute :
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

Maintenant, sur l'autre terminal, 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.

Notre serveur DHCP est donc bien installé et prêt à distribuer les adresses IP et informations réseau pour les machines du réseau qui en ont besoin.

  • Vous savez maintenant ce qu'est le protocole DHCP et à quoi il sert.

  • Vous savez aussi installer et configurer un serveur DHCP.

  • Enfin, vous avez vu comment une demande d’adresse IP par DHCP est effectuée.

  • Vous savez mettre le désordre dans un réseau d'entreprise en mettant un serveur DHCP en place, là où il y en a déjà un. :p

Il nous faut maintenant explorer les principes du protocole DNS dont nous avons parlé mais dont nous ne savons encore pas grand-chose...

Exemple de certificat de réussite
Exemple de certificat de réussite