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.
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 ?
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.
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
·
/etc/default/isc-dhcp-server
·
/etc/dhcp/dhcpd.conf
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.
Mais attention, dans ce cas il faudra bien spécifier quelles adresses distribuer sur chacun des réseaux.
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
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)
# dhclient eth0
Enfin, nous pouvons retourner sur le terminal sur lequel tcpdump est lancé.
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.