12.3 DHCP
Der DHCP-Service <DHCP bedeutet Dynamic Host Configuration Protocol und ist der Nachfolger des BOOTP-Protokolls.> dient zur automatischen Konfiguration von Netzwerksystemen. DHCP ist client/server-basiert und funktioniert nach folgendem Schema:
Ein Netzwerkrechner bootet und kennt zum Zeitpunkt X nur die Hardwareadresse seiner Netzwerkschnittstelle (auch MAC-Adresse genannt). Da er als DHCP-Client konfiguriert ist, sendet er eine Broadcast-Nachricht an alle Hosts des Subnetzwerks. Diese Nachricht, die abstrakt gesehen den Inhalt »Ich bitte darum, dass mir irgendjemand eine IP-Adresse gibt« hat, wird vom lokalen DHCP-Server empfangen. Dieser DHCP-Server sendet (adressiert an die MAC-Adresse des DHCP-Clients) die entsprechenden Informationen an den Client. Dabei handelt es sich natürlich hauptsächlich um die jeweilige IP-Adresse, aber auch einige weitere Informationen können zur automatischen Konfiguration des DHCP-Clients versendet werden. Dazu gehören zum Beispiel die Netzmaske oder das Standard-Gateway.
Da DHCP client/server-basiert arbeitet, werden wir uns sowohl mit der Konfiguration des Servers als auch mit der recht einfachen Konfiguration eines Clients beschäftigen.
12.3.1 dhcpd
Doch kommen wir erst einmal zur Server-Software. Normalerweise setzt man hierfür den dhcpd ein, der zum Standardumfang von Unix-Derivaten und Linux-Distributionen gehört. Die Konfigurationsdatei des Dienstes dhcpd.conf befindet sich meistens in /etc.
dhcpd.conf
In der dhcpd.conf legt man nun erst einmal einen Subnet-Block an. Dazu verwendet man das Keyword subnet, gefolgt von der Netzadresse und der Netzmaske, die man via netmask angibt. In geschweiften Klammern werden dann die genaueren Eigenschaften des Subnetz-Blocks definiert.
Netz(maske)
In diesem Beispiel vergeben wir IP-Adressen des Netzes 192.168.1.0 mit der Netzmaske 255.255.255.0. Es gehören also alle IP-Adressen von 192.168.1.1 bis 192.168.1.255 zu diesem Subnetz.
Range
Allerdings sollen wohl fast niemals alle IP-Adressen des gesamten Subnetzes vergeben werden. Schließlich verwendet der DHCP-Server selbst oft eine Adresse, die aus diesem Adressbereich stammt, und zudem sind oftmals noch einige Server und/oder Gateways im Subnetz mit einer festen IP-Adresse platziert. Um eventuelle Probleme mit doppelt vergebenen IP-Adressen zu vermeiden, gibt es das Keyword range. Diesem Keyword folgen die Anfangs- und Endadresse des Adressbereiches, den man durch DHCP zuweisen will – in unserem Fall also alle Adressen von 192.168.1.50 bis 192.168.1.99.
Vergabezeit
Die Zeit, die ein Host über eine Adresse verfügen soll, wird mit dem Schlüsselwort default-lease-time in Sekunden angegeben.
Die Maximalzeit, wie lange eine Adresse vergeben werden darf, wird in derselben Zeiteinheit mit max-lease-time angegeben. Spätestens nach Ablauf dieser Zeitspanne muss der Client eine neue IP-Adresse anfordern.
Gateway, Broadcast, Netmask
Das Standardgateway für die DHCP-Clients im Netzwerk wird mit der Option routers spezifiziert, die Broadcast-Adresse mit broadcast-address und die Subnetzmaske mit subnet-mask.
DNS, WINS, Domain
Es folgt die Angabe eines DNS-Servers, den die Clients verwenden sollen, und – das ist für Windows-Clients wichtig – der WINS-Server des Netzes. Die Standarddomain der Hosts kann durch die Option domain-name angegeben werden.
subnet 192.168.1.0 netmask 255.255.255.0 { # zu vergebender Adressbereich range 192.168.1.50 192.168.1.99; # Vergebe-Zeiten für Adressen default-lease-time 86400; max-lease-time 86400; # Standardgateway option routers 192.168.1.1; option broadcast-address 192.168.1.255; option subnet-mask 255.255.255.0; # DNS-Server option domain-name-servers 192.168.1.11; # Domainname option domain-name "example.org"; # WINS-Server option netbios-name-servers 192.168.1.100; }
Listing 12.9 Beispiel einer dhcpd.conf
Adressreservierung
Nun sollen bestimmte Hosts, etwa Serversysteme <Für Serversysteme sollten eigentlich keine dynamischen Adressen verwendet werden, um deren Verfügbarkeit auch bei einem Ausfall des DHCP-Systems zu gewährleisten und ein »Durcheinander« zu vermeiden.>, immer dieselbe IP-Adresse bekommen. Dazu legt man im jeweiligen Subnetz-Bereich einen Unterbereich über das Keyword host, gefolgt vom entsprechenden Hostnamen, an.
host Fileserver { hardware ethernet 08:00:2b:4c:59:23; fixed-address 192.168.1.222; }
Listing 12.10 Explizite Adressvergabe
DHCP identifiziert einzelne Hosts über die bereits erwähnte MAC-Adresse der Netzwerkkarte. Diese wird über hardware ethernet für Ethernet-Netze angegeben und kann durch ifconfig beim Client erfragt werden.
Mit fixed-address verpasst man dem System dann eine »statische« IP-Adresse.
Start
Gestartet wird der dhcpd direkt über das Binary /usr/sbin/dhcpd oder über ein entsprechendes Initskript.
12.3.2 Client-Konfiguration
Nun müssen die Clients nur noch darauf konfiguriert werden, einen DHCP-Server zu verwenden. Dies geschieht beim Bootvorgang (oder auch für die aktuelle Laufzeit temporär) mit dem allseits beliebten Tool ifconfig.
Unter Linux wird generell während der Systeminstallation abgefragt, wie eine Netzwerkkarte verwendet werden soll. Mit Tools wie netconfig oder yast2 kann man dies aber auch sehr komfortabel nachholen. Wem dieser Luxus nicht vergönnt ist, der kann noch immer auf dhclient zurückgreifen. Dieses Tool konfiguriert einen DHCP-Client und gehört zum Standardumfang der meisten Distributionen. Nach dem Start der Software versucht diese automatisch, die Netzwerk-Interfaces zu konfigurieren, indem DHCP-Server periodisch angesprochen werden. Etwas Besonderes muss man anschließend nicht mehr unternehmen. Wer allerdings ganz bestimmte Vorstellungen davon hat, wie sein DHCP-Client vorgehen soll, der kann dhclient über /etc/dhclient.conf konfigurieren.
Die gleichnamige Manpage enthält weitere Details.
Bedenken Sie aber: dhclient konfiguriert standardmäßig alle Devices automatisch. Möchte man z. B. nur eth0 via DHCP konfigurieren, kann man den Schnittstellennamen als Parameter an dhclient übergeben.
Auf einigen Systemen wird anstelle des Binary dhclient das Programm dhcp-client verwendet.
Die Verwendung ist ebenfalls sehr einfach:
# dhcp-client -i eth1
Listing 12.11 eth1 mittels dhcp-client konfigurieren lassen
Unter OpenBSD erstellt man einfach die Datei /etc/hostname.XXX, wobei XXX die Schnittstellenbezeichnung darstellt (also etwa rl0 oder ne3), und trägt das Keyword dhcp, gefolgt von optionalen Parametern, etwa zur Medium-Konfiguration, ein.