Misfu, le site des cours Informatique/Bureautique/Mathematiques


 

Installer un serveur DHCP sous Linux


DHCP (Dynamic Host Configuration Protocol) est le protocole de configuration dynamique d'hôtes. DHCP permet à des hôtes appartenant à un réseau TCP/IP de demander et d'obtenir l'affectation d'adresse IP, mais aussi de découvrir certaines informations relatives au réseau auquel ils sont rattachés.


DHCP maintient une compatibilité ascendante avec BOOTP. Pour plus d'informations se référer entre autres à la RFC (Request For Comment) 2131 (anciennement la RFC 1541).


La mise en oeuvre de DHCP nécessite l'installation et la configuration de clients d'une part, et de l'autre, l'installation et la configuration d'un serveur.


Configuration des clients


La plupart des distributions fournissent au moins un paquetage pour le client dhcp, dhcpcd précompilé.


On peut distinguer quatre clients DHCP principaux sous Linux :


- Pump est un client combiné BOOTP et DHCP qui permet à votre machine de recupérer les informations de configuration réseau depuis un serveur. Vous devriez installer le package correspondant si vous êtes sur un réseau qui utilise BOOTP ou DHCP.


- dhcp-client est le client DHCP développé par l'Internet Software Consortium. Il est important de noter que le man de dhcp-client sous Linux Mandriva indique clairement que si on veut l'utiliser, il faut modifier le fichier /sbin/ifup. Il indique aussi la modification à opérer. Par ailleurs, dhcp-client constitue le client DHCP qui est installé par défaut sur la Mandriva.


- dhcpxd et dhcpcd constituent les autres clients DHCP qui méritent d'être signalés ici.


Les cdroms de Linux Mandriva comportent tous ces clients au format rpm. Donc on peut les installer en utilisant la commande rpm ou pour aller encore plus vite, la commande urpmi. En cas de problème, se reporter sans hésiter aux mini-howtos indiqués en fin du dossier dans la rubrique bibliographie et aux autres références indiquées.


Pour les besoins du présent dossier, nous avons testé le client dhcpcd.


Bref l'installation ne pose aucun problème. Mais il faut éviter d'installer simultanément plusieurs clients DHCP sur une même machine.


La configuration de dhcpcd peut se faire de plusieurs manières :


1) Par le centre de contrôle Mandriva. Il va sans dire que ceci n'est valable que sur la distribution du même nom.


On peut lancer le centre de contrôle Mandriva en le sélectionnant dans les sous-menus du lanceur d'application.


Puis :


. Sélectionner Réseau et Internet

 

. Cliquer sur Connexion

 

. Cliquer sur le bouton Assistant

 

. Cocher la case 'utiliser la détection automatique' et ensuite cliquer sur le bouton suivant.

. Cocher la case 'Connexion à travers un réseau local (LAN) - carte(s) ethernet détectée(s)'

. Cocher 'Attribution automatique de l'adresse IP' (dans la fenêtre Network & Internet Configuration)


Enfin cliquer sur OK autant de fois que nécessaire pour sortir du centre de contrôle.


2) On peut aller directement sur le module Réseau et Internet du centre de contrôle Mandriva en tapant la commande suivante , à partir de la console :


# draknet


3) Linuxconf et webmin sont aussi deux outils intéressants et efficaces de configuration du client DHCP.


4) Par l'édition du fichier /etc/sysconfig/network-scripts/ifcfg-ethx, où x désigne le rang de l'interface qui sera utilisée par la machine en question pour solliciter les informations réseau (0, 1, 2, etc). Voici deux exemples de ce fichier, le premier correspondant à une affectation dynamique d'adresse IP (par DHCP), le second correspondant à une affectation statique par DNS ou par le fichier /etc/hosts :


# Fichier / etc/sysconfig/network-scripts/ifcfg-eth0 pour client dhcp

DEVICE=eth0

BOOTPROTO=dhcp

ONBOOT=yes

=====================================


# Fichier / etc/sysconfig/network-scripts/ifcfg-eth0 pour machine avec adresse statique.

DEVICE=eth0

BOOTPROTO=static

IPADDR=192.168.0.254

NETMASK=255.255.255.0

NETWORK=192.168.0.0

BROADCAST=192.168.0.255

ONBOOT=yes


Il est par ailleurs vivement recommendé de savoir maintenir la cohérence entre le fichier /etc/sysconfig/network et les fichiers /etc/sysconfig/network-scripts/ifcfg-ethx. A titre indicatif, nous donnons deux versions de fichier /etc/sysconfig/network correspondant respectivement aux deux cas ci-dessus :


#Fichier /etc/sysconfig/network pour client dhcp

NETWORKING=yes

FORWARD_IPV4=false

DOMAINNAME=anfalab.org

==================================================


#Fichier /etc/sysconfig/network pour client non dhcp

NETWORKING=yes

FORWARD_IPV4=false

HOSTNAME=ramses.anfalab.org

DOMAINNAME=anfalab.org


#Si la machine concernée n'est pas une passerelle, ajouter les lignes qui suivent

GATEWAY=192.168.0.1

GATEWAYDEV=eth0


Après les modifications et contrôles des fichiers de configuration il suffit maintenant de redémarrer votre machine ou de taper ce qui suit en s'assurant que le serveur dhcp et le réseau physique sont bien opérationnels :


# /sbin/ifup ethx


sur la ligne de commande ou (surtout en cas de plusieurs interfaces réseau :


# service network restart


Après la réinitialisation de la machine, votre interface réseau devrait être configurée. Pour le vérifier, taper:


# ifconfig -a


On devrait obtenir quelque chose comme ça :


lo Link encap:Local Loopback

inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0

UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1

RX packets:302 errors:0 dropped:0 overruns:0 frame:0

TX packets:302 errors:0 dropped:0 overruns:0 carrier:0 coll:0


eth0 Link encap:Ethernet HWaddr 00:20:AF:EE:05:45

inet addr:24.128.53.102 Bcast:24.128.53.255 Mask:255.255.254.0

^^^^^^^^^^^^^^^^^^^^^^^

UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1

RX packets:24783 errors:1 dropped:1 overruns:0 frame:1

TX packets:11598 errors:0 dropped:0 overruns:0 carrier:0 coll:96

Interrupt:10 Base address:0x300


Si vous avez un nombre à l'air normal dans 'inet addr', c'est bon. Si vous voyez 0.0.0.0, c'est peut-être un résultat temporaire, en attendant que dhcpcd obtienne l'adresse IP.


dhcpcd est un démon qui continuera à tourner tant que votre machine restera allumée. Par défaut, il contactera le serveur DHCP toutes les trois heures pour renouveler l'attribution de l'adresse IP. Il consignera tous les messages dans le journal du système (/var/log/syslog/ sur Red Hat ou Mandriva).


Vous devez préciser vos serveurs de noms. Il existe deux façons de le faire. Vous pouvez demander les adresses de ses serveurs de noms à votre fournisseur d'accès ou à l'administrateur de votre réseau et les mettre dans /etc/resolv.conf. Vous pouvez aussi laisser dhcpcd obtenir la liste des serveurs de noms depuis le serveur DHCP et le laisser créer un resolv.conf adapté dans /etc/dhcpc/. Si vous voulez laisser dhcpd créer resolv.conf, procéder comme ceci :


Sauvegardez votre ancien /etc/resolv.conf :


mv /etc/resolv.conf /etc/resolv.conf.OLD


Si le répertoire /etc/dhcpc/ n'existe pas, créez le


mkdir /etc/dhcpc


Faites un lien de /etc/dhcpc/resolv.conf vers /etc/resolv.conf


ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf



Dans /etc/sysconfig/network-scripts/ifup, effectuer le changement suivant, qui n'est qu'une malheureuse bidouille, mais qui marche :


Changer :


elif [ '$BOOTPROTO' = dhcp -a '$ISALIAS' = no ]; then

echo -n 'Using DHCP for ${DEVICE}... '

/sbin/dhcpcd -c /etc/sysconfig/network-scripts/ifdhcpc-done ${DEVICE}

echo 'echo $$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30' | sh

if [ -f /var/run/dhcp-wait-${DEVICE}.pid ]; then

^^^^

echo 'failed.'

exit 1


en :


elif [ '$BOOTPROTO' = dhcp -a '$ISALIAS' = no ]; then

echo -n 'Using DHCP for ${DEVICE}... '

/sbin/dhcpcd

echo 'echo $$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30' | sh

if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; then

^^^^^^

echo 'failed.'

exit 1


Remarquez le point d'exclamation dans if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ];.


Autre solution si votre client dhcpd ne crée pas de fichier resolv.conf : Enlever l'adresse ip statique ainsi que le nom de la machine dans le fichier /etc/resolv.conf. laisser la ligne search ainsi que mes deux lignes nameserver.


Si vous n'avez besoin de votre connexion qu'occasionnellement, vous pouvez démarrer dhcpcd depuis la ligne de commandes (à condition d'être root) en tapant :


# /usr/sbin/dhcpcd


Quand vous voulez couper la connexion, tapez :


# /usr/sbin/dhcpcd -k


Note importante 1 : L'affectation dynamique d'adresse par DHCP n'est pas compatible avec l'utilisation du fichier /etc/hosts, étant entendu que par définition, l'adresse IP du poste est susceptible de changer à chaque redémarrage du poste.


Installation et configuration du serveur DHCP

Installation du serveur DHCP


Il existe plusieurs serveurs DHCP pour les systèmes d'exploitation 'à la UN*X', aussi bien commerciaux que libres. L'un des plus populaires est le DHCPd de Paul Vixie et de l'Internet Software Consortium (ISC). On peut l'obtenir depuis ftp://ftp.isc.org/isc/dhcp/.


La plupart des distributions fournissent un paquetage dhcpd précompilé. Sous la Mandriva, le paquetage correspondant est : dhcp-server. Mais il nécessite pour être installé, que le paquetage dhcp-common le soit déjà.


Préliminaires pour la configuration


Vérification du support de multicast dans le noyau :

Une fois le serveur installé, il faut vérifier que le noyau de votre système Linux a été bien compilé avec le support multicast. Cette vérification se fait en tapant la commande ifconfig -a. Vous devriez obtenir quelque chose comme ceci :


eth0 Link encap:10Mbps Ethernet HWaddr 00:C0:4F:D3:C4:62

inet addr:183.217.19.43 Bcast:183.217.19.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:2875542 errors:0 dropped:0 overruns:0

TX packets:218647 errors:0 dropped:0 overruns:0

Interrupt:11 Base address:0x210


Si le mot MULTICAST n'apparaît pas, vous devez recompiler votre noyau avec le support multicast. Sur la plupart des systèmes y compris Mandriva, ça ne devrait pas être nécessaire.


Ajout d'une route pour 255.255.255.255

Ensuite, ajoutez une route pour 255.255.255.255. D'après le fichier README du DHCPd :


« .. Pour que dhcpd fonctionne correctement avec des clients DHCP pointilleux (comme les anciens Windows), il doit pouvoir envoyer des paquets IP avec une adresse de destination de 255.255.255.255. Malheureusement, Linux insiste pour changer 255.255.255.255 en l'adresse de diffusion du réseau (ici 192.5.5.223). Ceci constitue une violation du protocole DHCP et, alors que beaucoup de clients DHCP ignorent ce problème, certains (par exemple tous ceux de Microsoft) le remarquent. Les clients qui ont ce problème sembleront ne pas voir les messages DHCPOFFER du serveur. »


Voilà pourquoi, il est nécessaire d'ajouter une route pour 255.255.255.255 pour avoir une configuration pouvant faire face à cette situation aussi. Pour cela, il suffit de taper :


# route add -host 255.255.255.255 dev eth0


Si un message d'erreur comme celle qui suit apparaît :


'255.255.255.255: Unknown host'


il est alors nécessaire d'ajouter la ligne suivante à votre fichier /etc/hosts :


255.255.255.255 tout-le-monde


Et ensuite, essayer :


route add -host tout-le-monde dev eth0


ou


route add 255.255.255.0 dev eth0


eth0 désigne bien sûr l'interface réseau que vous utilisez. Si vous en utilisez une autre, faites les changements nécessaires.


Configuration de DHCP


Le fichier de configuration de DHCPd est /etc/dhcpd.conf. Pour configurer DHCPd, il faut créer ou éditer ce fichier. Il existe une interface graphique pour configurer /etc/dhcpd.conf sous KDE appelée kcmdhcpd.


Si vous préférez configurer dhcpd à la main, suivez les instructions ci-dessous.

La plupart du temps, vous voudrez assigner des adresses IP aléatoirement. Cela peut se faire de la façon suivante :


# Exemple de /etc/dhcpd.conf

# (Ajoutez vos commentaires ici)

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 'anfalab.org';

subnet 192.168.1.0 netmask 255.255.255.0 {

range 192.168.1.10 192.168.1.100;

range 192.168.1.150 192.168.1.200;

}


Le serveur DHCP distribuera aux clients des adresses IP dans les intervalles 192.168.1.10-192.168.1.100 et 192.168.1.150-192.168.1.200. L'attribution de l'adresse IP se fera pour une durée de 600 secondes si le client ne demande pas une durée différente, la durée maximale du bail étant de 7200 secondes. Le serveur va également 'conseiller' au client d'utiliser le masque de sous-réseau 255.255.255.0, l'adresse de diffusion 192.168.1.255, 192.168.1.254 comme routeur/passerelle et 192.168.1.1 et 192.168.1.2 comme serveurs DNS.


Si vous devez spécifier un serveur WINS pour vos clients Windows, vous devrez inclure l'option netbios-name-servers :


option netbios-name-servers 192.168.1.1;

option netbios-dd-server 192.168.1.1;

option netbios-node-type 8;


On peut aussi assigner un nom spécifique en utilisant le nom du client :


host {

hardware ethernet 08:00:2b:4c:59:23;

fixed-address « haagen.anfalab.org »;

}


Attention : Si vous n'avez pas de DNS, il faut avoir un fichier dhcpd.conf utilisant les adresses IP et non les noms des machines puisque le lien, sans DNS, n'est pas possible.


Ainsi on peut aussi assigner des adresses IP spécifiques en utilisant l'adresse ethernet du client :


host haagen {

hardware ethernet 08:00:2b:4c:59:23;

fixed-address 192.168.1.222;

}


Cela assignera l'adresse IP 192.168.1.222 à un client dont l'adresse ethernet est 08:00:2b:4c:59:23.

Vous pouvez aussi mélanger ces différentes possibilités, par exemple si vous voulez donner des adresses IP statiques à certains clients (les serveurs, par exemple) et des adresses IP dynamiques à d'autres (par exemple les ordinateurs portables de certains utilisateurs). Il existe de nombreuses autres options: adresse du serveur NIS, du serveur d'horloge... Pour en savoir plus sur ces options, lire la page de manuel de dhcpd.conf.


Note importante 2 : Après l'installation du serveur DHCP sous Linux Mandriva et après la mise en place du fichier de configuration /etc/dhcpd.conf, il faut nécessairement excécuter le script perl /usr/sbin/update_dhcp.pl. Dans le cas contraire, le démarrage du serveur DHCP échouera et vous aurez systématiquement un message d'erreur concernant une instruction de type ddns-update-style en tentant de le lancer en mode déboguage par la commande :


# /usr/sbin/dhcpd -f -d


Il faut noter que le script perl /usr/sbin/update_dhcp.pl ne fait qu'ajouter une ligne au début du fichier de configuration /etc/dhcpd.conf, ligne qui se présente comme ceci :


ddns-update-style none ;


Vous pouvez procéder vous-même à cette modification et ne pas avoir à lancer ledit script.


Note importante 3: Nous attirons votre attention sur un cas d'école qui nous a donné quelques soucis. Il s'agit d'une machine qui est sur un réseau local et qui joue aussi le rôle de passerelle vers Internet. Il est connecté à internet par son interface eth0 et une connexion ADSL, en tant que client dhcp. Il est connecté au réseau local par son interface eth1. Sur le réseau local, il est serveur DHCP.


Dans ces conditions, si rien n'est fait, le démarrage du serveur DHCP (service dhcpd start) échoue systématiquement, de même que la demande de statut du daemon (service dhcpd status). Aucun message n'est affiché. La raison c'est que le daemon dhcpd est prévu pour travailler sur l'interface eth0 par défaut. La solution consiste à modifier le script d'exécution du daemon (/etc/rc.d/init.d/dhcpd). Il faut y positionner la variable INTERFACES à 'eth1' tout en la décommentant.


La base de données des concessions du client DHCP


Le serveur DHCP de l'Internet Software Consortium conserve une base de donnée persistante des concessions attribuées. Cette base de données est un fichier texte ASCII sans contrainte de forme, contenant une série de déclarations de concessions. Chaque fois qu'une concession est attribuée, renouvelée ou libérée, sa nouvelle valeur est enregistrée à la fin du fichier des concessions. Aussi si plus d'une valeur apparaît pour une concession donnée, la dernière valeur du fichier est la valeur courante.


Il porte le nom dhcpd.leases et est stocké dans les versions récentes de dhcpd dans le répertoire /var/lib/dhcp.


Quand dhcpd est installé pour la première fois, il n'y a pas de base de données de concessions. Or dhcpd requiert une base de données de concessions pour démarrer. C'est pourquoi il est vivement conseillé de créer le fichier correspondant sur la ligne de commandes :


# touch /var/lib/dhcp/dhcpd.leases


Cela va créer un fichier vide (de taille nulle).

Certaines vieilles versions de dhcpd 2.0 plaçaient ce fichier en /etc/dhcpd.leases.


Il est fortement conseillé de ne rien changer dans le fichier; c'est dhcpd qui le manipulera lui-même. Si vous voyez un message d'erreur disant que le fichier n'existe pas, ignorez le et passez à l'étape suivante.


Démarrage du serveur


Vous pouvez maintenant invoquer le serveur DHCP en vous contentant de taper (ou de rajouter dans les scripts de démarrage) :


# /usr/sbin/dhcpd


Cette commande invoquera dhcpd sur l'interface eth0. Pour l'utiliser sur une autre interface, précisez-le simplement sur la ligne de commande, par exemple :


# /usr/sbin/dhcpd eth1


Pour vérifier que tout fonctionne correctement, vous devriez d'abord activer le mode de débogage et mettre le serveur en avant-plan. Vous pouvez le faire en tapant :


# /usr/sbin/dhcpd -d -f


Ensuite, allumez un de vos clients et regardez la console de votre serveur. Vous verrez apparaitre un certain nombre de messages de débogage. Si tout se passe bien, quittez dhcpd et relancez-le sans les options -d -f.


Le fichier qui exécute le daemon au démarrage (lorsque cela est configuré) est : /etc/rc.d/init.d/dhcpd.




Par l'équipe technique A.N.F.A