Serveur DHCP avec dhcpd et Linux

Voici un billet pour créer un serveur DHCP avec dhcpd sous linux sans trop rentrer dans les détails mais en expliquand les principes et les options personnalisées et supplémentaires (exemple : option 66, 67, 150 … )

Un serveur DHCP (Dynamic Host Configuration Protocol) est un terme anglais désignant un protocole réseau dont le rôle est d’assurer la configuration automatique des paramètres IP d’une station, notamment en lui assignant automatiquement une adresse IP et un masque de sous-réseau. DHCP peut aussi configurer l’adresse de la passerelle par défaut, des serveurs de noms DNS et des serveurs de noms NBNS (connus sous le nom de serveurs WINS sur les réseaux de la société Microsoft).

Dans le monde du particulier il est utilisé simplement pour fournir des adresses IP aux machines du réseau mais dans le monde professionnel ou geek il est utilisé afin de fournir une IP et des options qui permettent à une machine du réseau d’obtenir des adresses de serveur où ils récupèrent une configuration, un utilisateur, etc …

Dans le billet je vais aller de la configuration basique d’un serveur DHCP jusqu’a une configuration avancée avec des adresses fixés, des options personnalisées …

1. Pré-requis

1.1 Paquets

Une interface dédié au réseau de distribution des adresses, configurée en IP fixe. Le paquet dhcpd installé (via aptitude, apt-get, urpmi, yum … ou compilé 😉 )

Une plage d’adresses en tête (dans notre exemple nous choisirons la plage 192.168.1.10 – 192.168.1.50)

1.2 Configuration de la carte réseau

Voici la configuration utilisée pour mon billet :

Adresse : 192.168.1.1
Masque : 255.255.255.0
Gateway : 192.168.1.254
DNS : 194.2.0.20

2. Fichier utilisé par dhcpd

Le fichier de configuration utilisé par dhcpd est

/etc/dhcpd/dhcpd.conf

Ce fichier est la base de la configuration du serveur, il est composé de plusieurs sections délimitées par des accolades { et } :

  • group
  • shared-network
  • subnet
  • host
  • Il est composé aussi de paramètres généraux qui s’appliquent à tout le fichier)

    Chaque section peut contenir des paramètres et des options. Une section group peut contenir des sections host. Au début du fichier, on peut placer des paramètres globaux, comme par exemple la durée des baux, les adresses des DNS…

    Chaque ligne du fichier de configuration doit se terminer par un ; sauf lorsqu’il y a une accolade. Les commentaires sont possibles en ajoutant un # en début de ligne.

    3. Configuration du serveur

    Maintenant que vous avez bien compris la structure à adopter pour créer un serveur DHCP sous linux avec ses sections vous allez voir comment le configurer pas-à-pas.

    3.1 Paramètres généraux

    Dans ces paramètres vous pouvez définir plusieurs options telles que la durée des baux DHCP, interdire de distributer des addresses aux hosts inconnus, le nom du domaine, les serveurs DNS, les options supplémentaires, voici un exemple :

    max-lease-time 3600;
    default-lease-time 240;
    deny unknown-clients;
    option domain-name "mininetwork.lan";
    option domain-name-servers ns1.mininetwork.fr, ns2.mininetwork.fr;
    allow bootp;
    

    Les 2 premières lignes sont des informations sur les bauds.

    La 3ème ligne indique de ne pas distribuer d’adresses à des hosts qui ne sont pas dans la liste (à ne pas mettre si vous ne souhaitez pas faire du filtrage par adresse physique).

    La 4ème ligne indique le nom de domaine à utiliser par les machines.

    La 5ème ligne informe les machines des serveurs de noms sur le réseau : primaire et secondaire.

    La 6ème ligne indique que dhcpd va répondre aux requètres bootp.

    3.2 Configuration d’un sous réseau pour distribuer des adresses

    Pour déclarer un sous réseau vous devez utiliser une section subnet de cette manière :

    subnet 192.168.1.0 netmask 255.255.255.0 {
          range 192.168.1.10 192.168.1.50;
    }
    

    Pour un sous-réseau vous pouvez ajouter des options à propos des dns, des baux, une gateway, etc …

    3.3 Configuration d’un host en particulier

    Cette section permet de déclarer des machines que le DHCP doit connaitre et lui appliquer une configuration bien particulière telle que IP fixée, option spécifique (fichier de boot, tftp, …)

    Une adresse fixée ne doit pas appartenir à des adresses définies dans un range de subnet. Configurons un host PHONE d’adresse physique 00:1F:6E:AA:EF:BD et nous voulons lui assigner l’adresse 192.168.1.100 :

    host PHONE {
          hardware ethernet 00:1F:6E:AA:EF:BD;
          fixed-address 192.168.1.100;
          option host-name ciscophone;
    }
    

    3.4 Configuration d’un groupe d’hosts

    Vous pouvez définir un groupe d’hosts avec une section group et passer des paramèrtres qui s’appliqueraient au hosts du groupe :

    group {
          option routers 192.168.1.253;
    
          host superv {
                hardware ethernet 00:1F:6E:AC:54:8E;
                option host-name superv;
                fixed-address 192.168.1.101;
          }
    
          host superv2 {
                hardware ethernet 00:1F:6E:AC:54:8F;
                option host-name superv2;
                fixed-address 192.168.1.102;
          }
    }
    

    3.5 Appliquer des options spécifiques (66,67, 150, etc … )

    Quelques fois vous aurez à passer une option à une machine du réseau (par exemple un téléphone) et lui indiquer un fichier de configuration à prendre, un serveur TFTP, un serveur NTP, etc. …

    Voici comment déclarer une option 66 et 150 à une machine :

    Vous devez déclarer une sorte de schéma dans votre fichier dhcpd.conf :

    option option-66 code 66 text;
    option option-150 code 150 text;
    

    Vous pourrez l’utiliser pour un group, un subnet ou bien encore un host comme ceci :

    option option-66 "192.168.1.252";
    option option-150 "192.168.1.252";
    

    De cette manière lorsque votre téléphone se verra une adresse IP attribuée il recevera l’adresse de son serveur TFTP en option.

    Ce billet n’est qu’une petite partie visible de l’iceberg, si vous recherchez plus loin encore dans la configuration de dhcpd, RTFM !!! Cherchez dans le manuel de dhcpd.conf et dhcpd-options 😉

    Un petit coup de recherche dans vos pages et vous pourrez approfondir, ici vous avez la base pour monter un DHCP, si quelquechose vous semble indispensable, n’hésitez pas à mettre un commentaire 😉