Prérequis

Les prérequis pour comprendre cet artcile sont :

  • savoir éditer un fichier texte sous GNU/Linux
  • savoir utiliser le gestionnaire de paquets de sa distribution
  • connaître les termes réseau, sous-réseau, masque de sous-réseau, broadcast, DNS

Outils utilisés

La distribution utilisée comme référence pour cet article est la Debian Sarge, cependant, au cas de l'installation près, les méthodes devraient pouvoir s'appliquer pour n'importe quelle distribution.

Le serveur dhcp utilisé dans cet article est la version 3 du serveur développé par l'Internet Software Consortium (ISC). C'est également la version présente dans la Debian Sarge sous le nom dhcp3-server.

Installation

Pour installer le logiciel, je vous conseille fortement d'utiliser le gestionnaire de paquet présent sur votre distribution, à savoir apt-get pour Debian. Le logiciel étant présent sous le nom de paquet dhcp3-server, il suffit donc de l'installer par le biais de la commande :

shell# apt-get install dhcp3-server
 Reading Package Lists... Done
 Building Dependency Tree... Done
 The following extra packages will be installed:
  dhcp3-common
 The following NEW packages will be installed:
  dhcp3-common dhcp3-server
 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
 Need to get 684kB of archives.
 After unpacking 1439kB of additional disk space will be used.
 Do you want to continue? [Y/n] Y
 Get:1 http://ftp2.fr.debian.org stable/main dhcp3-common 3.0.1-2 [174kB]
 Get:2 http://ftp2.fr.debian.org stable/main dhcp3-server 3.0.1-2 [509kB]
 Fetched 684kB in 5s (125kB/s)
 Preconfiguring packages ...
 
 You can enter one or more valid interface names, like eth0. If you want to serve DHCP
 request on more than one interface, please separate them with spaces. If you want 
 dhcpd to figure out the interface leave this  parameter blank.

 On what network interfaces should the DHCP server listen? eth0
 The DHCP server requires manual configuration after installation!!!

 After the DHCP server is installed you will need to  manually configure  it by editing the file
 /etc/dhcp3/dhcpd.conf. Please note that a sample dhcpd.conf is supplied, but the 
 configuration there is just a sample that requires editing and customization to your own 
 network environment.
 Please configure the DHCP server as soon as the installation finishes.

 The version 3 DHCP server is now non-authoritative by default 

 This means that if a client requests an address that the server knows  nothing about and the
 address is incorrect for that network segment, the server will _not_ send a  DHCPNAK (which 
 tells the client it should stop using the address.) If you want to change this behavior, you must 
 explicitely state in dhcpd.conf what network segments your server is  authoritative for using 
 the 'authoritative' statement.
 Selecting previously deselected package dhcp3-common.
 (Reading database ... 14704 files and directories currently installed.)
 Unpacking dhcp3-common (from .../dhcp3-common_3.0.1-2_i386.deb) ...
 Selecting previously deselected package dhcp3-server.
 Unpacking dhcp3-server (from .../dhcp3-server_3.0.1-2_i386.deb) ...
 Setting up dhcp3-common (3.0.1-2) ...
 Setting up dhcp3-server (3.0.1-2) ...
 Generating /etc/default/dhcp3-server...
 Starting DHCP server: dhcpd3 failed to start - check syslog for diagnostics.
 invoke-rc.d: initscript dhcp3-server, action "start" failed.

Il est tout à fait normal que le lancement du serveur échoue étant donné que nous n'avons pas encore fourni les informations de configuration lui permettant de se lancer.

Configuration simple pour un réseau domestique

Il existe plusieurs moyens de définir la configuration du serveur dhcp. Le choix d'une méthode comparée à une autre se fait notamment par rapport à l'utilisation que l'on veut faire du réseau. Dans notre cas, nous allons tenter de structurer un maximum notre réseau, et donc définir des configurations par sous-réseaux.

Le fichier de configuration du serveur est situé par défaut dans /etc/dhcp3/dhcpd.conf.

La déclaration de la prise en charge d'un sous-réseau se fait à l'aide d'un bloc subnet définissant le sous-réseau considéré et contenant la configuration à appliquer aux clients sur ce dernier.

Ainsi, pour définir la configuration à appliquer au sous-réseau 192.168.50.0/24, on place un bloc tel que celui-ci :

subnet 192.168.50.0 netmask 255.255.255.0 {
      options .....
}

Parmis les options qui nous intéressent :

  • range permet de spécifier les adresses ip à distribuer aux clients;
  • option routers permet de spécifier les passerelles du réseau;
  • option broadcast-adddress permet de spécifier l'adresse de diffusion pour le sous-réseau;
  • option domain-name permet de spécifier le suffixe du domaine associé au sous-réseau;
  • option domain-name-servers permet de spécifier les adresses des serveurs de noms disponibles sur le réseau.

Ainsi le bloc suivant permet de fournir des adresses ips entre 192.168.50.20 et 192.168.50.30 pour le sous-réseau 192.168.50.0/24, et leur fourni l'adresse 192.168.50.1 comme passerelle et 192.168.50.255 comme adresse de broadcast.

subnet 192.168.1.0 netmask 255.255.255.0 {
      range 192.168.1.20 192.168.1.30;
      option routers 192.168.1.1;
      option broadcast-address 192.168.1.255;
}

Configuration plus pointue

Lorsqu'un client demande un adresse par le biais de dhcp, il se la voie attribuer (si elle est disponible) pour une période donnée : le bail. Lorsque le client arrive à mi-chemin de la fin du bail, il tente un renouvellement. Si à la fin du bail, le serveur n'a pas renouvelé ce dernier, alors il expire et le client se voit contraind de céder son adresse courante.

Selon l'utilisation de votre réseau, la durée du bail doit être adaptée. Ainsi, si votre réseau est constitué principalement de machines nomades qui se connectent pour peu de temps, il est préférable de spécifier un bail assez court afin de ne pas gaspiller les adresses. Si toutefois votre réseau est constitué de machines sédentaires connectées à longeur de journée, un bail plutôt long est préférable.

Le bail est spécifié dans le fichier de configuration en secondes grâce aux options min-lease-time, max-lease-time et default-lease-time. Ces options renseignent respectivement :

  • la durée minimum d'un bail en secondes
  • la durée maximum d'un bail en secondes
  • la durée par défaut d'un bail en secondes

La configuration ci-dessous spécifie que le bail par défaut a une durée de 24h, la bail minimum une durée d'une heure et le bail maximum une durée d'une semaine.

subnet 192.168.1.0 netmask 255.255.255.0 {
      range 192.168.1.20 192.168.1.30;
      option routers 192.168.1.1;
      option broadcast-address 192.168.1.255;
      default-lease-time 86400;
      min-lease-time 3600;
      max-lease-time 604800;
}

Pour des raisons de performances sur votre réseau, vous voudrez peut être limiter le nombre de bails simultanés (et donc le nombre de machines connectées en même temps). Pour ce faire, vous pouvez spécifier le nombre maximum de bails simultanés grâce à l'option lease limit suivie du nombre de connexions.

Logguer les négociations

Il peut être intéressant, pour débugger notamment, de logguer les négociations dhcp du serveur. Pour ce faire, il suffit d'ajouter dans le fichier de configuration /etc/dhcp3/dhcpd.conf une ligne du type :

log-facility facility

Ceci permet de spécifier le type de facility à utiliser pour les logs du serveur. Les facilites disponibles dépendent du système de log en place sur le serveur. Je vous conseille notamment les facilities local0-7 qui sont assez génériques.

Il suffit ensuite de spécifier la manière de traiter ces facilities dans la configuration du démon de log. Ainsi pour syslog-ng présent sur Debian, il suffit de rajouter dans le fichier /etc/syslog.conf, une ligne du type :

local7.*     /var/log/dhcpd.log

pour que les journaux du serveu soient enregistrés dans le fichier /var/log/dhcpd.log.

Exemple complet de configuration

ddns-update-style none;
log-facility local7;

# SUBNET CONFIGURATION
subnet 192.168.50.0 netmask 255.255.255.0 {
        # only addresses between 192.168.50.20 and 192.168.50.25
        # are given to machines by DHCP ... others are for admin
        range 192.168.50.20 192.168.50.30;
        # the gateway
        option routers 192.168.50.1;
        # the broadcast address
        option broadcast-address 192.168.50.255;
        # the domain name we give to this subnet
        option domain-name "lan.grdscarabe.net";
        # the DNS for this subnet
        option domain-name-servers 192.168.50.1,212.27.53.252,212.27.54.252;
}

host machine1 {
        hardware ethernet 00:50:fc:45:0a:??;
        fixed-address 192.168.50.10;
}

host machine2 {
        hardware ethernet 00:11:50:15:D6:??;
        fixed-address 192.168.50.11;
}

host machine3 {
        hardware ethernet 00:0e:35:4f:bf:??;
        fixed-address 192.168.50.12;
}

host machine4 {
        hardware ethernet 00:c0:9f:51:a9:??;
        fixed-address 192.168.50.13;
}