Dynamic Host Configuration Protocol

Le protocole DHCP est une merveille pour tous les administrateurs systèmes et réseaux puisqu’il leur permet de gagner un temps monumental lors de la configuration des machines. En effet, il va permettre d’automatiser le processus d’attribution d’adresses IP, masques, adresse DNS et gateway sur un parc informatique.

Généralement ce sont des serveurs qui font tourner le service DHCP. On dit que ce serveur est un serveur DHCP. Cependant il est aussi possible pour un routeur Cisco de remplir ce genre de tâches.

Pour cela, le serveur (ou le routeur) dispose d’un pool d’adresses IP (par exemple 10.0.0.0/24 soit 254 adresses IP) qu’il va attribuer à nos machines pendant un certain temps : un bail. Généralement ce bail dure entre 24 heures et une semaine. Grossièrement on pourrait résumer le fonctionnement du protocole DHCP ainsi :

dhcpcom.png

En vérité c’est un peu plus compliqué. Donc ce que nous allons faire pour commencer, c’est que nous allons étudier un dump de communication DHCP entre mon PC et ma box (qui fait office de serveur DHCP).

I/Analyse de requêtes DHCP

Voici ce que j’ai pu dumper via Wireshark :

communicationdhcp.png

On peut voir qu’une attribution d’IP se fait via l’envoi de quatre messages : Discover, Offer, Request et ACK.

Le premier message envoyé (DHCP Discover) permet à un client de détecter la présence sur le réseau d’un serveur DHCP. Étant donné que le client ne sait pas où se trouve le serveur DHCP (quelle IP est attribuée au serveur), il va envoyer le message DHCP Discover en Broadcast (Broadcast MAC et/ou Broadcast IP) :

dhcpdiscover.png

Si un serveur DHCP se trouve sur le réseau alors il recevra la requête du client et lui répondra avec le message DHCP Offer dans lequel il inclura une adresse IP (attribuée à partir d’un pool d’adresses IP), un masque, une gateway (parfois un serveur DNS) ainsi qu’un bail. De son côté le serveur DHCP créera une entrée dans sa table ARP avec l’adresse MAC du client et l’adresse IP attribuée :

dhcpoffer.png

Le client va donc recevoir plusieurs informations. S’il les accepte alors il enverra le message DHCP Request afin de prévenir le serveur DHCP que l’offre est acceptée :

dhcprequest.png

Le serveur DHCP va recevoir le message DHCP Request et, afin de finaliser l’attribution, va envoyer une requête ICMP en direction du client afin de vérifier que les informations envoyées sont valides. Si tout se passe bien alors le serveur enverra un dernier message : DHCP ACK afin de valider l’attribution :

dhcpack.png

De son côté le client, avant d’utiliser l’adresse IP nouvellement acquise, enverra une requête ARP en Broadcast avec l’adresse IP qu’il vient de recevoir du serveur DHCP. Si personne n’y répond c’est que personne ne l’utilise et donc que le client peut s’en servir.

Derniers messages que vous pourriez voir sur un réseau : le DHCP Release et le DHCP Renew envoyés par le client au serveur DHCP afin de libérer l’adresse IP utilisée ou renouveler le bail.

II/Configuration d’un serveur DHCP

Voici l’architecture que l’on utilisera afin de tester le fonctionnement de notre serveur DHCP :

archidhcp.png

Ici c’est notre routeur qui va jouer le rôle du serveur DHCP. Les trois PC sont configurés pour fonctionner en mode dynamique :

dhcpcomp.png

Il ne nous reste plus qu’à configurer notre routeur. Première chose à faire, exclure de notre pool d’adresses IP la ou les adresses utilisée(s) pour la gateway afin d’éviter tout conflit. Généralement ce sont les IP’s finissant soit par .1 soit par .254. Pour cela on utilisera ces commandes :

ip dhcp excluded-address 192.168.1.1
ip dhcp excluded-address 192.168.1.254

excluded.png

Ensuite il va falloir créer un pool d’adresses IP utilisable par le serveur DHCP. On utilisera cette commande suivie du nom du pool :

ip dhcp pool "nom_du_pool"

creationpool.png

Nous voici dorénavant dans la configuration de notre service DHCP. Plusieurs choses vont être à configurer. Tout d’abord il va falloir définir un pool d’adresses IP :

network "adresse_IP_de_réseau" "masque"

definitionpool.png

Ici on vient de dire à notre routeur qu’il peut attribuer les adresses IP allant de .2 à .254 (vu qu’on a exclu les .1 et .254). Ensuite il va falloir déterminer la durée du bail :

lease "jour" "heure" "minute"

Puis il va falloir définir l’adresse IP de la gateway. Ici c’est notre routeur donc l’adresse IP 192.168.1.254 :

default-router 192.168.1.254

defaultrouter.png

Puis on peut par exemple définir l’adresse IP d’un serveur DNS :

dns-server "IP_du_serveur_DNS"

Ou encore un nom de domaine :

domain-name "nom_de_votre_domaine"

Mais dans notre exemple ça ne nous servira pas. Donc je ne le ferai pas 😁 ! Enfin pour quitter le mode de configuration du service DHCP nous n’aurons plus qu’à entrer cette commande :

end

Voilà, Notre service DHCP est fonctionnel ! Regardons la configuration IP de nos PC’s afin de nous en assurer :

confpc.png

Parfait !

III/Configuration via ip helper address

Là nous venons de traiter un cas simple où un serveur DHCP est présent sur le réseau de nos ordinateurs. Cependant nous n’aurons pas toujours un serveur DHCP par réseau. Suivant l’étendue d’une société on peut partir du principe qu’un seul serveur DHCP est suffisant (même si c’est rarement le cas, il y a toujours un ou des relais).

Prenez cette architecture :

iphelperaddressartchi.png

Comment les ordinateurs du sous réseau 192.168.2.0/24 vont ils recevoir leurs adresses IP ? Les requêtes DHCP ne passent pas à travers les routeurs donc le routeur de gauche ne pourra pas attribuer d’adresses IP aux ordinateurs du réseau de droite. Pourquoi ? Eh bien parce que comme nous l’avons vu dans la première partie de cette article, ces requêtes se font en broadcast or les requêtes broadcast sont confinées à leurs sous réseaux. Le routeur de droite ne transférera donc pas (par défaut) les requêtes DHCP des ordinateurs du réseau de droite.

Pour pallier ce problème il va tout d’abord falloir créer un second pool d’adresses IP pour notre second réseau sur le routeur de gauche :

ip dhcp pool test
network 192.168.2.0 255.255.255.0
default-router 192.168.2.254
end

Ensuite il va falloir indiquer au routeur de droite que s’il reçoit des requêtes DHCP venant de son réseau (requêtes qui arrivent via la gateway donc) alors il doit les forwarder au routeur DHCP :

forwardiphelper.png

Pour cela il faudra dire au routeur de droite que toutes les requêtes DHCP qu’il recevra sur l’interface gibabitEthernet 0/1 seront à transmettre au routeur de gauche (dont l’IP est 10.0.1.1) :

enable
configure terminal
interface gigabitEthernet 0/1
ip helper-address 10.0.1.1
end

Et maintenant si on regarde la configuration IP de nos PC’s du réseau de gauche on verra qu’ils auront bien reçu une adresse IP via le DHCP :

configurationip.png

IV/ Configurer un routeur en tant que client DHCP

Dernière chose que nous verrons dans cet article : comment faire en sorte que notre routeur soit un client DHCP. Eh bien en fait c’est tout simple, il suffit de rentrer dans le mode de configuration d’une interface et d’entrer cette commande :

ip address dhcp

routerasclientdhcp.png

Et notre interface se verra attribuer une IP via le serveur DHCP.


Voilà pour le protocole DHCP. Plus tard je vous montrerai comment monter un serveur DHCP et surtout quels sont les vecteurs d’attaque liés au protocole DHCP 😉😉 !

Comme d’habitude, si vous avez des questions, ça se passe ici !

Un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s