Dynamic Host Configuration Protocol
Die Automatisierung der TCP/IP-Netzwerkadministration lässt sich mit dem DHCP-Protokoll recht erfolgreich durchführen. In diesem Text werden die Grundzüge des Protokolls erklärt. Außerdem werden einige einfache Beispielkonfigurationen besprochen.
DHCP
Über das Dynamic Host Configuration Protocol (DHCP) werden einem Client-Rechner alle nötigen Netzparameter übermittelt.
Siehe DHCP RFC-2131 und andere.
Leistungsmerkmale
DHCP dient der einfachen Zuteilung von Netzwerkinformationen in lokalen TCP/IP-Netzen. Zu diesen Informationen gehören z.B. IP-Nummer, Domainname, Routing und DNS-Server.
Bei Diskless-Workstations bilden DHCP oder BOOTP die Grundlage.
Kurzbeschreibung der Arbeitsweise
Beim Booten kennt der Rechner nur die MAC-Adresse seiner Netzwerkkarte. Diese ist meistens in der Netzwerkhardware (Ethernet, FDDI, Firewire, Wireless LAN) programmiert. Bereiche für MAC-Adressen werden nach einem internationalen Standard von einem Gremium (siehe http://standards.ieee.org/regauth/oui/index.shtml) an die Hersteller der Hardware vergeben. Diese wiederum teilen jedem Netzwerkport eine eindeutige MAC-Adresse zu.
Mit der MAC-Adresse sendet der Rechner eine Rundfrage (Broadcast) ins Netz mit der Bitte, ihm eine Netzwerkkonfiguration mitzuteilen.
Der DHCP-Server wartet auf solche Rundfragen und teilt dem anfragenden Rechner die entsprechenden Daten mit.
Außerdem speichert der Server sowohl die MAC-Adresse des Clients als auch die ihm zugeteilte IP-Adresse in einer Datei. (dhcp.leases)
Diese IP-Adresse wird für eine bestimmte Laufzeit (Lease Time) für diesen Client reserviert. Nach einiger Zeit versucht der Client, seine Adresse beim Server zu erneuern (renewing). Gelingt ihm dies nicht, so fragt er etwas später alle Server nach seiner Adresse (rebinding).
Wird seine Adresse auch nach dieser Anfrage nicht erneuert, muss er alle Netzwerkaktivitäten beenden. Allerdings darf er das DHCP-Protokoll neu beginnen.
DHCP-Nachtichten
- DHCPDISCOVER: Ein Client ohne IP-Adresse sendet eine Broadcast-Anfrage nach Adress-Angeboten an alle DHCP-Server im lokalen Netz.
- DHCPOFFER: Die DHCP-Server antworten mit entsprechenden Werten auf eine DHCPDISCOVER-Anfrage.
- DHCPREQUEST: Der Client fordert eine der angebotenen IP-Adressen, weitere Daten sowie Verlängerung der Lease-Zeit von einem der antwortenden DHCP-Server.
- DHCPACK: Bestätigung des DHCP-Servers zu einer DHCPREQUEST-Anforderung oder die Übermittlung von Konfigurationsparametern, die vorher durch DHCPINFORM vom Client angefordert wurden.
- DHCPNAK: Ablehnung einer DHCPREQUEST-Anforderung durch den DHCP-Server.
- DHCPDECLINE: Ablehnung durch den Client, da die IP-Adresse schon verwendet wird.
- DHCPRELEASE: Der Client gibt die eigene Konfiguration frei, damit die Parameter wieder für andere Clients zur Verfügung stehen.
- DHCPINFORM: Anfrage eines Clients nach weiteren Konfigurationsparametern, z. B. weil der Client eine statische IP-Adresse besitzt.
Arten der Zuteilung von IP-Adressen
Feste IP-Adresse aufgrund der MAC-Adresse
MAC-Adressen und IP-Adresse werden fest in die dhcpd.conf eingetragen. Ausschnitt dhcpd.conf
host test{ hardware ethernet 00:00:c0:5d:bd:95; fixed-address 192.168.0.121; }
Feste IP-Adresse, automatisch zugeteilt, mit Zeitbegrenzung
Hierbei wird die IP-Adresse für eine unbegrenzte (schlecht) oder eine lange Laufzeit zugeteilt.
Hier sollte man die Laufzeit (lease-time) auf einen höheren Wert setzen: Ausschnitt dhcpd.conf file
max-lease-time 432000; # 24*60*60*5 -> 5 Tage subnet 192.168.0.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.0.32 192.168.0.40; }
Dynamische Zuteilung
Die Vorgehensweise ist hier dieselbe wie oben, allerdings wird die Laufzeit auf einen niedrigeren Wert gesetzt.
Konfiguration der Clients
Heute sind die meisten Rechner mit Client-seitiger DHCP-Unterstützung vorkonfiguriert. Das DHCP-Protokoll vereinfacht die Netzwerkonfiguration erheblich.
Beim Client müssen keinerlei rechnerspezifische Netzwerkeinstellungen mehr vorgenommen werden. Im Prinzip muss man den Rechnern nur mitteilen, dass DHCP verwendet werden soll.
DHCP-Client
Linux
pump, dhcpclient, dhcpcd, dhclient. .......
Auch DHCP-Clients können umfangreich konfiguriert werden, siehe /etc/dhcpc/config im Paket dhcpcd. So kann man zum Beispiel verhindern, dass vom DHCP-Server Daten übernommen werden, die eine spezielle Netzwerkkonfiguration überschreiben würden.
BSD
Ebenso wie Linux unterstützen auch BSD-Varianten DHCP als Client und Server.
Windows
Auch neuere Windows-Systeme bieten direkt nach der Installation DHCP-Unterstützung.
Mac
Sofort nach der Installation ist die Unterstützung vorhanden, ob man will oder nicht.
DHCP-Server (www.isc.org)
Die Installation des Servers sollte in den gängigen Distributionen kein Problem sein. Bei Debian z.B. sieht sie folgendermaßen aus:
root@linux # apt-get install dhcp3-server
Bei Debian befindet sich nach der Installation die Konfigurationsdatei /etc/dhcp3/dhcpd.conf auf dem System.
Die Datei ist gut kommentiert, und man sollte sie den eigenen Bedürfnissen anpassen (Domain-Name, IP-Adressen usw.)
Falls man den Server in der Testphase nur von Hand starten möchte, sollte man die Links in den entsprechenden Runleveln löschen.
Debian:
root@linux # update-rc.d -f dhcp3-server remove
Nach der Testphase kann man diese wieder aktivieren, bei Debian z.B. folgendermaßen:
root@linux # update-rc.d dhcp3-server defaults
DHCP-Server handling
Starten des DHCP-Servers
root@linux #/etc/init.d/dhcp3-server start * Starting DHCP server dhcpd3
Stoppen des DHCP-Servers
root@linux #/etc/init.d/dhcp3-server stop * Stopping DHCP server dhcpd3
Kontrolle des DHCP-Servers
- Aktiv
root@linux # pgrep dhcpd3 2164
- Inaktiv
root@linux # pgrep dhcpd3
- Status
root@linux #/etc/init.d/dhcp3-server status Status of DHCP server: dhcpd3 is running.
- Anhand des Ports
root@linux #/ netstat -lnup | grep ":67" udp 0 0 192.168.11.50:67 0.0.0.0:* 2671/dhcpd3
Restarten des DHCP-Servers
root@linux # /etc/init.d/dhcp3-server restart * Stopping DHCP server dhcpd3 [ OK ] * Starting DHCP server dhcpd3
Eine erste Konfigurationsdatei
Alles, was man nicht versteht, kommentiert man zunächst einmal aus. Ich habe das meiste der Übersichtlichkeit halber gelöscht.
minimal dhcp.conf file # # Beispielkonfigurationsdatei für ISC dhcpd3 # Debian 3.0 Woody # # Optionsdefinitionen für alle unterstützten # Netzwerke... # option domain-name "local.invalid"; subnet 192.168.0.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.0.31 192.168.0.40; }
Nun kann der DHCP-Server den DHCP-Clients zehn Adressen dynamisch zuweisen.
Testen des Servers
Auf einem Debian-System sollte nochmals geprüft werden, ob in /etc/default/dhcp3-server das richtige Interface angegeben ist (z.B. eth0).
Danach kann man zum Testen (Debuggen) übergehen.
Starten des Servers:
root@linux # /etc/init.d/dhcp3-server start
Es empfiehlt sich, mit tail -f /var/log/syslog den Startvorgang zu verfolgen, um zu sehen, ob der Server korrekt läuft. "ps ax" bzw. "pidof dhcpd3"
Der folgende Aufruf ist zum Debuggen besser geeignet:
root@linux # dhcpd3 -d -f
Bitte unbedingt die Fehlermeldungen beachten!
Auch ein Blick in die Dateien unter /var/log lohnt sich!
Wird auf einem zweitem Rechner, z.B. Knoppix (Debian von CD), getestet, so verwendet man pump:
root@linux # pump -s
Auf dem Server kann die Anfrage mit
root@linux # tcpdump -e
verfolgt werden.
Dabei muss der Client eine Anfrage absetzen, die vom Server beantwortet wird.
tcpdump Ausgabe (ist leider eine lange Zeile mit \ getrennt) 09:47:32.690249 0:48:54:12:4c:df Broadcast ip 342: \ 0.0.0.0.bootpc > 255.255.255.255.bootps: \ xid:0x1c97abed [|bootp] [tos 0x10] 09:47:32.700021 8:0:46:49:60:8d 0:48:54:12:4c:df \ ip 62: lapwoody.local.invalid > 192.168.0.40: \ icmp: echo request (DF)
Der erste Abschnitt ist die Broadcast-Anfrage des Clients. Danach folgt die Antwort des Servers, in der dieser dem Client eine IP-Adresse mitteilt.
Anmerkung: Wer die Pakete mit ganzem Inhalt sehen möchte, kann für die Aufzeichnung auch ngrep verwenden.
Nun sollte ein einfacher DHCP-Server laufen.
Testen des Clients
Läuft der dhclient?
root@lydia:~# pgrep dhclient3 10173
Beenden des dhclient?
root@lydia:~# pkill dhclient3
Renew des dhclient?
root@lydia:~# dhclient3 eth0 There is already a pid file /var/run/dhclient.pid with pid 10173 removed stale PID file Internet Systems Consortium DHCP Client V3.1.1 Copyright 2004-2008 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ Listening on LPF/eth0/00:16:d3:2e:bb:2e Sending on LPF/eth0/00:16:d3:2e:bb:2e Sending on Socket/fallback DHCPREQUEST of 192.168.178.46 on eth0 to 255.255.255.255 port 67 DHCPACK of 192.168.178.46 from 192.168.178.1 bound to 192.168.178.46 -- renewal in 359492 seconds.
Der Server bekommt weitere Fähigkeiten
Als Nächstes sollten die sinnvollen Standard-Angaben wieder aktiviert werden. Die Optionen, die nicht "ausgeklammert" sind, gelten als Vorgaben für alle späteren Angaben.
config-datei ddns-update-style none; # Wir haben unseren DHCP- nicht mit einem # DNS-Server kombiniert. option domain-name "local.invalid"; option domain-name-servers 192.168.0.1; # Unsere Domain und die Nameserver default-lease-time 600; max-lease-time 7200; # Wann müssen die Adressen, die wir verteilt haben, # erneuert werden? Die Laufzeit ist in Sekunden angegeben, # d.h. alle DHCP-Rechner sollten nach 10 min anfangen, # sich neue Adressen zu holen. Falls die Adresse innerhalb # von 2 Stunden nicht erneuert werden konnte, liegt # irgendein Fehler vor und der Client-Rechner sollte # seine IP-Adressen nicht mehr benutzen. authoritative; # Regelt, welcher DHCP-Server Priorität hat. :-) # Aktivieren, sobald wir fertig sind.
Weiteres
Angabe ob ein DNS Update ausgeführt werden soll, wenn eine IP vergeben wurde
ddns-updates [on | off]
Angabe des Netbios-Nameservers
option netbios-name-servers 192.168.240.21;
Zuteilen einer IP aufgrund von MAC Adresse
host wutz { hardware ethernet 00:50:9c:1a:52:9f; fixed-address 192.168.254.252; }
Schlüssel zum Update von dem DHCP Server an den DNS Server
key DHCP_UPDATER { algorithm HMAC-MD5.SIG-ALG.REG.INT; secret pRP5FapFoJ95JEL06sv4PQ==; };
zone EXAMPLE.ORG. { primary 127.0.0.1; key DHCP_UPDATER; }
zone 17.127.10.in-addr.arpa. { primary 127.0.0.1; key DHCP_UPDATER; }
primary gibt den Server an, dessen Zoneninformation aktualisiert werden soll. Auf dem DNS Server sollte der Update vom DHCP Server erlaubt sein.
Übergabe eines Bootloaders und Rootpfad mittels TFTP bei Netzwerkboot
host xyz { ... filename "/lts/2.6.9-ltsp-3/pxelinux.0"; option root-path "192.168.254.25:/opt/ltsp/i386"; }
Weitere Möglichkeiten mit DHCP
Es gibt globale Angaben, die von lokalen Angaben überschrieben werden können.
Einige Optionen aus: "man dhcpd.conf" und "man dhcp-conf" (offizielle Optionen sind in RFC 2132 beschrieben):
config-datei option domain-name "local.invalid"; option domain-name-servers 192.168.0.1, 192.168.0.2;
Übertragung des Domain-Namens und der DNS-Server.
config-datei option routers 192.168.0.1;
Angabe des Default-Gateway.
Angabe der lokalen Adresse
local-address 192.168.11.50;
Der TFTP Server
next-server 192.168.11.50;
Booloader auf dem TFTP Server
filename "pxelinux.0";
Optionen die für Anwendungen genutzt werden können.
option MGSERVICE code 082 = text; option MGSERVICE "192.168.11.50:8180"; option MCM code 084 = text; option MCM "http://192.168.11.50:8180/mgate/client/";
Log Herkunft
log-facility local7; subnet 192.168.11.0 netmask 255.255.255.0 { range 192.168.11.20 192.168.11.40; option domain-name-servers 192.168.11.50; option routers 192.168.11.1; option root-path "192.168.11.50:/pxeroot";
}
include "/etc/dhcp3/terminals.conf";
Leases
Im Verzeichnis /var/lib/dhcp3 findet man die aktuelle Zuteilungen der IP zu Mac-Adressen
root@linux:/var/lib/dhcp3# cat dhclient.eth0.leases .... lease { interface "eth0"; fixed-address 192.168.11.128; option subnet-mask 255.255.255.0; option dhcp-lease-time 1800; option dhcp-message-type 5; option domain-name-servers 192.168.11.1; option dhcp-server-identifier 192.168.11.254; option broadcast-address 192.168.11.255; option domain-name "localdomain"; renew 3 2009/07/15 15:50:19; rebind 3 2009/07/15 16:01:36; expire 3 2009/07/15 16:05:21; } ....
Links
- http://www.isc.org/products/DHCP/
- http://standards.ieee.org/regauth/oui/index.shtml
- http://www.phystech.com/download/dhcpcd.html
- http://www.rfc-editor.org/ - Bitte dort die Suchmaschine benutzen.
- http://www.linux-praxis.de/linux3/dhcp.html
- http://www.linux-fuer-alle.de/doc_show.php?docid=8
- http://www.linuxwiki.de/DHCP