Navigationsleiste   |    Direktzugriff   |    Artikel   |    Home  

DHCP - Server unter Linux



Dieser Artikel beschreibt die Einrichtung eines DHCP - Server (vom Internet Software Consortium) unter Linux, und die Einrichtung von Windows Clients.
Ich setzte mal TCP/IP-, Linux-Grundkenntnisse voraus.



Was ist DHCP und was kann es?

DHCP ist das Dynamic Host Configuration Protocol. Es ist mit BOOTP rückwärts kompatibel und in RFC 2131 [1] definiert.

Mit Hilfe von DHCP erfolgt die Netzwerkeinstellung eines Rechners (des DHCP-Clients) automatisch beim Start.
Diese Einstellung bezieht sich nicht nur auf die IP-Adresse, sondern auch auf den DNS-Server, den Gateway, die Netzwerkmaske, die Domäne, die NetBEUI-Einstellung und so weiter.
Meistens wird DHCP benutzt um dem Rechner beim Start eine IP-Adresse zuzuordnen, diese kann fest auf den Rechner (besser: die Netzwerkkarte) oder auch dynamisch zugewiesen werden.
Alle die keine Standleitung haben und sich ins Internet einwählen kennen die dynamische Adressvergabe; jedes mal bei der Einwahl beim Provider bekommt man eine andere IP-Adresse. Der Provider bedient sich aus einem grossen IP-Adresspool und weist eine im Moment nicht vergebene IP-Adresse zu.

In kleinen Netzen macht dynamische IP-Adressenvergabe durch den DHCP-Server aber kaum Sinn, hier ist die Änderung anderer Netzwerkeinstellungen interessanter. Zum Beispiel ändert man den Gateway, so muß als an allen Clients diese Änderung vornehmen, außer man hat DHCP !!!!!
Ins diesem Fall ändert man die Gateway-Einstellung im DHCP-Server und veranlasst die Benutzer einen Neustart durchzuführen und schon stimmt wieder alles (die Füße freuts) !!

Allerdings, solltest du eines nicht vergessen: Fällt der DHCP-Server aus, kennt keine Workstation ihre Netzwerkkonfiguration !!!
Aber wie oft fällt Linux schon aus ...




Installation von DHCP

Am einfachsten ist es natürlich wenn der DHCP-Server in deiner Distribution enthalten ist. Ist er aber nicht dabei oder du willst die aktuelle Version benutzen, kannst du dir den Quellcode vom ISC-Server [2] runterladen. Ich habe für diesen Artikel Version 3.0b1pl13 benutzt.
Danach die übliche Installation (vorher die README Datei lesen):

[bash]$ tar xfvz dhcp-3_0b1pl13_tar.gz
[bash]$ cd dhcp-3.0b1pl13/
[bash]$ ./configure
[bash]$ make
[root]# make install



Konfiguration


Wahrscheinlich hast du dich schon gefragt, wie der Client den Server nach seiner IP-Adresse fragen kann, wenn er (der Client) noch keine (IP-Adresse) hat?

Ganz einfach: Der Client macht eine Broadcast-Anfrage an Adresse 255.255.255.255 auf Port 67, der Server sieht anhand der MAC-Adresse der Netzwerkkarte wer da anfragt und beantwortet die Anfrage ebenfalls mit einem Broadcast, aber auf Port 68.

Noch ein Wort zur MAC-Adresse: Jede Netzwerkkarte hat eine WELTWEIT einmalige Nummer in der Form 00:10:4a:4b:69:44, diese steht auf der Netzwerkkarte drauf. Nur was macht man wenn die Karte schon im Rechner ist?
Auch kein Problem gib unter Linux einfach
[root]# ifconfig -i eth0

ein und du hast die MAC-Adresse von der ersten Netzwerkkarte. Mit
[root]# arp -a

kriegst du die MAC-Adresse aller Netzwerkkarten die dein Rechner in letzter Zeit angefragt hat. Also, am besten mal kurz alle Rechner im Netz anpingen und du hast alle MAC-Adressen.

Unter Windows machst du folgendes:
Unter Windows9x starte einfach winipcfg.exe (Win-IP-Cfg.exe zum Merken),
unter Windows NT / 2000 im DOS-Fenster ipconfig /all eintippen.
Dort siehst du dann die MAC-Adresse.

SO, fangen wir mal mit dem DHCP-Server an.
Zuerst mußt du auf deinem Server die Adresse 255.255.255.255 der Netzwerkkarte zuordnen:
[root]# route add 255.255.255.255 eth0

Da diese Route aber nach dem nächsten Start wieder weg ist, mußt du sie in eines deiner Startscripte einbauen. Ich habe die Zeile unter meiner SuSE 6.1 im Script /sbin/init.d/route als letzten Eintrag der start Anweisung eingebaut (ein Eintrag in /etc/route.conf funktionierte nicht).

Nun, muß man die Datei dhcpd.leases unter /etc/ hinzufügen:
[root]# touch /etc/dhcpd.leases

Wenn du IP-Adressen dynamisch vergibst, wird in dieser Datei gespeichert seit wann welcher Rechner wie lange welche IP-Adresse hat.
Bei Debian steht die Datei übrigens unter /var/dhcpd/dhcpd.leases Der Server ist nun als DHCP-Server vorbereitet. Es fehlt aber noch das Wichtigste; die Konfigurationsdatei.
Allerdings ist diese nicht so schwer. Ich beschreibe hier mal drei simple Beispiele:


Dynamische IP-Vergabe

Im ersten Beispiel sollen unserer Clients NUR ihre IP-Adresse beim Server abholen und zwar dynamische. Wir haben IP-Adressen von 192.168.24.10 bis 192.168.24.250, die wir vergeben können. Die Datei /etc/dhcpd.conf [3] sieht dann wie folgt aus:

    #ISC DHCP-Server Konfiguration Beispiel 1
    #/etc/dhcpd.conf
    #
    # -> Kommentarzeile

    #Adressen werden dynamisch vergeben

    subnet 192.168.24.0 netmask 255.255.255.0
       {
         range 192.168.24.10 192.168.24.250;
         default-lease-time 86400;
         max-lease-time 2592000;
       }

In den ersten Zeilen stehen nur Kommentare.
Dann legen wir das Netzwerk fest das wir benutzen (subnet 192.168.24.0 netmask 255.255.255.0).
In der nächsten Zeile stehen die Adressen die der Server vergeben darf (von ... bis ....) (range 192.168.24.10 192.168.24.250;). Der Server selber darf natürlich NICHT in diesem Bereich liegen!!
In der folgenden Zeile steht, daß die Adresse eine Gültigkeit von 86400 Sekunden (also 24 Stunden) hat. In dieser Zeit gilt die Adresse, danach holt sich der Client eine neue Adresse (default-lease-time 86400;).
Die nächste Zeit bestimmt die maximale Gültigskeitsdauer die ein Client anfordern kann (max-lease-time 2592000; ( 30Tage)).
Wie fast immer, sind ; und {} EXTREM wichtig!!



Feste IP-Vergabe

Kommen wir zum zweiten Beispiel. In diesem Beispiel holen die Clients ihre Netzwerkkonfiguration ab und bekommen eine feste IP-Adresse, diese ist abhängig von ihrer Netzwerkkarte. Wenn ich weiß welcher Client welche IP-Adresse hat, ist es wesentlich leichter die Linux-Logdateien zu lesen. Die Datei /etc/dhcpd.conf [4] sieht dann wie folgt aus:

    #ISC DHCP-Server Konfiguration Beispiel 2
    #/etc/dhcpd.conf
    #
    # -> Kommentarzeile


    # Folgende Options gelten für alle Rechner
    option domain-name "tuxhausen.de";
    option domain-name-servers 192.168.44.12;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.44.255;
    option routers 192.168.44.10;

    #Verfallsdauer
    default-lease-time 86400;
    max-lease-time 2592000;

    subnet 192.168.44.0 netmask 255.255.255.0
    {

    # Alle Clients bekommen IP-Adresse nach ihrer MAC-Adresse

    host werner
       {
         hardware ethernet 00:10:5f:58:43:9b;
         fixed-address 192.168.44.20;
       }

    host roehrig
       {
         hardware ethernet 00:10:5f:47:3b:05;
         fixed-address 192.168.44.21;
       }

    }
Gut, etwas mehr aber nicht viel schwerer. Ich denke dir sind schon viele Zeilen klar geworden aber hier noch die Erklärung:
Alles was hinter "option" steht, hat etwas mit der Netzwerkkonfiguration und nichts mit der IP-Adresse zu tun.

Zuerst legen wir den Domain-namen fest (option domain-name "tuxhausen.de";),
dann den zu benutzenden Domain-Name-Service-Server (option domain-name-servers 192.168.44.12;),
die Netzwerkmaske ( option subnet-mask 255.255.255.0;),
die Broadcastadresse (option broadcast-address 192.168.44.255;),
sowie den Standart-Router (Gateway) (option routers 192.168.44.10;),
dann noch die Verfallszeiten (default-lease-time 86400; max-lease-time 2592000;).

Jetzt bekommen die Clients ihre IP-Adressen:
Unser Netzwerk (subnet 192.168.44.0 netmask 255.255.255.0 ),
der Client (werner) mit der MAC-Adresse = hardware ethernet 00:10:5f:58:43:9b; bekommt die IP-Adresse = fixed-address 192.168.44.20; ,
und roehrig kriegt Adresse 192.168.44.21, da seine Netzwerkkarte die Adresse 00:10:5f:47:3b:05 hat.

Ich denke, so schwer war das alles nicht oder?
Ich wiederhole nochmals:
Wie fast immer, sind ; und {} EXTREM wichtig!!


Dynamische und Feste IP-Vergabe

Dieser Beispiel erweitert das zweite Beispiel ein wenig.
Das zweite Beispiel war zwar schon schön hat aber einen kleinen Hacken: Was machst du wenn dein Chef mit seinem Laptop ins Büro kommt und einige Dateien vom Server saugen will?
Im Normalfall kannst du deinen DHCP-Server ändern oder eine IP-Adresse am Laptop einstellen. Geht, macht aber Arbeit, es geht wesentlich eleganter:
Im subnet-Teil deiner /etc/dhcpd.conf einfach folgende Zeile einbauen:
    range 192.168.44.100 192.168.44.110;
Damit stehen dir 11 IP-Adressen zur Verfügung, die dynamisch vergeben werden. Diese IP-Adressen werden nur an Rechner vergeben, denen wir keine feste IP-Adresse zuweisen.

Die ganze Konfigurationsdatei /etc/dhcpd.conf [5] sieht dann so aus:

    #ISC DHCP-Server Konfiguration Beispiel 3
    #/etc/dhcpd.conf
    #
    # -> Kommentarzeile


    # Folgende Options gelten für alle Rechner
    option domain-name "tuxhausen.de";
    option domain-name-servers 192.168.44.12;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.44.255;
    option routers 192.168.44.10;

    #Verfallsdauer
    default-lease-time 86400;
    max-lease-time 2592000;

    subnet 192.168.44.0 netmask 255.255.255.0
    {

     # Alle Clients bekommen IP-Adresse nach ihrer MAC-Adresse
     host werner
        {
         hardware ethernet 00:10:5f:58:43:9b;
         fixed-address 192.168.44.20;
        }

     host roehrig
        {
         hardware ethernet 00:10:5f:47:3b:05;
         fixed-address 192.168.44.21;
        }

     #Die Adressen 192.168.44.100 bis 192.168.44.110 werden dynamisch vergeben
       range 192.168.44.100 192.168.44.110;

    }
Diese Konfiguration wende ich auch in der Praxis an.


Starten des DHCP-Servers


Nun gut, starten wir den Server (auf eth0) :
[root]# /usr/sbin/dhcpd -cf /etc/dhcpd.conf -lf /etc/dhcpd.leases

Die Parameter sagen nur, wo das Configfile (-cf /etc/dhcpd.conf) und das Leasefile (-lf /etc/dhcpd.leases) zu finden ist. Standartmäßig erwartet der Server sie unter /var/state/dhcp/, aber ich finde die Files gehören in das /etc/ Verzeichnis.

Dein Server sollte nun etwas wie:

Listening on LPF/eth0/00:10:5b:47:69:84/192.168.44.0
Sending on LPF/eth0/00:10:5b:47:69:84/192.168.44.0

gesagt haben. Wenn ja, herzlichen Glückwunsch dein Server läuft !!!
Wenn nein, nochmals GENAU die /etc/dhcpd.conf und die Log-Dateien durchsehen.

Weitere Startoptionen:
-q ohne Startmeldung Nützlich beim Starten über Scripte (beim Systemstart)
-d Debugmodus  
-f Foreground Dient zum besseren Debugen
eth1  Ethernet 1 Schnittstelle  verwendet eth1 anstelle von eth0

Nun muß man nur noch dafür sorgen, daß der DHCP - Server beim Systemstart auch gestartet wird. Da dies sehr distributionsabhängig ist, gehe ich hier nicht weiter darauf ein. Vielleicht schreibe ich mal ne Anleitung für SuSE.



Clients anpassen (Windows9x / NT)


Bei Windows und Linux (meistens) wirst du schon bei der Installation gefragt ob du einen DHCP-Server hast. Die Antwort ist natürlich JA!!.
Bei Windows kannst du nach der Installation unter /Einstellungen/Netzwerk/TCP,IP/Eigenschaften den DHCP Server nachträglich aktivieren. Lösche außer dem Namen ALLE Netzwerkeinstellungen. Beim nächsten Start sollte dann alles stimmen.

Ob alles funktioniert kannst du so überprüfen:
Auf dem Server sollte in /var/log/messages ein Eintrag in der Form:

May 18 20:23:12 server dhcpd: DHCPDISCOVER from 00:10:5f:58:43:9b via eth0
May 18 20:23:12 server dhcpd: DHCPOFFER on 192.168.44.20 to 00:10:5f:58:43:9b via eth0
May 18 20:23:12 server dhcpd: DHCPREQUEST for 192.168.44.20 from 00:10:5f:58:43:9b via eth0
May 18 20:23:12 server dhcpd: DHCPACK on 192.168.44.20 to 00:10:5f:58:43:9b via eth0

enthalten sein. Hier der Client mit der MAC-Adresse 00:10:5f:58:43:9b die IP-Adresse 192.168.44.20 (sowie die Netzwerkkonfiguration) erhalten.

Auf den Client gehst du so vor:

Unter Windows9x starte einfach winipcfg.exe (Win-IP-Cfg.exe zum Merken).

Unter Windows NT / 2000 im DOS-Fenster ipconfig /all eintippen.
Du solltest nun die richtigen Einstellungen sehen.

Unter Linux habe ich noch keinen DHCP-Client, deshalb sage ich nix dazu!!!
Gut, du bist fertig!! Nimm die nen Keks, und siehe was du wieder geschafft hast :-))



Quellen und weitere Dokus


Zum Einrichten eines DHCP-Server verweise ich auf den sehr guten Pro-Linux Artikel von hjb [6] . Den hab ich auch benutzt, und empfehle ihn gerne weiter!!

Außerdem gibt es das DHCP Mini-HOWTO [7] (englisch).

Und natürlich die üblichen man Pages....




Im Text genannte Links

[1] RFC 2131: http://www.faqs.org/rfcs/rfc2131.html
[2] DHCP Homepage: http://www.isc.org/products/DHCP/
[3] dhcpd.conf Beispiel 1: http://www.tuxhausen.de/sample/sample1_dhcpd.conf
[4] dhcpd.conf Beispiel 2: http://www.tuxhausen.de/sample/sample2_dhcpd.conf
[5] dhcpd.conf Beispiel 3: http://www.tuxhausen.de/sample/sample3_dhcpd.conf
[6] Pro-Linux Artikel: http://www.pl-berichte.de/work/server/andere/dhcpd.html
[7] Mini-HowTo: http://www.oswg.org/oswg-nightly/DHCP.html



Erstellt am: 2000-05-14 Autor: Markus Ungermann (mu@tuxhausen.de)
Letztes Update: 2002-10-15      URL: http://www.tuxhausen.de/software_dhcpd.html