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
ein und du hast die MAC-Adresse von der ersten Netzwerkkarte. Mit
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