Mini-HOWTO DHCPcd

Vladimir Vuksan vuksan@veus.hr
Traduction française : Igor Genibel (genibel@emi.u-bordeaux.fr) .

v2.5, Dernière révision: 11 Janvier 1998.
Comment configurer Linux en tant que client DHCP.

Attention: Les informations contenues dans ce document NE SONT PAS officielles et il n'y a aucune garanties quant à la fiabilité des données. Toutes les informations sont fournies de bonne foi. Utilisez les à vos propres risques.

1. Introduction

Ce HOWTO explique comment configurer un système Linux pour fonctionner comme client (DHCPcd) dans un environnement DHCP. Si vous faites des recherches à propos du serveur DHCP, vous aurez besoin de lire le Mini-HOWTO DHCPd situé à: http://sunsite.unc.edu/LDP/HOWTO/mini/DHCPd.

DHCP est un protocole qui permet à une machine cliente d'obtenir des paramètres réseau depuis un serveur. Nombre d'organisations commencent à l'utiliser car il permet de simplifier l'administration réseau spécialement pour de grands réseaux ou bien des réseaux qui possèdent de nombreux utilisateurs mobiles. DHCP est en passe d'être énormément utilisé par les Fournisseurs d'Accès Internet par le câble comme MediaOne Express, Time Warner, etc. De plus amples informations concernant DHCP peuvent être trouvées dans la FAQ DHCP.

2. Le service Road Runner

Si vous utilisez le service Road Runner par le câble allez voir à http://people.qualcomm.com/karn/rr/index.html

Si cela ne résoud pas votre problème, essayez ce qui suit.

3. Noyaux 2.1.x

Si vous utiliser une version de noyau supérieur à 2.0.30 (je ne me souviens pas du nombre exact de plus, www.linuxhq.com est en ce moment hors service) vous pourrez rencontrer des problèmes avec dhcpcd. D'après Dan Khabaza: ``Le changement est dû à la différence dans le paquetage réseau ipv4, dans la façon de définir des valeurs par défaut pour certains champs''

Dan a fourni un patch pour résoudre ce problème que l'on peut obtenir à http://www.cro.net/~vuksan/dhcppatch. Pour l'appliquer, copier le simplement dans le répertoire source de dhcpcd (les instructions pour rapatrier les sources sont situées plus loins) et tapez patch < dhcppatch

dhcpcd devrait se compiler normalement après l'application du patch.

Un autre patch est fourni par Paul Rossington si vous avez des problèmes avec le patch précédent. C'est en fait le fichier if.C entier. Récuperez le à www.cro.net/~vuksan/if.C et copier le dans le répertoire source de dhcpcd.

4. Utilisateurs de la RedHat 5.0

La configuration sous la RedHat 5.0 est extrèmement facile. Tout ce que vous avez à faire est de démarrer panneau de configuration (Control Panel) en tapant:

control-panel
Sélectionnez alors "Configuration Réseau (Network Configuration)" et pour l'interface eth0 définissez DHCP comme protocole. Les autres paramètres devront etre laisse vide.

5. Réseau Token Ring

Si vous essayez d'utiliser dhcpcd sur un réseau Token Ring, celui-ci ne fonctionnera pas. Voici la solution qui m'a été proposée par Henrik Stoener: ``Le problème est que dhcpcd ne connaît que les cartes Ethernet. S'il trouve une carte Token Ring, il refuse de faire quoi que ce soit avec et retourne "interface is not ethernet".

La solution est d'appliquer un simple patch aux sources dhcpcd-0.70. J'ai mis une petite page Web avec le patch, les fichier RPM de RedHat et une version précompilée à http://eolicom.olicom.dk/~storner/dhcp Le patch a été envoyée aux developpeurs, il sera, espérons-le, intégré dans une future version de dhcpcd.''

6. Méthode

6.1 Première étape

Quel que soit la distribution que vous utilisez, vous aurez besoin de télécharger le démon client pour Linux. Le paquetage dont vous avez besoin est appelé dhcpcd et sa version actuelle est 0.70. Le fichier de description du paquetage écrit:

Title:          dhcpcd 
Version:        0.70 
Entered-date:   05MAY97 
Description:    dhcpcd is an RFC2131 compliant DHCP client daemon. It 
                gets an IP address and other information from a 
                corresponding DHCP server, configures the network 
                interface automatically, and tries to renew the lease 
                time according to RFC2131. It works in the RFC1541 
                compliant mode when the '-r' option is specified. 
                So far it is found that dhcpcd 0.70 works fine with
                the 
                following DHCP servers: 
                  1. ISC's dhcpcd-BETA-5.15 
                  2. DHCP server on Windows NT server 3.51 
                  3. DHCP server version 1.3b by WIDE project. 
                  4. DHCP server in the SolarNet PC-Admin 1.5 package 
                  5. DHCP server used in Time Warner Cable's 
                     Internet Access Service
                  6. DHCP server used in Bell Atlantic ADSL
                See the "Changes" file if you want to know the
                difference 
                from the previous version. 
Keywords:       DHCP, client, Linux 
Author:         yoichi@fore.com (Yoichi Hariguchi) 
Maintained-by:  yoichi@fore.com (Yoichi Hariguchi) 
Primary-site:   ftp.kobe-u.ac.jp:/pub/PC-UNIX/Linux/network/dhcp
                33kB dhcpcd-0.70.tar.gz 
Alternate-site: sunsite.unc.edu:/pub/Linux/system/network/daemons 
                33kB dhcpcd-0.70.tar.gz 
Original-site:  
Platforms:       Linux 1.2.xx, 1.3.xx, 2.0.x 
Copying-policy: GPL 

Slackware

Vous pouvez télécharger la dernière copie de DHCPcd depuis n'importe quel mirroir de sunsite ou : ftp://ftp.cdrom.com/pub/linux/sunsite/system/network/daemons/ ftp://ftp.sunsite.unc.edu/pub/Linux/system/network/daemons/

ftp://ftp.lip6.fr/pub/linux/sunsite/system/daemons/ (site de référence en France)

Téléchargez la dernière version de dhcpcd.tar.gz

Décompressez-le: tar -zxvf dhcpcd-0.70.tar.gz,

déplacez-vous dans le répertoire: cd dhcpcd-0.70,

tapez: make.

Vous aurez besoin d'être root pour l'installer en tapant make install.

Cela créera le répertoire /etc/dhcpcd où DHCPcd stockera les paramètres et dhcpcd sera copié dans le répertoire /usr/sbin/. Vous pouvez passer à la deuxième étape.

RedHat

DHCPcd est inclu dans la distribution standard de RedHat sous forme RPM et vous pouvez le trouver dans le répertoire RPMS du CD-ROM contenant la distribution ou bien le télécharger depuis: ftp://tsx-11.edu/pub/linux/distributions/redhat/redhat-4.2/i386/RedHat/RPMS/ le fichier dhcpcd-0.6-2.i386.rpm

et installez-le avec

rpm -i dhcpcd-0.6-2.i386.rpm

Vous pouvez aussi compiler votre propre version en suivant les étapes de la Slackware. Lorsque vous avez fini, passez à l'étape 2.

Debian

Il y a un package pour DHCPcd à: ftp://ftp.debian.org/debian/stable/binary/net/. Vous pouvez aussi suivre les étapes de la Slackware.

Pour décompresser les paquetage tapez: dpkg -i /ou/se/trouve/votre/paquetage/dhcpcd*deb.

Après allez à l'étape 2.

6.2 Deuxième étape

L'(Les) instruction(s) suivante(s) dépend(ent) de vos besoins.

  1. Si vous avez besoin de ressources réseau occasionnellement, vous pouvez lancer dhcpcd depuis la ligne de commande (vous avez besoin d'être root pour l'exécuter) en tapant: /usr/sbin/dhcpcd. Lorsque vous avez besoin d'arréter le service, tapez: /usr/sbin/dhcpcd -k. Il ne vous manque, maintenant, que la configuration du serveur de noms (/etc/resolv.conf). Pour connaître les instructions afin de créer le fichier /etc/resolv.conf allez à l'étape 3.
  2. Si vous souhaitez (avez besoin) d'une connexion permanente, ainsi que l'exécution du démon au démarrage suivez les instructions qui suivent.

Slackware.

Pour que le système utilise DHCP au démarrage tapez: cd /etc/rc.d, mv rc.inet1 rc.inet1.old.

Cela renommera l'ancienne initilisation du réseau en rc.inet1.old. Vous avez maintenant besoin de créer le nouveau fichier rc.inet1. Il devrait ressembler à:

#!/bin/sh
#  
# rc.inet1      This shell script boots up the base INET system.
#
# Version:      @(#)/etc/rc.d/rc.inet1  1.01    05/27/93
#

HOSTNAME=`cat /etc/HOSTNAME` #This is probably not necessary but I
                             #will leave it in anyways

# Attache le peripherique loopback.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

# SI VOUS AVEZ UNE CONNEXION ETHERNET, utilisez les lignes suivantes
# pour configurer votre interface eth0. Si vous utilisez uniquement 
# le loopback ou bien SLIP, il ne faut pas inclure les lignes
# restantes.

/usr/sbin/dhcpcd

Nommez le fichier précédant rc.inet1 et sauvegardez-le. Rebootez votre machine et allez à l'étape 3.

RedHat.

Cette information a été fournie par nothing (nothing@cc.gatech.edu) ``J'ai enlevé mon adresse ip statique ainsi que le nom de ma machine dans le fichier /etc/resolv.conf. Toutefois, j'ai laissé la ligne search ainsi que mes deux lignes nameserver (pour une raison inconnue, mon dhcpcd n'a jamais créé de /etc/dhcpcd/resolv.conf, je dois donc utiliser un /etc/resolv.comf statique).

Dans /etc/sysconfig/network j'ai supprimé les valeurs de HOSTNAME ainsi que de GATEWAY. J'ai laissé les autres entrées comme telles (NETWORKING, DOMAINNAME, GATEWAYDEV).

Dans /etc/sysconfig/network-scripts/ifcfg-eth0 j'ai supprimé les entrées IPADDR, NETMASK, NETWORK, et BROADCAST. J'ai laissé les entrées DEVICE et ONBOOT telles quelles. J'ai modifié la valeur de BOOTPROTO à BOOTPROTO=dhcp.''

Savegardez le fichier et rebootez la machine.

Debian.

Il semblerait qu'il n'y ait pas besoin de configuration pour DHCPcd car: D'après Heik Schlittermann ``Le paquetage dhcpcd installe son script de démarrage comme n'importe quel paquetage dans /etc/init.d/, ici /etc/init.d/dhcpcd, et le lie à différents répertoire /etc/rc?.d. Le contenu des différents /etc/rc?.d/ sont alors exécuté au démarrage. Si vous ne rebootez pas votre machine après l'installation, vous pouvez quand même démarrer le démon manuellement: /etc/init.d/dhcpcd start'' Allez à. l'étape 3.

6.3 Troisième étape

Cette étape devrait être la même pour toutes les distributions.

Après que votre machine ait rebooté, votre interface réseau devrait être configurée. Tapez ifconfig : et vous devriez avoir quelque chose du genre:

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 numéro normal après inet addr, c'est bon. DHCPcd est un démon et continuera de s'exécuter tant que votre machine restera allumée. Toutes les trois heures il contactera le serveur DHCP et essaiera de renouveler le bail de l'adresse IP. Il placera tous les messages journaux dans le "journal système" (pour la Slackware /var/adm/syslog) si vous avez besoin de le consulter.

Une dernière chose. Vous avez besoin de spécifier vos serveurs de noms. Il y a deux manières de le faire, vous pouvez demander à votre fournisseur d'accès de vos donner les adresses de vos serveurs de noms et de les placer dans le fichier /etc/resolv.conf où bien, DHCPcd obtient la liste depuis le serveur DHCP et construira un fichier /etc/dhcpcd/resolv.conf. J'ai décidé d'utiliser les resolv.conf de DHCPcd en faisant les choses suivantes:

Si cela ne marche pas, essayez cela (proposé par nothing@cc.gatech.edu avec une retouche de Henrik Stoerner)

Cette dernière étape doit être exécutée seulement si dhcpcd ne crée pas le /etc/dhcpcd/resolv.conf. Dans le fichier /etc/sysconfig/network-scripts/ifup j'ai effectué les modifications suivantes (qui sont vraiment de petites bidouilles, mais qui marchent pour moi).

#################################
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
################################# 
Je l'ai changé 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
#################################

Notez le ! (point d'interrogation) dans le if [ ! -f /var/run/dhcp-wait-$(DEVICE).pid ] ; Maintenant asseyez vous et contemplez <:^}

7. Problèmes

Si vous avez suivi les étapes particulières et qu'il vous est impossible d'accéder au réseau, il y a peut-être des explications:

7.1 Votre carte réseau n'est pas correctement configurée.

Pendant le processus de démarrage votre système Linux interroge votre carte réseau et devrait dire quelque chose comme ceci:

eth0: 3c509 at 0x300 tag 1, 10baseT port, address  00 20 af ee 11 11, IRQ 10.
3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov

Si un message similaire n'apparaît pas, il semblerait que votre carte réseau ne soit pas reconnue par votre système Linux. Si vous possédez une carte générique (un clône ne2000) vous avez certainement dû recevoir un disquette avec des utilitaires Dos qui vous permettent de configurer la carte. Essayez plusieurs IRQ jusqu'à ce que Linux reconnaisse votre carte. (les IRQ 9,10,12 sont généralement bon).

7.2 Votre serveur DHCP supporte la RFC 1541.

Essayez de lancer dhcpcd en tapant: dhcpcd -r. Utilisez ifconfig pour contrôler la configuration de votre carte (attendez quelques secondes pour le processus de configuration, initialement il doit donner inet. addr=0.0.0.0). Si cette solution résoud votre problème, ajoutez l'option ``-r'' aux scripts de démarrage présentés à l'étape 2. ie. Au lieu de /usr/sbin/dhcpcd vous devrez avoir /usr/sbin/dhcpcd -r.

7.3 ``Durant le démarrage j'obtiens le message suivant "Using DHCP for eth0 ... failed mais mon système continue de fonctionner normallement.''

Vous êtes pour la plupart des utilisateurs de la distribution RedHat, et vous n'avez pas suivi avec assez d'attention les intructions précédantes :-). Vous oubliez le ! (point d'exclamation) dans une des instructions if. Retournez en arrière et lisez-le encore une fois.




Merci à toutes les personnes qui ont contribué grâce à leurs idées et leurs suggestions. Spécialement à:
Heiko Schlittermann (heiko@os.inf.tu-dresden.de)

Jonathan Smith (jps2@ra.msstate.edu)

Dan Khabaza (dany@iil.intel.com)

Hal Sadofsky (sadofsky@math.uoregon.edu)

Henrik Stoener (henrik_stoener@olicom.dk)

Paul Rossington (paulrossington@unn.unisys.com)