Le protocole DHCP
Introduction
Serveur Client Serveur (non sélectionné) (sélectionné) V Début V (1) | _____________/|\_____________ | |/ DHCPDISCOVER | DHCPDISCOVER \| | | | Détermine | Détermine une config. | la config. (2) |\ | ____________/| | \_________ | /DHCPOFFER | | DHCPOFFER\ |/ | | \ | | | Collecte les réponses | | \| | | Selectionne une config. | (3) | _____________/|\_____________ | |/ DHCPREQUEST | DHCPREQUEST \| | | | | | Enregistre | | la config. (4) | | _____________/| | |/ DHCPACK | | Configuration terminée | | | | . . . . . . | | | | Déconnexion | (5) | |\_____________ | | | DHCPRELEASE \| | | | | | clos le bail v FIN v
Rôle
Le service et serveur DHCP ont les rôles de :
- Louer une adresse IP aux matériels qui n'ont pas d'adresse IP
- Confier une adresse IP statique pour les matéreils qui ont une réservation
Données fournies
Les données fournies par le DHCP sont :
- (toujours) une adresse IP et son masque dans une plage définie dans la config du serveur.
- (toujours) une adresse de passerelle : le routeur de sortie du réseau.
- (toujours) un bail de location : la durée d'autorisation d'utilisation de l'adresse.
- (souvent) des adresses de DNS
- (parfois) un nom de domaine
- (parfois) un nom de machine dans le domaine (en cas de réservation)
- d'autres options ? => voir plus bas
Fonctionnement
Le protocole DHCP fonctionne sur les ports 67 et 68. Il n'est pas routable car il utilise des trames en boradcast MAC.
Le protocole DHCP fonctionne comme suit (voir schéma ci-contre):
Au début de la connexion de l'interface au réseau :
- DHCPDISCOVER : (broadcast) Le PC recherche un serveur DHCP dans le réseau connecté.
- DHCPOFFER : (broadcast) Les serveurs répondent au client avec une offre de configuration (IP, masque, etc...).
- DHCPREQUEST : (broadcast) Le PC demande aux serveurs la confirmation des paramètres reçus d'un serveur et décline implicitement les autres offres.
Généralement, c'est le plus rapide qui est choisi. Le plus rapide est souvent le plus proche en termes de sauts entre les switchs. - DHCPACK : (unicast) le serveur envoie un accusé de réception au PC. Il approuve les paramètres du client et confirme les paramètres. Si le client tarde trop (il refuse l'offre et ne fait pas de request) le serveur envoie alors un message NACK (non accusé).
Messages supplémentaires :
- DHCPRELEASE : Le client informe le serveur qu'il libère l'IP avant la fin du bail.
- DHCPINFORM : Le client demande des informations sur la config actuelle du réseau : passerelle, DNS, .
Autres messages ? => voir plus bas.
Durant la procédure, le serveur ou le client peuvent refuser la demande ou l'offre.
Si la demande n'est pas approuvée après dhcpRequest, le serveur envoie un DHCPNAK : refus du serveur au client demandeur (/ex. l'adresse demandée est déjà allouée depuis qu'elle a été proposée).
Si le client, après DHCPACK, trouve que l'adresse ne lui convient pas ou qu'elle est invalide selon lui (/ex. l'IP est une adresse de réseau), il envoie un refus DHCPDECLINE.
Au milieu du bail (50%), le client effectue une nouvelle demande dhcpREQUEST pour prolonger le bail.
- le serveur peut accepter avec un dhcpACK ou refuser par un dhcpNACK.
Sans réponse du serveur, le client refait sa demande au bout de 87.5% du temps et sinon, il perd son adresse à l'échéance du bail.
Conditions particulières
Réservations d'adresses
Il est possible de réserver une adresse IP particulière à un matériel spécifique en fonction de son adresse MAC. Cela est utilisé surtout pour les serveurs.
Recoupement d'étendues
Il est possible de configurer plusieurs serveurs avec la même étendue. Ils se partageront alors la distribution d'adresses.
À noter que si les étendues se recoupent ou se supperposent, cela ne soulève pas de problème. Les serveurs effectuent un ping de vérification que l'adresse soit libre avant de la proposer.
Répartir la charge avec DHCP
Répartition entre les serveurs DHCP
Lors de la réponse des serveurs (DHCPOFFER), le client choisi généralement le premier qui répond : le plus rapide ou le plus proche en termes de sauts.
Cela induit que deux cleints utiliseront chacun son serveur en fonction de la "proximité" de celui-ci.
On a donc une forme de répartition de charge entre les serveurs.
Répartition entre les services proposés
Cette répartition entre les serveurs DHCP peut être mise à profit pour effectuer une répartition de charge supplémentaire entre :
- les étendues différentes
- les routeurs et passerelle avec une option différente entre les deux serveurs (option routers)
- les serveurs DNS avec l'inversion des serveurs DNS principal/secondaire dans l'option domain-name-servers
Voir les exemples plus loin
Configuration de isc-dhcp-server (Linux)
Le fichier de configuration type d'un serveur isc-dhcp-server est dans le dossier /etc/isc-dhcp-server/dhcpd.conf
Installer le service
prérequis
- avoir une machine avec un Linux minimal (pas besoin d'interface graphique qui alourdirait inutilement la machine) :
- VM : 256Mo de RAM, 8Go de HD,
- PC : un vieux I3 ou K10 suffit, avec 1Go et un disque de 128Go sont très (trop?) largement suffisants
- une distro Debian sans interface graphique. Pas Ubuntu : trop de services additionnels par défaut, une distro super lite est très bien.
- le système doit être à jour : sources.list, proxy en place et
apt update
, éventuellementapt upgrade
,
Installation
Télécharger le service :
apt install isc-dhcp-server
L'installation se fait correctement mais le service se plante. C'est normal, il n'est pas encore configuré
Il faut maintenant configurer le service puis indiquer quelle interface servir comme dans la suite du document.
Partie commune
Configuration globale par défaut
max-lease-time 240; default-lease-time 240; deny unknown-clients; option domain-name "momdomaine.com"; option domain-name-servers hote1.momdomaine.com, hote2.momdomaine.com, 192.168.1.250, 192.168.1.251; option routers 192.168.1.254; # passerelle par défaut pour la config
=== Exemple d'étendue d'adresses === Configuration particulière de l'étendue : intervalle d'adresses et paramètres de la plage.
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.20; range 192.168.1.110 192.168.1.120; option broadcast-address 192.168.1.255; option routers 192.168.1.253; # on peut en mettre plusieurs
=== Exemple de réservations d'adresse ===
Réservations individuelle
Donner une adresse fixe à un hôte sur la base de son adresse MAC. Ajout d'autres paramètres spécifiques
host hote5 { hardware ethernet 08:00:00:a2:5f:34; fixed-address 192.168.1.215; server-name "bootp.momdomaine.com"; }
Réservations de groupe
Un groupe permet de définir des paramètres communs aux hôtes du groupe
group { # définir la passerelle du groupe d\'hôtes option routers 192.168.1.253; # donner un nom de domaine à un hôte host hote3 { hardware ethernet 08:00:00:11:d2:3d; option host-name pc_num3; } # donner une adresse fixe à un hôte host hote4 { hardware ethernet 08:00:00:cc:a0:b1; fixed-address 192.168.1.104; } }
Configurer l'interface servie par DHCP
Ouvrir le fichier /etc/default/isc-dhcp-server
INTERFACES="eth0 eth1"
Redémarrer le service
Utiliser la touche "tabulation" pour compléter automatiquement les éléments des commandes ...
# solution 1 (ancienne, debian) service isc-dhcp-server restart # solution 2 (plus suniverselle) systemctl restart isc-dhcp-server.service