Dynamic Host Configuration Protocol (DHCP)

Description

Dynamic Host Configuration Protocol (DHCP, protocole de configuration dynamique des hôtes) est un protocole réseau dont le rôle est d’assurer la configuration automatique des paramètres IP d’une station, notamment en lui affectant automatiquement une adresse IP et un masque de sous-réseau. Wikipédia

Cette configuration automatique est assurée par la communication entre la station et un serveur, appelé serveur DHCP, afin d'échanger toutes les informations nécessaires.

Lors de la connexion d'une machine utilisateur sur le réseau, le réseau s'authentifie auprès du radius, puis demande une adresse IP auprès du serveur DHCP. Celui-ci lui attribue une adresse IP. Une fois l'adresse obtenue, la machine peut envoyer des requêtes sur le réseau local, voire vers internet le cas échéant.

Approfondissement sur le processus d'attribution d'adresse IP

La station et le serveur DHCP échangent principalement 4 types de messages : DHCPDISCOVER, DHCPOFFER, DHCPREQUEST, DHCPACK.

Schéma des requêtes d'une adresse IP dynamique

{{{{{{ Machine utilisateur->Serveur DHCP: DHCPDISCOVER Serveur DHCP->Machine utilisateur: DHCPOFFER Machine utilisateur->Serveur DHCP: DHCPREQUEST Serveur DHCP->Machine utilisateur: DHCPACK }}}}}}

Schéma des requêtes d'une adresse IP statique

{{{{{{ Machine utilisateur->Serveur DHCP: DHCPREQUEST Serveur DHCP->Machine utilisateur: DHCPACK }}}}}}

  • DHCPDISCOVER - Pour une machines configurée en attribution d'ip dynamique, celle-ci broadcaste une le fait qu'elle recherche une adresse IP. Dans ce message, la machine indique notament son adresse MAC.
  • DHCPOFFER - Le DHCP regarde sa configuration, les leases (liste des adresses déjà attribuées par le serveur DHCP) et les informations du DHCPDISCOVER. Il détermine une adresse IP et broadcaste sa proposition d'adresse pour l'adresse mac de la machine demandeuse.
  • DHCPREQUEST - La machine demande l'attribution d'une adresse IP. Cela vient soit après une DHCPOFFER, soit directement la machine est configurée en attribution d'adresse IP statique.
  • DHCPACK - Le serveur DHCP valide la demande d'atribution d'adresse IP, et ajoute la machine considérée à sa liste de leases

Infrastructure

3 machines assurent le bon fonctionnement du service DHCP : Saymyname et Braum sur Brest et Loupiac sur Rennes. Pour assurer le service, chaque serveur contient un fichier de configuration et une liste de leases.

Failover

Il y a bien deux machines à Brest pour assurer la redondance du service. Saymyname occupe le rôle de DHCP primaire, depuis le pool d'hyperviseur principal au i11. Braum occupe le rôle de DHCP secondaire depuis l'hyperviseur de secours, Kyubey.

En fonctionnement normal, les deux serveurs se partagent les requêtes DHCP. C'est à dire qu'ils répondent chacun aux requêtes de certaines adresses MAC (et pas les mêmes). L'important quand on a deux serveurs DHCP, c'est qu'ils répondent exactement la même chose. C'est pourquoi il faut que la partie déclaration des réseaux dans le fichier de configuration doit être rigoureusement identique. Pour les IP non fixées dans la configuration (rien à voir avec le principe d'adresse IP dynamique), les deux serveurs en failover communiquent régulièrement pour être synchronisés. Pour les adresses IP fixées dans la configuration (ie celles associées à des adresses MAC dans la liste de hosts), le failover n'a pas d'utilité car les deux serveurs répondent de la même manière.

En fonctionnement anormal, ie quand l'un des deux serveurs tombe, le serveur toujours en marche prend le relais pour gérer toutes les requêtes DHCP envoyées sur le réseau.

Stack de tests

Il est conseillé (obligatoire) de tester une nouvelle configuration DHCP sur la stack de test avant de la déployer. Pour cela, il y a actuellement 3 machines virtuelles sur kyubey :

  • Bao le dhcp primaire
  • Oba le dhcp secondaire
  • Altair la machine de test

Utilisation

Configuration

Coté client/utilisateur

En tant qu'utilisateur, il suffit de configurer l'interface réseau de la machine pour choisir on souhaite avoir une adresse IP dynamique ou statique. Sur les distribution Linux basées sur Debian, la configuration se trouve dans le fichier /etc/network/interfaces.

Pour une configuration statique de l'interface eth0

auto eth0 # interface powered up with `ifup -a`, e.g. system boot scripts
allow-hotplug eth0 # another identifier of interfaces, brought up autmomatically by subsystems, using`ifup allow=hotplug`
iface eth0 inet static # definition of interface and its configuration
        address 172.22.203.111 # address of the interface in the network
        netmask 255.255.254.0
        network 172.22.199.0 # non mandatory, the network to be used
        broadcast 172.22.223.255 # non mandatory, the broadcast address
        gateway 172.22.223.254 # non mandatory

Pour une configuration dynamique de l'interface eth0

auto eth0
allow-hotplug eth0
    iface eth0 inet dhcp

Coté serveur

Actuellement, on utilise le logiciel isc-dhcp-server pour gérer les requêtes DHCP. La configuration se trouve par défaut dans le fichier /etc/dhcp/dhcpd.conf. Sinon, il faut regarder son adresse dans /etc/default/isc-dhcp-server.

Modification de /etc/default/isc-dhcp-server

Dans le fichier /etc/default/isc-dhcp-server, il faut préciser les interfaces réseaux du serveur sur laquelle il doit répondre aux requêtes DHCP. Exemple ici sur les interfaces eth1 et eth3.

DHCPDARGS = "eth1 eth3"
Cette ligne remplace INTERFACES ="" qui est la déclaration utilisée dans les distribution CentOS.

Modification de /etc/dhcp/dhcpd.conf au ResEl

La configuration est versionnée sur git La configuration minimale n'est pas connue, mais il faut au moins préciser un certain nombre d'options, dont les subnets et les adresses IP à distribuer. Les options que l'on utilise au ResEl sont

authoritative;
one-lease-per-client on;
always-broadcast  on;
ping-check  on; 
log-facility  local7;

option netbios-node-type 2;
option netbios-name-servers 172.22.199.1;
option netbios-dd-server 172.22.199.1;      
option ntp-servers 172.22.199.1;      
option pop-server 172.22.42.105;  
option nntp-server 172.22.42.105;  
option www-server 172.22.42.80; 
option irc-server 172.22.199.31; 
next-server 172.22.42.3;

filename "pxelinux.0";

if substring (option vendor-class-identifier, 0, 17) = "NetBSD:i386:libsa" 
{
    if filename = "boot.cfg" 
    {
        filename "tftp:bsd/netbsd-boot.cfg";
    } else if filename = "netbsd" {
        filename "tftp:bsd/netbsd-INSTALL.gz";
    }
}

option domain-name "resel.fr"; 
shared-network "resel-999" {

    # Subnet inscription-999 (inscription over ethernet) 
    subnet 172.22.226.0 netmask 255.255.254.0 {
        authoritative;
        range 172.22.226.3 172.22.227.250;
        default-lease-time 120;
        max-lease-time 300;
        option domain-name-servers 172.22.227.253;
        option routers 172.22.227.254;
        option broadcast-address 172.22.227.255;
        option subnet-mask 255.255.254.0;
    }
    # Subnet utilisateurs  
    subnet 172.22.192.0 netmask 255.255.224.0 {
        option domain-name-servers 172.22.199.229, 172.22.42.1, 172.23.42.229;
        option routers 172.22.199.1;
        option subnet-mask 255.255.224.0;
        #range 172.22.200.000 172.22.223.254; 
    }

    group {
        use-host-decl-names off;
        option domain-name-servers 172.22.199.229, 172.22.199.11;
        option routers 172.22.199.1;
        option broadcast-address 172.22.223.255;
        default-lease-time 86400;
        min-lease-time 86400;
        # insérer quelques hosts ici
    }

Liens utiles

Sur la configuration d'une interface réseau

TODO

  • Finir de compléter les parties
  • Migrer les infos pour l'installation dans le repo dhcp-brest