DHCP, le cours

SIO > S2_SISR > S2C10 DHCP sous Linux > S2C10_DHCP.md

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 :

  1. DHCPDISCOVER : (broadcast) Le PC recherche un serveur DHCP dans le réseau connecté.
  2. DHCPOFFER : (broadcast) Les serveurs répondent au client avec une offre de configuration (IP, masque, etc...).
  3. 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.
  4. 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 :

  1. DHCPRELEASE : Le client informe le serveur qu'il libère l'IP avant la fin du bail.
  2. 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, éventuellement apt upgrade,

Installation

Télécharger le service :

[shell]
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

[conf]
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.

[conf]
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

[conf]
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

[conf]
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

[conf]
INTERFACES="eth0 eth1"

Redémarrer le service

Utiliser la touche "tabulation" pour compléter automatiquement les éléments des commandes ...

[shell]
# solution 1 (ancienne, debian)
service isc-dhcp-server restart
# solution 2 (plus suniverselle)
systemctl restart isc-dhcp-server.service

Exemple de répartition de charge avec DHCP

Extraits de configurations

Serveur 1
[conf]
# répartition sur les DNS 1 puis 2
option domain-name-servers 192.168.1.201, 192.168.1.202;
# répartition sur les passerelles 254 puis 253
option routers 192.168.1.254, 192.168.1.253;
# répartition des adresses sur les étendues : 10 à 20
subnet 192.168.1.0 netmask 255.255.255.0 {
	range 192.168.1.10 192.168.1.20;
	option broadcast-address 192.168.1.255;
}
Serveur 2
[conf]
# inversion des DNS 2 puis 1
option domain-name-servers 192.168.1.202, 192.168.1.201;
# inversion des passerelles 253 puis 254
option routers 192.168.1.253, 192.168.1.254;
# autre étendue : 30 à 40
subnet 192.168.1.0 netmask 255.255.255.0 {
	range 192.168.1.30 192.168.1.40;
	option broadcast-address 192.168.1.255;
}

Conclusion

Voilà, c'est fini pour cet article.
Le principal apport est la répartition de charges sur plusieurs serveurs DHCP et celle, induite, sur les serveurs DNS
Bye !

Références

Les autres options pour isc dhcp server

Le plus simple est de donner un exemple de configuration :

[conf]
##### Options générales par défaut #####
 
### Paramètres du réseau local #####
# Nom du serveur DHCP
server-name "monServeur.monDomaine.lan" ; 
# Mode autoritaire (autoritaire)
authoritative ;
 
# Masque de sous-réseau global
option subnet-mask 255.255.255.0;
 
### Domaine local ###
# Nom du domaine local
option domain-name "monDomaine.lan";
# Adresse IP des serveurs DNS1 et 2
option domain-name-servers XXX.XXX.XXX.XXX XXX.XXX.XXX.XXX;
# Type de mise à jour du DNS (aucune)
ddns-update-style none;
 
### BAIL de location des adresses ###
# Bail normal si le client ne demande pas de bail spécifique
default-lease-time 3600; 
# Bail maxi si le client demande un bail spécifique
max-lease-time 7200;     
 
### Sécurité ###
## refus(deny)/autorise(allow) les clients inconnus (refuse client inconnu)
deny unknown-clients;
 
## Rediriger les log vers un fichier donné (modifier aussi syslog.conf pour compléter la redirection).
# log-facility local7;
 
### PXE ###
# Permet le boot réseau pour TFTP
allow bootp;
allow booting;
 
##### Définition des étendues DHCP pour les réseaux #####
## Exemple : déclaration sous réseau 192.168.1.*
subnet 192.168.1.0 netmask 255.255.255.0 {
  # Option pour un domaine différent de celui par défaut
  option domain-name "monSecondDomaine.lan";
  ## Adresse de diffusion 
  option broadcast-address 192.168.1.255;
  ## Serveurs DNS 
  option domain-name-servers 8.8.8.8, 1.1.1.1;
  ## Routeur par défaut
  option routers 192.168.1.1;
        ## Plage d'attribution d'adresse
        # Ici débute à 1.5, 1.1 à 1.4 étant déjà prises.
        # La plage ne contient qu'1 adresse ce qui empêche l'attribution sauf au client dont celle-ci est fixée.
  	range 192.168.1.5 192.168.1.5;
  ## Option pxe nom du fichier servi.
  # elilo.efi pour ia64; pxelinux.0 pour x86
  # À placer à la racine du serveur TFTP.
  # Le fichier peut être spécifié dans la section « host », il deviendra alors prioritaire sur celui-ci 
  filename "pxelinux.0";
  # Définit le serveur qui servira le fichier « pxelinux.0 »
  next-server 192.168.2.1;
  # Évalue si l'adresse est déjà attribuée
  ping-check = 1;
}
 
## Déclaration sous réseau 192.168.2.*
subnet 192.168.2.0 netmask 255.255.255.0 {
  option domain-name "ubuntu-fr.lan";
  option broadcast-address 192.168.2.255;
  option domain-name-servers 8.8.8.8, 1.1.1.1;
  option routers 192.168.2.1;
  	range 192.168.2.2 192.168.2.3;
  ping-check = 1;
  filename "pxelinux.0";
  next-server 192.168.2.1;
}
 
#### Configuration des hôtes avec IP fixée ####
# Hôte « FTP »
host ftp {
  hardware ethernet 00:0f:75:af:eb:44;
  fixed-address 192.168.1.2;
  ### PXE ###
  # Fichier spécifique à une machine 
  # filename "debian-installer/ia64/elilo.efi";
  # Ou définir le serveur qui servira le fichier pxelinux.0
  # next-server 192.168.2.1;
}
# hôte « WEB »
host web {
  hardware ethernet 00:02:0d:31:d1:cc;
  fixed-address 192.168.1.3;
}
# hôte « mail »
http://nomsite.fr/teto/ee.php
host mail {
  hardware ethernet 00:02:55:d2:d1:cc;
  fixed-address 192.168.1.4;
}
# hôte « PORTABLE »
host portable {
  hardware ethernet 00:0e:af:31:d1:cc;
  fixed-address 192.168.2.2;
}
 
# Groupe séparé avec certains paramètres équivalents :
group {
  # Tout le groupe disposera d'un autre serveur DNS (dans ce cas "desktop" et "tv")
  options domain-name-servers 8.8.4.4;
  host desktop {
    hardware ethernet ab:cd:ef:11:22:33;
  }
 
  host tv {
    hardware ethernet 33:22:11:ef:cd:ab;
  }
}

suite des messages DHCP

Message Description RFC
DHCPNAK le serveur refuse l'IP au client. Le client a été trop lent à répondre et l'ip donnée à un autre ou la requête n'était pas conforme rfc2132
DHCPFORCERENEW Le serveur demande au client de renouveler son adresse, souvent suite à une modification de configuration du réseau rfc3203

Il existe d'autres messages non détaillés ici, concernant particulièrement les agents relais ou la connexion directe au serveur. Point d'entrée pour les voir : RFC et wiki version anglaise, seulement.