Client Setup

Thans bestaan er drie veschillende DHCP clientprogramma's voor Linux, dhcpcd, pump en dhclient. Deze mini-HOWTO gaat primair over dhcpcd.

Downloaden van de client daemon (dhcpcd)

Afhankelijk van je distributie, moet je wellicht de DHCP clientdaemon downloaden. Als je het vanuit de broncode wilt compileren, dan heb je het dhcpcd package nodig waarvan de huidige versie, versie 1.3.18 is. Het wordt onderhouden door Sergei Viznyuk en tegenwoordig wordt het bij de meeste distributies als een binair package meegeleverd.

De broncode van dhcpcd kan worden gedownload vanaf de volgende lokaties:

Volg dan de instructies hieronder. Ze zouden hetzelfde moeten zijn:

Slackware

Je kunt de laatste kopie downloaden van DHCPcd vanaf elke Metalab mirror of vanaf:

Download de laatste versie van dhcpcd.tar.gz.

Hiermee zal de directory /etc/dhcpc worden aangemaakt waar DHCPcd de DHCP informatie zal opslaan en het dhcpcd bestand zal worden gekopieerd naar /usr/sbin.

Typ om het systeem te initialiseren met DHCP tijdens het booten:

cd /etc/rc.d

mv rc.inet1 rc.inet1.OLD

Hierdoor zal het oude netwerkinitialisatiescript worden hernoemd in rc.inet1.OLD. Je moet nu het nieuwe rc.inet1 script aanmaken. De volgende code is alles wat je nodig hebt:

#!/bin/sh
#
# rc.inet1      Dit shellscript boot het basis INET systeem.

HOSTNAME=`cat /etc/HOSTNAME` #Dit is waarschijnlijk niet nodig, maar ik
                             # laat het voor wat het is

# Koppel het loopback device aan.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

# ALS JE EEN ETHERNET CONNECTIE HEBT, gebruik je de regels hieronder om de
# eth0 interface te configureren. Gebruik je alleen loopback of SLIP, voeg
# de rest van de regels dan niet in, in dit bestand.

/usr/sbin/dhcpcd

Sla het op en reboot je computer.

Ga naar de laatste stap zodra je klaar bent.

RedHat 6.x en Mandrake 6.x

De configuratie van DHCPcd onder RedHat 6.0+ is echt makkelijk. Je hoeft alleen het Control Panel op te starten door te typen control-panel.

In RedHat 6.x heeft RedHat als standaard en DHCP client opgenomen genaamd pump in plaats van de bovengenoemde dhcpcd. Op de CD-ROM staat wel een dhcpcd RPM, dus probeer dhcpcd als je geen gelukt hebt met pump. Nadat je dhcpcd hebt geïnstalleerd (b.v. rpm -i dhcpcd-1.3.17pl2-1.i386.rpm) dan moet je wat wijzigingen aanbrengen.

Aanvullende notities van Alexander Stevenson :

Ik had geen geluk met DHCPcd. Wat uiteindelijk werkte was "pump", wat wordt meegeleverd met Linux Mandrake 6.0 (en dus veronderstel ik dat het ook is opgenomen in RedHat). De opdracht die ik gebruikte was:

pump -i eth0 -h hostname

Het deed er niet toe wat "hostname" was, maar zonder dat, reageerde de server niet.

Ik wijzigde toen de regel in mijn /sbin/ifup script om de wijziging te weerspiegelen; de standaardversie heeft geen -h switch, en dus werkte niet voor mijn.

Probeer "-h hostname toe te voegen aan de pump regel in het /sbin/ifup script als je gebruik maakt van linuxconf en het na het instellen van de adapter op "DHCP" nog steeds niet werkt. Mijn script ziet er nu ongeveer zo uit:

...
if [ -n "$PUMP" ]; then
    echo -n "Vaststellen van IP informatie voor $DEVICE..."
    if /sbin/pump -i $DEVICE -h hostname; then
        echo " klaar."
    else
        echo " mislukt."
        exit 1
    fi
else ...

Een andere elegantere manier om het hostname veld toe te voegen wordt geleverd door Aad van der Klaauw:

Thans ben ik thuis een gateway systeem aan het configureren, nodig om het MAC adres in te stellen en de '-h hostname' workaround te gebruiken. Dus besloot ik het script *niet* te wijzigen, maar het configure bestand te gebruiken. In mijn /etc/sysconfig/network-scripts/ifcfg-eth0 heb ik het volgende toegevoegd:

DEVICE="eth0"
MACADDR="00:11:22:33:44:55"
DHCP_HOSTNAME="trigger_for_terayon"

het is imho een "zuiverder" manier.

Dat is het. Reboot je machine of tik op de opdrachtregel in /sbin/ifup eth0.

RedHat 5.x

De configuratie van DHCPcd onder RedHat 5.0+ is echt makkelijk. Je hoeft alleen het Control Panel op te starten door te typen control-panel.

Ga naar de laatste stap zodra je klaar bent.

RedHat 4.x en Caldera OpenLinux 1.1/1.2

DHCPcd is opgenomen in de standaard RedHat distributie als een RPM en je kunt het vinden op de CD-ROM van je distributie in de directory RPMS of je kunt het downloaden vanaf:

ftp://ftp.redhat.com/pub/redhat/redhat-4.2/i386/RedHat/RPMS/dhcpcd-0.6-2.i386.rpm

Installeer het met rpm -i dhcpcd-0.6-2.i386.rpm.

Als alternatief kun je je eigen versie compileren door de stappen te volgen uiteengezet in de Slackware.

De volgende informatie werd geleverd door nothing .

Mijn statische ip en naam verwijderd uit /etc/resolv.conf. Ik liet echter de search regel staan en mijn twee nameserver regels (om een of andere reden maakt mijn dhcpcd nooit een /etc/dhcpc/resolv.conf aan, dus moet ik een statisch /etc/resolv.conf gebruiken).

In /etc/sysconfig/network verwijderde ik de HOSTNAME en GATEWAY entry's. Ik liet de andere entry's zoals ze waren (NETWORKING, DOMAINNAME, GATEWAYDEV).

In /etc/sysconfig/network-scripts/ifcfg-eth0 verwijderde ik de IPADDR, NETMASK, NETWORK, en BROADCAST entry's. Ik liet DEVICE en ONBOOT zoals ze waren. Ik wijzigde de BOOTPROTO regel in BOOTPROTO=dhcp.

Sla het bestand op. Reboot je computer.

Ga wanneer je klaar bent naar de laatste stap.

Debian

Er bestaat een deb package van DHCPcd (zorgt dat het begint met dhcpcd) op:

http://ftp.debian.org/debian/dists/slink/main/binary-i386/net/

Of volg de Slackware installatie instructies op.

Pak het deb package uit door in te tikken: dpkg -i /where/ever/your/debian/packages/are/dhcpcd*deb.

Het schijnt dat het configureren van DHCPcd niet nodig is, omdat:

 

Het dhcpcd package installeert zijn opstartscript zoals gewoonlijk voor debian packages in /etc/init.d/package_name, hier als /etc/init.d/dhcpcd, en linkt dit naar de diverse /etc/rc?.d/ directory's.

 
--From: Heiko Schlittermann  

De inhoud van de /etc/rc?.d/ dirs wordt dan tijdens het booten uitgevoerd.

Als je het systeem na de installatie niet opnieuw opstart, dan zou je kunnen overwegen de daemon handmatig te starten: /etc/init.d/dhcpcd start.

Ga naar de laatste stap zodra je klaar bent.

LinuxPPC en MkLinux

De volgende sectie is geschreven door R. Shapiro

Sinds de "1999" (R5) release, is Linuxppc nu bijna volledig compatibel met Redhat 6, met één voorbehoud (zie hieronder). Over het algemeen zijn de instructies exact hetzelfde als voor de huidige release van RedHat 6.x en Mandrake 6.x.

Een probleem dat overblijft is dat Redhat 6 standaard gebruik maakt van de 'pump' client voor dhcp, en 'pump' werkt niet betrouwbaar onder Linuxppc. Om dit te omzeilen zou je de laatste dhcpcd van Sergei Viznyuk moeten downloaden, en dan /sbin/ifup moeten bewerken dat het dhcpcd gebruikt in plaats van pump.

Wijzig

if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then
     PUMP=true
 fi

 if [ -n "$PUMP" ]; then

in

 if [  "$BOOTPROTO" = bootp ]; then
       echo " klaar."
     else
       echo " mislukt."
       exit 1
     fi
 elif [ "$BOOTPROTO" = dhcp ]; then
     echo -n "IP informatie vaststellen voor $DEVICE..."
     if /sbin/dhcpcd -d $DEVICE ; then
       if [ -f /etc/dhcpc/dhcpcd-${DEVICE}.exe ]; then
           /etc/dhcpc/dhcpcd-${DEVICE}.exe
       fi

en corresponderende wijzigingen voor ifdown. Wijzig

if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then
....
fi

in

if [ "$BOOTPROTO" = bootp ]; then
fi

if [ "$BOOTPROTO" = dhcp ]; then
      if [ -f /var/run/dhcpcd-${DEVICE}.pid ]; then
              kill `cat /var/run/dhcpcd-${DEVICE}.pid`
              rm -f /var/run/dhcpcd-${DEVICE}.pid
      fi
fi

Een werkende ppc rpm voor dhcpcd is opgenomen op de Linuxppc 1999 cd; een iets latere rpm is beschikbaar in de contrib directory op ftp://ftp.linuxppc.org/. Broncode, welke kant-en-klaar onder Linux ppc 1999 compileert, is beschikbaar vanaf ftp://ftp.phystech.com/pub/dhcpcd-1.3.17-pl9.tar.gz.

Alles samengenomen

Nadat je machine opnieuw is opgestart, zou je netwerkinterface moeten zijn geconfigureerd. Typ: ifconfig.

Je zou iets moeten krijgen als:

          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 

Als je onder inet addr een normaal nummer ziet, dan ben je klaar. Wanhoop niet als je 0.0.0.0 te zien krijgt, dit is een tijdelijke instelling voor dhcpcd het IP-adres verwerft. Als je zelfs na een paar minuten nog 0.0.0.0 ziet, kijk dan alsjeblieft in Probleemoplossing. DHCPcd is een daemon en die zal blijven draaien zolang je machine aanstaat. Elke drie uur, zal het contact opnemen met de DHCP server en proberen het IP-adres te vernieuwen. Het zal alle berichten in de syslog loggen (onder Slackware /var/adm/syslog, RedHat/OpenLinux /var/log/syslog).

Nog iets als laatste. Je moet je nameserver opgeven. Er zijn twee manieren om dit te doen, je kunt of je provider vragen je de adressen van je nameserver aan te leveren en die dan plaatsen in het bestand /etc/resolv.conf of DHCPcd zal de lijst verkrijgen van de DHCP server en zal een resolv.conf in /etc/dhcpc samenstellen.

Ik besloot gebruik te maken van DHCPcd's resolv.conf door het volgende te doen:

Maak een backup van je oude /etc/resolv.conf: mv /etc/resolv.conf /etc/resolv.conf.OLD

Als de directory /etc/dhcpc nog niet bestaat, maak deze dan aan: mkdir /etc/dhcpc

Maak een link van /etc/dhcpc/resolv.conf naar /etc/resolv.conf: ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf

Probeer als dat niet werkt (correctie aanbevolen door met wat informatie van Henrik Stoerner):

Deze laatste stap moest ik alleen uitvoeren omdat mijn dhcpcd geen /etc/dhcpc/resolv.conf aanmaakt. In /etc/sysconfig/network-scripts/ifup bracht ik de volgende wijzigingen aan (een erg armzalige hack, maar het werkt):

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

Wijzigde ik in:

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

Opmerking

Let op de ! (bang) in if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ];

Leun nu lekker achterover en geniet ervan :-)

Diverse notities

De volgende stappen zijn niet nodig, maar wellicht dat ze voor een aantal mensen van nut zijn:

  1. Als je slechts zo nu en dan netwerkconnectiviteit nodig hebt, dan kun je dhcpcd vanaf de opdrachtregel starten (je moet hier root voor zijn) met: /usr/sbin/dhcpcd.

    Wanneer je het netwerk down wilt brengen, typ je: /usr/sbin/dhcpcd -k.

Probleemoplossing

Als je de hierboven uiteengezette stappen hebt opgevolgd en niet in staat bent het netwerk te benaderen dan zijn hier verscheidene mogelijke redenen voor:

Je netwerkkaart is niet goed geconfigureerd

Tijdens het bootproces probeert Linux je netwerkkaart en zou iets kunnen melden als:

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

Als een dergelijke melding niet verschijnt, dan wordt je ethernetkaart wellicht niet door je Linux systeem herkend. Als je een generic ethernetkaart hebt (een NE2000 kloon) dan zou je een disk moeten hebben ontvangen met DOS-utility's die je kunt gebruiken om de kaart in te stellen. Probeer de IRQ's uit totdat Linux je kaart herkent (IRQ 9, 10 en 12 zijn gewoonlijk goed).

Je DHCP server ondersteunt RFC 1541/Mijn DHCP server is Windows NT

Probeer dhcpcd uit te voeren door het typen van dhcpcd -r.

Gebruik ifconfig om te controleren of je netwerkinterface is geconfigureerd (wacht een paar seconden voor het configuratieproces initieel zal aankomen met Inet.addr=0.0.0.0)

Als dit je probleem oplost, voegt dan de vlag "r" toe aan de opstartscripts, dwz: in plaats van /sbin/dhcpcd krijg je /sbin/dhcpcd -r.

Bewerk bijvoorbeeld onder RedHat het script /etc/sysconfig/network-scripts/ifup en wijzig het volgende:

        IFNAME=$[ {DEVICE} \
        "/sbin/dhcpcd -r -c /etc/"- etc etc.    

Tijdens het booten krijg ik de foutmelding "Using DHCP for eth0 ... failed" maar mijn systeem werkt prima.

Je maakt naar alle waarschijnlijkheid gebruik van RedHat en hebt de instructies niet zorgvuldig opgevolgd :-) In één van de if statements ontbreekt de ! (bang). Spring hier naar toe en controleer hoe het te corrigeren.

Mijn netwerk werkt een paar minuten en reageert dan niet meer

Er zijn meldingen over gated (gateway daemon) die de routing op Linux boxen verknalt wat resulteert in het hierboven beschreven probleem. Controleer of gate wordt uitgevoerd met: ps -auxww | grep gate.

Als dit zo is, probeer het dan te verwijderen met RedHat's RPM manager of verwijder de entry in /etc/rc.d/.

Mijn ethernetkaart wordt tijdens het booten herkend, maar ik krijg nog steeds een "NO DHCPOFFER" melding in mijn logs. Ik heb een PCMCIA ethernetkaart.

Je moet ervoor zorgen dat de 10BaseT poort ("phone" plug) op je netwerkkaart is geactiveerd. De beste manier om dit te verifiëren is te controleren voor welk soort connector je kaart is geconfigureerd tijdens het booten, b.v.

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

Ik heb meldingen ontvangen van laptopgebruikers die dit soort problemen hebben door de PCMCIA utility's (in het bijzonder ifport) die het connector type zouden instellen op 10Base2 (thinnet). Je moet er zeker van zijn dat je 10BaseT gebruikt voor je connectie. Als dit niet zo is, dan moet je de kaart herconfigureren en de computer herstarten.

Mijn DHCP client broadcast verzoeken, maar niemand antwoordt (Aangeleverd door Peter Amstutz)

Op een aantal systemen, moet je een hostnaam voor je machine als onderdeel van het verzoek opnemen. Doe dit met dhcpcd met dhcpcd -h foohost Waarschijnlijk zal de gewenste hostnaam je gebruikersaccountnaam op het netwerk zijn.

Ik heb alle stappen opgevolgd, maar nog steeds is mijn machine niet in staat een verbinding te leggen

De kabelmodem zal gewoonlijk het ethernetadres van je netwerkkaart onthouden, dus als je een nieuwe computer verbindt, of de netwerkkaarten verwisselt, dan zul je op een of andere manier je kabelmodem moeten "leren" de nieuwe computer/kaart te herkennen. Gewoonlijk kun je het modem uitschakelen en het weer inschakelen als de computer aan staat of je zult de technische ondersteuning in moeten schakelen en ze vertellen dat je de netwerkkaart in de computer hebt verwisseld.

Je hebt firewall rules (ipfwadm rules) die geen poort 67/68 verkeer toestaan gebruikt door DHCP om configuratie informatie te distribueren. Controleer zorgvuldig je firewall rules.

Ik heb MediaOne Express service en ik kan nog steeds geen verbinding maken.

Het schijnt dat MediaOne wat dingen heeft toegevoegd aan DHCP die er niet in horen. Vermoedelijk is dit geen probleem meer, maar als je moeilijkheden ondervindt, controleer dan op deze zaken. Als je het (on)geluk hebt Windows NT op je machine te hebben geïnstalleerd, en de Event Viewer activeert, dan zul je waarschuwing te zien krijgen als:

DHCP received an unknown option 067 of length 005. The raw option data is 
given  below.

0000: 62 61 73 69 63            basic

Als dit het probleem is ga dan naar ftp://vanbuer.ddns.org/pub/ en download een binary of haal de broncode op voor de wijziging.

Alternatieve DHCP client (ISC dhclient)

Als je geen succes had met het verkrijgen van je Linux connectie draaiend met dhcpcd, dan wil je wellicht de ISC dhclient proberen. dhclient wordt me de DHCP distributie van ISC geleverd, waarin zowel een DHCP client als een DHCP server is opgenomen. Instructies hoe de DHCP distributie te verkrijgen en compileren zijn te hier te vinden. Wanneer je er klaar mee bent, keer dan naar deze sectie terug om de client te configuren.

Opmerking

De volgende informatie is aangeleverd door Ted Lemon één van de auteurs van dhclient.

Met de huidige versie van de DHCP client, heb je feitelijk geen dhclient.conf nodig. Het enige dat je hoeft te doen is het aanroepen van dhclient b.v.: /sbin/dhclient.

Hiermee zullen alle broadcast interfaces worden geconfigureerd. Als dit niet werkt, of als je slechts één interface wilt, dan maak je een /etc/dhclient.conf bestand aan met deze voorbeeldconfiguratie:

interface "eth0" {
  send dhcp-client-identifier 1:xx:xx:xx:xx:xx:xx;
  send dhcp-lease-time 86400;
}

Hier veronderstellen we dat de ethernet interface eth0 is. Zo niet dan overeenkomstig wijzigen. Vervang bovendien xx:xx:xx:xx:xx door je ethernetadres. Deze dhclient.conf laat de client meer op een Win95 client lijken.