Dynamic Host Configuration Protocol (DHCP)

Version du 25/01/2017.

Cette page est un guide sur comment configurer un serveur DHCP, en particulier celui de Brest. C'est la deuxième étape du guide Monter le service DHCP du ResEL

Vous pouvez Voir la configuration DHCP de Rennes pour avoir un guide expliquant les différences de configuration à Rennes.

Généralités

Le serveur DHCP est hébergé sur la VM saymyname. La VM braum avec le serveur DHCP de secours a une configuration similaire.

Le serveur DHCP utilisé est isc-dhcp, c'est à dire le package isc-dhcp-server.

Utilisation

Pour relancer le service lors d'une modification (mise à jour du ldap ou de la configuration dhcp) le plus simple est d'utiliser le lien qui se trouve sur le site admin Ce lien lance l'exécution du script de reload (voir Configuration).

Configuration

-> La configuration se trouve : https://git.resel.fr/confs/dhcp-brest

Le fichier de conf dhcpd.conf est généré en créant un fichier contenant d'abord le fichier /etc/dhcp/header.conf qui contient la conf préliminaire du dhcp. Ensuite, le script python ldap2dhcp.py (voir plus bas) ajoute la description statique de chacun des machines inscrites, son ip et son adresse mac à la conf. La conf finale est inscrite dans le fichier /etc/dhcp/dhcp.conf.

Configuration préliminaire du DHCP

Détaillons le fichier header.conf (situé dans /etc/dhcp/) que vous pouvez trouver dans sa dernière version à : https://git.resel.fr/confs/dhcp-brest/blob/master/header.conf

Avant d'ajouter toutes les IP des machines au DHCP, il faut configurer les options par défaut :

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;
À noter que le authoritative; permet de dire au DHCP de refuser toute demande illégale d'un client DHCP. De plus, il n'y a pas d'espace entre  local et 7; dans la ligne log-facility local7; contrairement à ce qu'il est possible de voir sur internet. On a testé et de mémoire c'est mieux.

Ensuite, on configure le PXE :

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";
    }
}

Voila la partie intéressante :

option domain-name "resel.fr"; 

shared-network "resel-995" 
{
    # Subnet inscription 
    subnet 172.22.224.0 netmask 255.255.254.0 {
        authoritative;
        range 172.22.224.3 172.22.225.250;
        default-lease-time 120;
        max-lease-time 300;
        option domain-name-servers 172.22.225.253;
        option routers 172.22.225.254;
        option broadcast-address 172.22.225.255;
        option subnet-mask 255.255.254.0;
    }
}

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;
Vous pouvez noter ici l'absence de la bracket } finale pour permettre au reloader de concaténer la description statiques des machines inscrites.

Configuration du daemon

Par ailleurs, le fichier /etc/default/isc-dhcp-server contient la configuration du lancement du daemon. La ligne intéressante est celle précisant les interfaces :

DHCPDARGS = "eth1 eth3" 
L'interface eth1 permet sert pour le VLAN utilisateur et l'interface eth3 pour le VLAN inscription. TODO : vérifier cette info. A noter que la ligne précédente remplace la ligne suivante dans la configuration par défaut de isc-dhcp-server :
INTERFACES=""

Génération

Pour la première mise en route du service, le plus simple est de lancer le script ldap2dhcp.py. Voir l'article suivant pour plus d'info.

Redémarrage du service

Avec le script (méthode conseillée)

Pour appliquer la mise à jour du LDAP, ou de la configuration DHCP, il faut redémarrer le service isc-dhcp-server. Pour redémarrer le DHCP, de préférence il faut utiliser l'interface admin : section relance DHCP et DNS cliquer sur le bouton DHCP. Cela va lancer une connexion ssh sur saymyname avec le compte reloader dont la seule action va être de relancer le DHCP.

Pour regénérer le DHCP, le script /srv/reloader/scripts/dhcp/ldap2dhcp.py va questionner le ldap et récupérer toutes les ips et macs de machines inscrites, puis il va générer un host dans la conf du dhcp suivant la syntaxe

host <son nom>
{
    fixed-address <son ip>;
    hardware ethernet <sa mac>;
    option host-name <son hostname>;
}
Le script écrase le contenu de dhcp.conf à chaque exécution. Il faut donc faire attention à ne pas casser la configuration préliminaire header.conf pour garantir la relance du service dhcp.
Rédemarrage manuel (pour ceux qui aime tout casser)

Pour effectuer un redémarrage manuel, il est possible de stopper et relancer le service à partir de l'invite de commande. Cette méthode ne prend pas en compte les modifications du LDAP, ni de la conf DHC. Je vous conseille vivement d'utiliser le script de reload. Néanmoins, les commandes à lancer sont :

systemctl stop isc-dhcp-server
Puis
systemctl start isc-dhcp-server

Vérifier que les scripts sont bien lancés et fonctionnent

Deux commandes permettent de vérifier que le service DHCP s'est lancé sans erreurs :

tails -f /var/log/syslog
et
journalctl -xn 100
A noter que le 100 sert à faire apparaitre 100 lignes du journal (au lieu des 10 par défaut).

Ressources utiles

Git ResEl

Externes

Articles liés

TODO (pour le rédacteur)

  • Ajouter quelques ressources de plus
  • Vérifier la correspondance interfes-VLAN affirmée dans #configuration-du-daemon
  • Déplacer cette page vers Configurer un serveur DHCP