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

{{{{{{ note left to Machine utilisateur: pour 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

{{{{{{ note left to Machine utilisateur: pour 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

Machines utilisées

3 machines (virtuelles) 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. Le fichier de configuration contient tous les paramètres de connexions spécifiques au ResEl. Il est versionné sur https://git.resel.fr/confs/dhcp-brest et celui de rennes qui va bientôt être fusionné. Le fichier de leases contient la liste des hosts (couple IP/MAC) attribués par le serveur DHCP et le temps de validité de l'attribution d'adresse IP. Ce fichier n'est jamais modifié directement (sauf pour être flush quand c'est nécessaire).

Gestion des adresses IP

Quand le serveur DHCP reçoit une requête, il regarde dans son fichier de lease pour voir si l'adresse MAC a déjà une adresse IP attribuée, et regarde dans ses fichiers de configuration quelles sont les règles sur l'attribution ou non d'une certaine adresse IP. Dans l'infrastructure du ResEl, toutes les machines utilisateurs qui veulent acéder à internet sont enregistrées (inscrites) et sont associées à un adresse IP unique. Cela simplifie la reconnaissance des machines utilisateurs. Cela permet aussi de reconnaître très simplement un utilisateur à partir de l'activité effectuée sur une adresse IP.

Les adresses IP des machines, et les adresses MAC de leurs interfaces réseau sont enregistrées dans le LDAP. Un script, dénommé ldap2dhcp.py, vient récupérer cette liste et l'enregistre dans les fichiers de configuration du DHCP. Quand une association IP-MAC est précisée dans le fichier de configuration, cela signifie généralement que la machine possédant cette MAC va obtenir l'adresse IP associée.

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

Coté utilisateur

En général, les machines utilisateurs utilisent par défaut le DHCP à la connexion au réseau. Elles en ont besoin pour se connecter au ResEl. C'est conseillé sauf si l'utilisateur connait son adresse IP (+ passerelle + DNS + sous-réseau) au ResEl, dans ce cas il est possible de configurer ses interfaces pour demander la bonne adresse IP.

Si la mauvaise adresse est utilisé, on considère ça comme de l'IP spoofing.

Coté Administrateur

Les moyens d'avoir une influences sur le DHCP sont limités, il faut donc tous les connaitre. La princi

Y manuellement

1 la connexion en SSH sur les machines (saymyname, braum, ou loupiac) 2 le bouton de reload du DHCP sur le site admin

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 de paramètres. On peut diviser la configuration en deux parties 1. Les options globales endémiques au service DHCP 2. Les règles d'attribution de l'adresse IP : VLANs, subnets, range d'adresses IP disponibles

La configuration de base que l'on utilise au ResEl est :

# global options
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";
    }
}

# Network parameters
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
        ####
    }
}

Questions à se poser pour bien comprendre le DHCP

  • Quelles sont les plages d'adresses dynamiques réservées sur les différents subnets ?
  • Quelle est la commande pour vérifier qu'une configuration DHCP est correcte ? *Qu'est ce qu'un lease ?
  • Qu'est ce qu'un log DHCP, où trouver les logs DHCP ? Où chercher ?
  • Où trouver la documentation sur le DHCP ?
  • Qu'est ce qu'une IP statique, / IP dynamique ?
  • Qu'est ce que sont les pool, subnet, shared-network ? Lors de l'échange des messages du protocole DHCP, : Qu'elles informations le DHCP doit donner au client ? Quelles infos doivent être présentes dans la conf DHCP ? Quelles informations doit-il mémoriser en plus ?
  • Qu'est ce que omapi ? A quoi cela sert-il ?

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