Netzwerk-Konfiguration mit DHCP #
DHCP ist ein Verfahren, das die Konfiguration von Netzwerkeigenschaften im LAN vereinheitlicht. Ein Rechner, der konfiguriert werden muss, startet einen sog. DHCP-Client. Dieser sendet ein Datenpaket auf das Netzwerk, das soviel heisst wie "Hallo! Ich bin hier! Ich weiss nicht, wer ich bin und wies weitergeht! Wer kann mir helfen?". Falls jetzt auf diesem Netzwerksegment ein DHCP-Serever installiert ist, kann dieser reagieren und dem Client alle Einstellungen wie seine IP-Adresse, DNS-Server-Adresse, Standard-Gateway (Router), etc. übergeben. Welche Einstellungen unter welchen Umständen wem zugeteilt werden kann natürlich eingestellt werden. Der Client wird dann anhand der MacAdresse identifiziert. Man kann aber auch ohne Identifizierung arbeiten, dann bekommt der Client eine Adresse aus einem freien Adress-Pool.
DHCP-Clients unter Linux #
Wir haben bisher Erfahrung mit zwei Clients:
pump #
Das Debian-Paket pump enthält einen einfachen und gut funktionierenden DHCP-Client, der für normale Anwendungen genau das richtige ist. Er wird z.B. in KnoppixLinux eingesetzt.
dhcp3-client #
Dieses Paket einthält den Standard-DHCP-Client des Internet Software Consortiums. Er hat vielfältige Konfigurationsmöglichkeiten und bietet Mechanismen wie einen Fallback (falls kein Server gefunden wird) und Einstellungen zum Umgang mit mehreren DHCP-Servern.Aufgrund seiner umfangreichen Konfigurationsmöglichkeiten haben wir ihn erstmal für unser Projekt KrefixLinux ausgewählt.
Problem / Fehlerbehebung #
Mit dem mitgelieferten DHCP-Skript gibt es ein zwei kleine Probleme:Wenn man eine Default-lease angibt, d.h. Werte für den Fall, das kein Server existiert, so versucht das Skript, diese Einstellungen zu verifizieren. Das bedeutet, es muss ein Router eingetragen sein und dieser muss mit ping erreichbar sein. Um eine Karte auch ohne bereits existierenden Router konfigurieren zu können, empfehle ich folgende Änderung: Ziemlich am Ende des Skripts /etc/dhcp3/dhclient-script steht eine Zeile
set $new_routersDiese muss ergänzt werden zu:
set $new_routers $new_ip_address
Dadurch wird, falls ein Router angegeben ist, dieser getestet, falls nicht, wird das eigene Interface angepingt (was eigentlich immer klappen sollte). Diese Lösung darf allerdings als Hack gelten, da der eigentliche Sinn des Pings damit unterlaufen wird. Wenn ich es richtig verstehe, kann das Script damit aus mehreren gültigen Leases die richtige herausfinden. Wie kann man das besser lösen?!?
Ein zweites Problem ist, das eine option host-name in einer fallback-lease in der Konfigurations-Datei nicht angenommen wird. Falls man jedoch einen Hostnamen vorkonfiguriert, wird überhaupt keine option host-name (auch nicht vom DHCP-Server) angenommen. Um das zu beheben, muss nach der Zeile
if [ x$reason = xTIMEOUT ]; then
folgendes eingefügt werden:
current_hostname=`hostname` if [ x$current_hostname = x ] || \ [ x$current_hostname = x$old_host_name ]; then if [ x$current_hostname = x ] || \ [ x$new_host_name != x$old_host_name ]; then hostname $new_host_name fi fi
Beispiel-Konfiguration #
/etc/dhcp3/dhcpd.conf #
dhcp3 ermöglicht es (im Gegensatz zu pump), Default-Einstellungen anzugeben, die benutzt werden, wenn kein DHCP-Server gefunden wird. Für unser Projekt KrefixLinux haben wir deshalb folgendes in die Konfiguration geschrieben:
timeout 3; lease { interface "eth0"; fixed-address 192.168.200.1; option host-name "router"; renew 0 2020/1/1 00:00:01; rebind 0 2020/1/1 00:00:01; expire 0 2020/1/1 00:00:01;
} lease { interface "eth1"; fixed-address 192.168.201.1; renew 0 2020/1/1 00:00:01; rebind 0 2020/1/1 00:00:01; expire 0 2020/1/1 00:00:01; } lease { interface "eth2"; fixed-address 192.168.202.1; renew 0 2020/1/1 00:00:01; rebind 0 2020/1/1 00:00:01; expire 0 2020/1/1 00:00:01; } lease { interface "eth3"; fixed-address 192.168.203.1; renew 0 2020/1/1 00:00:01; rebind 0 2020/1/1 00:00:01; expire 0 2020/1/1 00:00:01; }
Durch diese Konfiguration sucht der Rechner auf allen Interfaces nach einem DHCP-Server. Falls er keinen findet, wird das Interface mit einer Standard-Adresse hochgefahren. In diesem Falle "gründet" der Rechner die neuen Netze 192.168.20x.yyy. Passiert das, sind wir nun natürlich für diese Netze verantwortlich und brauchen einen eigenen DHCPServerMitDNS, der den anderen Rechnern, die das Netz noch besiedeln, sagt, wo es langgeht.
Die Interfaces sind alle gleich konfiguriert. Lediglich die Netzwerkadressen sind unterschiedlich. Die angegebenen Leases kommen nur zur Geltung, wenn kein DHCP-Server gefunden wird. Sie sind also nur fallback-Werte. Dennoch müssen sie, was die Daten angeht, gültig sein, um aktiviert zu werden.
/etc/network/interfaces #
In der Datei /etc/network/interfaces werden die Interfaces wie folgt eingetragen:
auto eth0 eth1 eth2 iface eth0 inet dhcp iface eth1 inet dhcp iface eth2 inet dhcp # ... ggf. noch mehr Interfaces angeben, bis zur maximalen Kartenanzahl
Dadurch werden alle Interfaces automatisch hochgefahren und versucht, sie per DHCP zu konfigurieren. Das gibt beim hochfahren zwar Fehlermeldungen, falls gar nicht so viele Netzwerkkarten eingebaut sind, aber das läßt sich wohl nicht vermeiden.
DHCP-Server unter Linux #
Siehe DHCPServerMitDNS