Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

10.2. Configuration d'un serveur DHCP

Le package dhcp contient un serveur ISC (Internet Systems Consortium) DHCP. Installez le package en tant qu'utilisateur root :
~]# yum install dhcp
En installant le paquet dhcp, vous allez créer un fichier, /etc/dhcp/dhcpd.conf, qui correspond tout simplement à un fichier de configuration vide. En tant qu'utilisateur root, exécutez la commande suivante :
~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#uet
On peut trouver l'exemple de configuration dans /usr/share/doc/dhcp-version;/dhcpd .conf.example. Vous devez utiliser ce fichier pour pouvoir configurer /etc/dhcp/dhcpd.conf, expliqué en détails ci-dessous.
DHCP utilise également le fichier /var/lib/dhcpd/dhcpd.leases pour stocker la base de données d'attribution client. Voir Section 10.2.2, « Base de données d'attribution » pour plus d'informations.

10.2.1. Fichier de configuration

La première étape pour configurer un serveur DHCP consiste à créer le fichier de configuration qui stocke les informations réseau des clients. Utiliser ce fichier pour déclarer des options dans les systèmes clients.
Le fichier de configuration peut contenir des tabulations ou lignes vierges complémentaires pour faciliter le formatage. Les mots-clés sont sensibles à la casse et les lignes commençant par un signe dièse (#) correspondent à des commentaires.
Il existe deux types de déclarations dans le fichier de configuration :
  • Paramètres - expliquent comment effectuer une tâche, quand l'effectuer, ou quelles options de configuration donner au client.
  • Déclarations - décrit la topologie du réseau, les clients, donne des adresses aux clients, ou applique un groupe de paramètres à un groupe de déclarations.
Les paramètres qui commencent avec le mot-clé option sont considérés comme des options. Ces options configurent les options DHCP, alors que les paramètres eux, configurent des valeurs qui ne sont pas facultatives ou contrôlent le comportement du serveur DHCP.
Les paramètres (y compris les options) déclarés avant une section entre accolades ({ }) sont considérés comme des paramètres globaux. Ceux-ci s'appliquent à toutes les sections se trouvant en dessous.

Important

Si le fichier de configuration est modifié, les changements ne pourront pas prendre effet tant que le démon DHCP n'aura pas redémarré par la commande systemctl restart dhcpd.

Note

Au lieu de modifier un fichier de configuration DHCP et redémarrer le service à chaque fois, en utilisant la commande omshell, vous pouvez vous connecter, interroger ou modifier la configuration du serveur DHCP de façon interactive. Avec omshell, vous pourrez effectuer tous les changements quand le serveur est en cours d'exécution. Pour plus d'informations sur omshell, voir la page man omshell.
Dans Exemple 10.1, « Déclaration de sous-réseau », les options routers, subnet-mask, domain-search, domain-name-servers, et time-offset sont utilisées pour les énoncés d' hôte déclarés dessous.
Pour chaque sous-réseau servi, et pour chaque sous-réseau auquel le serveur DHCP se connecte, il doit y avoir une déclaration de sous-réseau, qui indique au démon DHCP comment reconnaître qu'une adresse est sur ce sous-réseau. Une déclaration de sous-réseau est exigée pour chaque sous-réseau, même si aucune adresse ne doit être allouée de façon dynamique sur ce sous-réseau.
Dans cet exemple, il y a des options globales pour chaque client DHCP dans le sous-réseau, et une plage est annoncée. Les clients reçoivent une adresse IP incluse dans l'intervalle indiqué.

Exemple 10.1. Déclaration de sous-réseau

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-search              "example.com";
        option domain-name-servers       192.168.1.1;
        option time-offset              -18000;     # Eastern Standard Time
	range 192.168.1.10 192.168.1.100;
}
Pour configurer un serveur DHCP qui alloue une adresse IP à un système se trouvant dans un sous-réseau, modifier les valeurs de l'exemple de Exemple 10.2, « La paramètre « range » de plage ». Il déclare une durée d'allocation par défaut, une durée d'allocation maximale, et des valeurs de configuration de réseau pour les clients. Cet exemple alloue des adresses IP sur les plages de valeurs 192.168.1.10 et 192.168.1.100 aux systèmes clients.

Exemple 10.2. La paramètre « range » de plage

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-search "example.com";
subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
}
Pour assigner une adresse IP à un client sur la base d'une adresse MAC de la carte d'interface de réseau, utiliser le paramètre hardware ethernet qui se trouve dans la déclaration de l' hôte. Comme le montre Exemple 10.3, « Adresse IP statique utilisant DHCP », la déclaration host apex spécifie que la carte d'interface de réseau ayant pour adresse MAC 00:A0:78:8E:9E:AA reçoit toujours l'adresse IP 192.168.1.4.
Notez que vous pouvez également utiliser le paramètre host-name pour assigner un nom d'hôte au client.

Exemple 10.3. Adresse IP statique utilisant DHCP

host apex {
   option host-name "apex.example.com";
   hardware ethernet 00:A0:78:8E:9E:AA;
   fixed-address 192.168.1.4;
}
Red Hat Enterprise Linux 7 prend en charge l'assignation des adresses IP statiques aux interfaces InfiniBand IPoIB. Cependant, comme ces interfaces n'ont pas d'adresse Ethernet de matériel normale, on doit utiliser une méthode différente pour spécifier un identificateur unique pour l'interface IPoIB. On utilise normalement l'option dhcp-client-identifier = pour spécifier le champ dhcp-client-identificateur de l'interface IPoIB. La construction d'hôte de serveur DHCP ne supporte pas plus d'une entrée matériel Ethernet et une entrée de dhcp-client-identifier par hôte. Toutefois, il peut y avoir plus d'une entrée d'adresse fixe et le serveur DHCP répondra automatiquement avec une adresse qui est appropriée au réseau sur lequel la requête DHCP a été reçue.

Exemple 10.4. Adresse IP statique utilisant DHCP sur interfaces multiples

Si une machine a une configuration complexe, par exemple deux interfaces InfiniBand et des interfaces P_Key sur chaque interface physique, ainsi qu'une connexion Ethernet, la construction statique IP peut être utilisée pour cette configuration :
Host apex.0 {
    option host-name “apex.example.com”;
    hardware ethernet 00:A0:78:8E:9E:AA;
    option dhcp-client-identifier=ff:00:00:00:00:00:02:00:00:02:c9:00:00:02:c9:03:00:31:7b:11;
    fixed-address 172.31.0.50,172.31.2.50,172.31.1.50,172.31.3.50;
}

host apex.1 {
    option host-name “apex.example.com”;
    hardware ethernet 00:A0:78:8E:9E:AB;
    option dhcp-client-identifier=ff:00:00:00:00:00:02:00:00:02:c9:00:00:02:c9:03:00:31:7b:12;
    fixed-address 172.31.0.50,172.31.2.50,172.31.1.50,172.31.3.50;
}
Afin de trouver le bon dhcp-client-identifier pour votre périphérique, vous pouvez normalement utiliser le préfixe ff:00:00:00:00:00:02:00:00:02:c9:00 et y ajouter les 8 derniers octets de l'interface IPoIB (qui correspond également au GUID de 8 octets du port InfiniBand du port InfinisBand sur lequel se trouve l'interface IPoIB). Sur certains contrôleurs, ce préfixe n'est pas correct. Dans un tel cas, nous conseillons d'utiliser tcpdump sur le serveur DHCP pour capturer la demande IPoIB DHCP entrante et collecter le dhcp-client-identifier qui convient pour cette capture. Par exemple :
]$ tcpdump -vv -i mlx4_ib0
tcpdump: listening on mlx4_ib0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
23:42:44.131447 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.bootpc > 255.255.255.255.bootps: [udp sum ok] BOOTP/DHCP, Request, length 300, htype 32, hlen 0, xid 0x975cb024, Flags [Broadcast] (0x8000)
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: Discover
            Hostname Option 12, length 10: "rdma-qe-03"
            Parameter-Request Option 55, length 18:
              Subnet-Mask, BR, Time-Zone, Classless-Static-Route
              Domain-Name, Domain-Name-Server, Hostname, YD
              YS, NTP, MTU, Option 119
              Default-Gateway, Classless-Static-Route, Classless-Static-Route-Microsoft, Static-Route
              Option 252, NTP
            Client-ID Option 61, length 20: hardware-type 255, 00:00:00:00:00:02:00:00:02:c9:00:00:02:c9:02:00:21:ac:c1
L'image ci-dessus montre le champ identifiant le client. Le type de matériel 255 correspond aux initiales ff: de l'ID, le reste de l'ID est ensuite cité exactement comme il doit apparaître dans le fichier de configuration de DHCP.
Tous les sous-réseaux qui partagent le même réseau physique doivent être déclarés dans une déclaration de réseau partagé (shared-network), comme indiqué dans Exemple 10.5, « Déclaration de réseau partagé ». Les paramètres qui se trouvent dans le shared-network, mais en dehors des déclarations de sous-réseau clos, sont considérés comme paramètres globaux. Le nom attribué au shared-network doit être un titre descriptif pour le réseau, comme l'utilisation du titre « -test-lab » qui décrit tous les sous-réseaux dans un environnement de test.

Exemple 10.5. Déclaration de réseau partagé

shared-network name {
    option domain-search            "test.redhat.com";
    option domain-name-servers      ns1.redhat.com, ns2.redhat.com;
    option routers                  192.168.0.254;
    #more parameters for EXAMPLE shared-network
    subnet 192.168.1.0 netmask 255.255.252.0 {
        #parameters for subnet
        range 192.168.1.1 192.168.1.254;
    }
    subnet 192.168.2.0 netmask 255.255.252.0 {
        #parameters for subnet
        range 192.168.2.1 192.168.2.254;
    }
}
Comme démontré dans Exemple 10.6, « Déclaration de groupe », la déclaration de groupe est utilisée pour appliquer les paramètres globaux à un groupe de déclarations. Ainsi, les réseaux partagés, les sous-réseaux, et les hôtes peuvent être groupés.

Exemple 10.6. Déclaration de groupe

group {
   option routers                  192.168.1.254;
   option subnet-mask              255.255.255.0;
   option domain-search              "example.com";
   option domain-name-servers       192.168.1.1;
   option time-offset              -18000;     # 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;
   }
}

Note

Vous pouvez utiliser le fichier de configuration donné dans l'exemple pour commencer, et y ajouter des options de configuration personnalisées. Pour copier ce fichier dans l'emplacement qui convient, utiliser la commande suivante en tant qu'utilisateur root :
~]# cp /usr/share/doc/dhcp-version_number/dhcpd.conf.example /etc/dhcp/dhcpd.conf
... avec version_number comme numéro de version DHCP.
Pour obtenir une liste complète des énoncés d'options, et de ce qu'ils font, voir la page man dhcp-options(5).

10.2.2. Base de données d'attribution

Sur le serveur DHCP, le fichier /var/lib/dhcpd/dhcpd.leases stocke la base de données de l'allocation du client DHCP. Ne pas modifiez ce fichier. Les informations d'allocation DHCP pour chaque adresse IP récemment attribuée sont automatiquement stockées dans la base de donnée d'allocation. L'information comprend la durée de l'allocation, à laquelle l'adresse IP a été assignée, les dates de début et de fin de l'allocation et l'adresse MAC de la carte d'interface réseau qui a été utilisée pour récupérer l'allocation.
Toutes les heures de la base de données d'attribution sont des heures "Coordinated Universal Time" (UTC) et non pas des heures locales.
La base de données de l'allocation est recréé de temps en temps pour qu'elle n'atteigne pas des proportions trop élevées. Tout d'abord, toutes la allocations connues sont enregistrés dans une base de données d'allocations temporaires. Le fichier dhcpd.leases est rebaptisé dhcpd.leases~ et la base de données d'allocations temporaires est inscrite dans dhcpd.leases.
Le démon DHCP peut être terminé ou le système peut se bloquer après que la base de données d'allocations a été renommée dans le fichier de sauvegarde, mais avant que le nouveau fichier n'ait été écrit. Dans ce cas, le fichier dhcpd.leases n'existe pas, mais il est nécessaire de démarrer le service. Ne créez de nouveau fichier d'allocation. Si vous le faites, toutes les anciennes allocations seront perdues, ce qui provoquera de nombreux problèmes. La meilleure solution consiste à renommer le fichier de sauvegarde dhcpd.leases~ à dhcpd.leases, et à démarrez le démon.

10.2.3. Lancement et interruption du serveur

Important

Lorsque le serveur DHCP est démarré pour la première fois, il échoue à moins que le fichier dhcpd.leases existe. Vous pouvez utiliser la commande touch /var/lib/dhcpd/dhcpd.leases pour créer le fichier s'il n'existe pas. Si le même serveur exécute également BIND en tant que serveur DNS, cette étape n'est pas nécessaire, car démarrer le service named entraînera une recherche automatique du fichier dhcpd.leases.
Ne pas créer de nouveau fichier d'allocation sur un système qui était en cours d'exécution auparavant. Si vous le faîtes, toutes la anciennes allocations seront perdues, ce qui entraîne de nombreux problèmes. La solution est de renommer le fichier de sauvegarde dhcpd.leases~ en dhcpd.leases, puis démarrer le démon.
Pour démarrer le service DHCP, utiliser la commande suivante :
systemctl start dhcpd.service
Pour arrêter le serveur DHCP, saisir :
systemctl stop dhcpd.service
Par défaut, le service DHCP ne démarre pas à l'amorçage. Pour obtenir des informations sur la façon de configurer le démon pour qu'il démarre automatiquement à l'amorçage, consulter le guide Red Hat Enterprise Linux 7 System Administrator's Guide.
Si plus d'une interface réseau est reliée au système, mais que le serveur DHCP doit seulement écouter les requêtes DHCP sur une des interfaces, configurez le serveur DHCP pour écouter uniquement sur ce périphérique. Le démon DHCP écoute uniquement sur les interfaces pour lesquelles il pourra trouver une déclaration de sous-réseau dans le fichier /etc/dhcp/dhcpd.conf.
Cela est utile si vous avez un ordinateur protégé par un pare-feu et doté de deux cartes réseau. L'une d'elles peut être configurée comme client DHCP pour récupérer une adresse IP d'internet. L'autre carte de réseau peut servir de serveur DHCP pour le réseau interne se trouvant derrière le pare-feu. En ne spécifiant que la carte réseau connectée au réseau interne, votre système sera plus sûr puisque les utilisateurs ne pourront pas se connecter au démon par le biais de l'internet.
Pour spécifier les options de ligne de commandes, copier et éditer le fichier dhcpd.service en tant qu'utilisateur root. Par exemple :
 ~]# cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
~]# vi /etc/systemd/system/dhcpd.service
Modifier la ligne sous la section [Service]:
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid your_interface_name(s)
. Puis, en tant qu'utilisateur root, démarrer le service à nouveau.
~]# systemctl --system daemon-reload
~]# systemctl restart dhcpd
Les options de ligne de commande peuvent se rajouter à ExecStart=/usr/sbin/dhcpd dans le fichier d'unité /etc/systemd/system/dhcpd.service sous la section [Service]. Elles incluent :
  • -pportnum — spécifie le numéro de port UDP sur lequel dhcpd doit écouter. La valeur par défaut est le port 67. Le serveur DHCP transmet les réponses aux clients DHCP à un numéro de port d'un numéro supérieur au numéro de port UDP spécifié. Par exemple, si le port par défaut 67 est utilisé, le serveur écoute les requêtes sur le port 67, et répond au client sur le port 68. Si un port est spécifié ici et que l'agent de relais DHCP est utilisé, le même port que celui sur lequel l'agent de relais DHCP doit écouter, devra être spécifié. Voir Section 10.3, « Agent de relais DHCP » pour plus de détails.
  • -f — exécute le démon en arrière plan. Utilisé uniquement pour le débogage.
  • -d — logue le démon de serveur DHCP en descripteur d'erreur standard. Utilisé surtout pour le débogage. Si non spécifié, la journalisation apparaîtra sur le fichier /var/log/messages.
  • -cf filename — indique l'emplacement du fichier de configuration. L'emplacement par défaut est /etc/dhcp/dhcpd.conf.
  • -lf filename — indique l'emplacement du fichier de base de données d'allocations. Si un fichier de base de données d'allocation existe déjà, il est très important que le même fichier soit utilisé à chaque fois que le serveur DHCP démarre. Il est fortement conseillé d'utiliser cette option à but de débogage sur des machines qui ne soient pas des machines de production. L'emplacement par défaut est /var/lib/dhcpd/dhcpd.leases.
  • -q — ne pas afficher tout le message copyright quand vous démarrez le démon.