Configuration d'un serveur DHCP

Vous pouvez configurer un serveur DHCP en utilisant le fichier de configuration /etc/dhcpd.conf.

DHCP utilise également le fichier /var/lib/dhcp/dhcpd.leases pour stocker la base de données d'attribution client. Reportez-vous à la la section intitulée Base de données d'attribution pour plus d'informations.

Fichier de configuration

La première étape lors de la configuration d'un serveur DHCP consiste à créer le fichier de configuration stockant les informations réseau pour les clients. Des options globales peuvent être choisies pour tous les clients, ou des options spécifiques pour chaque système client.

Le fichier de configuration peut contenir des tabulations ou lignes vierges complémentaires pour faciliter le formatage. Les mots clés ne sont pas sensibles à la casse, et les lignes commençant par un dièse (#) correspondent à des commentaires.

Il y a deux types d'informations dans le fichier de configuration :

Certains paramètres doivent commencer par le mot-clé option. Les options configurent les options DHCP ; à l'opposé, les paramètres configurent des valeurs qui ne sont pas optionnelles ou contrôlent le comportement du serveur DHCP.

ImportantImportant
 

Si vous modifiez le fichier de configuration, les changements ne prendront pas effet tant que vous n'aurez pas redémarré le démon DHCP avec la commande service dhcpd restart.

Les paramètres (y compris les options) déclarés avant une section entre parenthèses ({ }) sont considérés comme des paramètres globaux. Ceux-ci s'appliquent à toutes les sections se trouvant en dessous.

Dans la Figure 12-1, les options routers, subnet-mask, domain-name, domain-name-servers et time-offset sont utilisées pour apex et raleigh host.

Comme illustré dans la Figure 12-1, vous pouvez déclarer un subnet. Vous devez inclure une déclaration de subnet pour chaque sous-réseau de votre réseau. Sinon, le serveur DHCP ne démarrera pas.

Dans cet exemple, il y a des options globales pour tous les clients DHCP dans le sous-réseau et une gamme range est déclarée. Les clients reçoivent une adresse IP au sein de la range.

subnet 192.168.1.0 netmask 255.255.255.0 {
        option routers                  192.168.1.254;
        option subnet-mask              255.255.255.0;

        option domain-name              "example.com";
        option domain-name-servers       192.168.1.1;

        option time-offset              -5;     # Eastern Standard Time

	range 192.168.1.10 192.168.1.100;
}

Figure 12-1. Exemple de déclaration de sous-réseau

Tous les sous-réseaux partageant le même réseau physique doivent être déclarés dans une déclaration shared-network comme illustré dans la Figure 12-2. Les paramètres se trouvant au sein du shared-network mais en dehors des déclarations subnet sont considérés comme des paramètres globaux. Le nom du fichier shared-network doit correspondre à un titre descriptif du réseau, comme test-lab pour décrire tous les réseaux dans un environnement de labo de tests.

shared-network nom {
    option domain-name              "test.redhat.com";
    option domain-name-servers      ns1.redhat.com, ns2.redhat.com;
    option routers                  192.168.1.254;
    plus de paramètres pour EXEMPLE de réseau partagé
    subnet 192.168.1.0 netmask 255.255.255.0 {
        paramètres pour sous-réseau
        range 192.168.1.1 192.168.1.31;
    }
    subnet 192.168.1.32 netmask 255.255.255.0 {
        paramètres pour sous-réseau
        range 192.168.1.33 192.168.1.63;
    }
}

Figure 12-2. Exemple de déclaration de réseau partagé

Comme illustré dans la Figure 12-3, la déclaration group peut être utilisée pour appliquer des paramètres globaux à un groupe de déclarations. Vous pouvez regrouper des réseaux partagés, des sous-réseaux, des hôtes ou autres.

group {
   option routers                  192.168.1.254;
   option subnet-mask              255.255.255.0;

   option domain-name              "example.com";
   option domain-name-servers       192.168.1.1;

   option time-offset              -5;     # Eastern Standard Time

   host apex {
      option host-name "apex.example.com";
      hardware ethernet 00:A0:78:8E:9E:AA; 
      fixed-address 192.168.1.4;
   }

   host raleigh {
      option host-name "raleigh.example.com";
      hardware ethernet 00:A1:DD:74:C3:F2;
      fixed-address 192.168.1.6;
   }
}

Figure 12-3. Exemple de déclaration de groupe

Pour configurer un serveur DHCP qui attribue des adresses IP dynamiques à un système dans un sous-réseau, modifiez la Figure 12-4 avec vos valeurs. Un temps d'attribution par défaut, un temps d'attribution maximum et des valeurs de configuration réseau pour les clients sont déclarés. Cet exemple assigne une adresse IP dans la gamme range 192.168.1.10 et 192.168.1.100 aux systèmes clients.

default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "example.com";

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
}

Figure 12-4. Exemple du paramètre range

Pour attribuer une adresse IP à un client sur la base de l'adresse MAC de la carte d'interface réseau, utilisez le paramètre hardware ethernet dans une déclaration host. Comme illustré dans la Figure 12-5, la déclaration host apex indique que la carte d'interface réseau avec l'adresse MAC 00:A0:78:8E:9E:AA doit toujours recevoir l'adresse IP 192.168.1.4.

Remarquez que vous pouvez également utiliser le paramètre optionnel host-name pour attribuer un nom d'hôte au client.

host apex {
   option host-name "apex.example.com";
   hardware ethernet 00:A0:78:8E:9E:AA; 
   fixed-address 192.168.1.4;
}

Figure 12-5. Exemple d'adresse IP statique utilisant DHCP

TuyauAstuce
 

Vous pouvez utiliser le modèle de fichier de configuration dans Red Hat Linux 7.2 comme point de départ, puis y ajouter vos propres options de configuration personnalisées. Copiez-le à l'emplacement approprié avec la commande
cp /usr/share/doc/dhcp-<numéro-de-version>/dhcpd.conf.sample /etc/dhcpd.conf
(où <numéro-de-version> correspond à la version DHCP que vous utilisez).

Pour obtenir une liste complète des options et de leur fonction, reportez-vous à la page de manuel dhcp-options.

Base de données d'attribution

Sur le serveur DHCP, le fichier /var/lib/dhcp/dhcpd.leases stocke la base de données d'attribution client DHCP. Ce fichier ne doit pas être modifié manuellement. Les informations d'attribution DHCP pour toutes les adresses IP récemment attribuées sont automatiquement stockées dans cette base de données. Ces informations comprennent la durée de l'attribution, le destinataire de l'attribution d'adresse IP, les dates de début et de fin pour l'attribution et l'adresse MAC de la carte d'interface réseau qui a été utilisée pour l'attribution.

Toutes les heures de la base de données d'attribution sont des heures Greenwich Mean Time (GMT), et non des heures locales.

La première fois que vous lancez le service DHCP, celui-ci ne fonctionnera pas si la base de données d'attribution n'existe pas. Utilisez la commande touch /var/lib/dhcpd.leases pour créer le fichier avant de lancer le serveur pour la première fois. Une fois que le fichier existe et que le serveur a été lancé, n'essayez pas de créer un nouveau fichier de base de données d'attribution.

La base de données d'attribution est recréée de temps en temps de façon à ce que sa taille ne soit pas trop importante. Tout d'abord, toutes les attributions connues sont sauvegardées dans une base de données d'attribution temporaire. Le fichier dhcpd.leases est renommé dhcpd.leases~, et la base de données d'attribution temporaire est copiée dans dhcpd.leases.

Le démon DHCP peut être anéanti, et le système peut se bloquer après que la base de données d'attribution a été renommée avant la création du nouveau fichier. Si c'est ce qui se produit, aucun fichier dhcpd.leases n'est nécessaire pour lancer le service. Si cela se produit, ne créez pas de nouveau fichier d'attribution. Si vous le faites, toutes les anciennes attributions seront perdues, et cela provoquera de nombreux problèmes. Vous devez dans ce cas renommer le fichier de sauvegarde dhcpd.leases~ dhcpd.leases puis lancer le démon.

Lancement et interruption du serveur

ImportantImportant
 

La première fois que vous lancez le serveur DHCP, celui-ci ne fonctionnera pas si le fichier dhcpd.leases n'existe pas. Utilisez la commande touch /var/lib/dhcp/dhcpd.leases pour créer le fichier avant de lancer le service pour la première fois (et la première fois uniquement). Une fois que le fichier existe, vous n'avez plus à réaliser cette opération.

Pour lancer le service DHCP, utilisez la commande /sbin/service dhcpd start. Pour interrompre le serveur DHCP, utilisez la commande /sbin/service dhcpd stop. Si vous voulez que le démon démarre automatiquement à l'amorçage du système, reportez-vous au Chapitre 8 pour en savoir plus sur la gestion des services.

Si vous avez plusieurs interfaces réseau attachées au système, mais que vous voulez que le serveur DHCP ne démarre que sur l'une d'elles, vous pouvez éditer le script d'initialisation. Dans le script situé dans /etc/rc.d/init.d/dhcpd, il y a une section détaillant ce qui se produit lorsque vous tentez de lancer le service :

start() {
        # Start daemons.
        echo -n "Starting dhcpd: "
        daemon /usr/sbin/dhcpd
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/dhcpd
        return $RETVAL
}

Editez la ligne démarrant le démon afin d'inclure le périphérique ethernet sur lequel vous voulez que le serveur DHCP s'exécute :

daemon /usr/sbin/dhcpd eth0

Il s'agit de quelque chose de très utile si vous avez un ordinateur derrière une protection électronique qui dispose de deux cartes réseau. L'une peut être configurée comme client DHCP pour récupérer une adresse IP. L'autre peut servir de serveur DHCP pour le réseau interne se trouvant derrière la protection électronique.

Agent de relais DHCP

L'agent de relais DHCP (dhcrelay) vous permet de relayer les requêtes DHCP et BOOTP d'un sous-réseau ne disposant pas de serveur DHCP vers un ou plusieurs serveurs DHCP sur d'autres sous-réseaux.

Lorsqu'un client DHCP demande des informations, l'agent de relais DHCP transfère la requête à la liste de serveurs DHCP spécifiés lors du démarrage de l'agent de relais DHCP. Lorsqu'un serveur DHCP renvoie une réponse, la réponse est diffusée sur le réseau ayant envoyé la requête d'origine.

Pour démarrer l'agent de relais DHCP, utilisez la commande dhcrelay. Il est possible de le démarrer à l'aide des options suivantes :

Tableau 12-1. Options agent de mise à jour graphique

Descriptionargument
-i Noms des interfaces réseau à configurer. Si aucune interface n'est spécifiée, toutes les interfaces réseau seront configurées, avec élimination des interfaces non-diffusion si possible.
-p Port sur lequel dhcrelay doit écouter. L'agent de relais DHCP transmet les requêtes aux serveurs sur ce port et transmets les réponses aux clients au port suivant celui-ci.
-d Forcez dhcrelay à toujours s'exécuter au premier plan.
-q Désactivation de l'impression de la configuration réseau de dhcrelay au démarrage.