Dynamic Host Configuration Protocol

closeDieser Beitrag gehört zu der Artikelserie LPIC-2

Ein anderer Bestandteil von LPIC 201 ist DHCP.
Doch bevor man sich auf die Installation eines DHCP-Servers stürzt, ist es ganz gut, mal zu wissen, wie das System dahinter funktioniert. Ich habe versucht alles ein bisschen grafisch darzustellen.

IP beziehen

Alles beginnt damit, dass ein Client gerne eine IP-Adresse hätte. Da er aber noch keine DHCP-Server im Netz kennt, schickt der DHCP-Client (auf Client 1) ein DHCPDISCOVER-Paket an den Broadcast. Dieser leitet das an alle Geräte im Netzsegment und über ein Relay auch an andere Netzsegmente weiter. Ist ein DHCP-Server innerhalb des Netzwerkes vorhanden, so wird dieser das Paket aufnehmen, alle anderen Typen werden das verwerfen.

Die DHCP-Server im Netzwerk wissen nun, dass ein Client eine IP sucht und prüfen ob in der lokalen Datenbank noch freie IP-Adressen verfügbar sind. Falls ja, schicken sie ein DHCPOFFER-Paket an den Broadcast mit der für den Client ausgewählten IP-Adresse. Über den Broadcast gelangt das ganze dann wieder zum Client.

Es kann gut sein, dass ein Angebote von mehreren Servern empfängt. Falls dann nichts anderes eingestellt wurde, wird nach dem „First Come First Served“-Prinzip abgerechnet.
Hat sich der Client also für einen Server entschieden, so wird die Bestätigung der IP-Adresse und die ganze andere Konfiguration mit einem DHCPREQUEST-Paket angefragt. Dies geht wieder an den Broadcast, damit die anderen DHCP-Server auch wissen, das sich der Client nicht für sie entschieden hat.

Ist die IP-Adresse auf dem DHCP-Server immer noch verfügbar, so nimmt der Server die IP aus der Liste der Verfügbaren Adressen raus und bestätigt alles mit einem DHCPACK-Paket. Sobald der Client das empfängt, wird die IP-Adresse der Schnittstelle zugewiesen und der Vorgang ist abgeschlossen.

Bestätigen

Wenn nun ein Client rebootet, so muss nicht nochmal der gesamte Prozess von vorne durchlaufen werden. Der Client prüft nach einem Reboot die zuletzt gespeicherten Parameter auf deren Gültigkeit (TTL) und lässt sich alles über ein DHCPREQUEST vom DHCP-Server bestätigen, welcher dann alles wieder mit einem DHCPACK bestätigt. Sollte irgendetwas nicht mehr in Ordnung sein, so lehnt der DHCP-Server die Anfrage mit einem DHCPNACK ab und der Client muss eine neue IP-Adresse beziehen.

Sollte ein Client nun aber so lange laufen, dass die Gültigkeit der Zuweisung (leasing) ablaufen würde, so kann der Client eine Verlängerung beantragen. Im Gegensatz zur Bestätigung nach einem Reboot wird dieser DHCPREQUEST aber direkt an den DHCP-Server adressiert und nicht an den Broadcast. Danach folgt die bereits oben beschriebene Bestätigung oder Ablehnung.

DHCP-Server aufsetzen

So nachdem wir nun wissen, wie das System hinter DHCP funktioniert, können wir uns an die Installation eines eigenen DHCP-Server machen:

apt-get install dhcp3-server

Konfiguriert wird alles über die Datei /etc/dhcp/dhcpd.conf.
Eine ziemlich rudimentäre Konfiguration könnte so aussehen:

root@master:/etc/dhcp# cat dhcpd.conf 
ddns-update-style none;
option domain-name "encodingit.ch";
option domain-name-servers master.encodingit.ch;

default-lease-time 600;
max-lease-time 7200;

authoritative;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.50 192.168.1.80;
  option domain-name-servers master.encodingit.ch;
  option routers 192.168.1.1;
  option broadcast-address 192.168.1.255;
  default-lease-time 700;
  max-lease-time 7800;
}

host master {
  hardware ethernet 08:00:07:26:c0:a5;
  fixed-address 192.168.1.49;
}

Dabei wird ein Range von 50-80 festgelegt und zusätzlich ein Host „master“ definiert, welcher immer die selbe IP-Adresse erhalten wird.
Zu Beginn in der Datei kann man Standardkonfigurationen festlegen, welche solange gelten, wie diese nicht innerhalb eines Subnets überschrieben werden, wie in meinem Beispiel ja der Fall.

Nun muss man noch alles starten:

dhcpd eth0

Dynamische IP für Client

Nachdem unser Server nun rennt, muss noch der Client auf DHCP umgestellt werden.
Dafür ist die Datei /etc/network/interfaces verantwortlich. Diese wird mit folgendem Inhalt ersetzt:

auto lo 
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp

Wichtig hier ist die letzte Zeile mit dem Vermerk „dhcp“. Natürlich soll nicht bei jedem System das Interface eth0 eine dynamische IP beziehen, also zuerst überlegen und nicht einfach abschreiben 😉
Damit auch alles aktiv wird, noch rasch den Netzwerkservice neu starten:

/etc/init.d/networking restart

Und nun sollte das Interface eine IP-Adresse besitzen:

root@master:/etc/dhcp# ifconfig eth0
eth0      Link encap:Ethernet  Hardware Adresse 00:25:64:c9:b1:6a  
          inet Adresse:10.128.101.26  Bcast:10.128.101.255  Maske:255.255.255.0
          inet6-Adresse: fe80::225:64ff:fec9:b16a/64 Gültigkeitsbereich:Verbindung

DHCP-Relay

Das Relay dient dazu, um auch die DHCP in einem anderen Netzsegment zu erreichen.
Installiert ist ein Relay relativ einfach:

apt-get install isc-dhcp-relay

Während der Installation gibt man die IP des DHCPs an, zu welchem man weiterleiten möchte und schlussendlich noch das Interface, auf welche auf DHCP-Traffic gehorcht wird. Zwei mal Bestätigen und fertig!

Probleme

Bei Problemen kann die Syslog-Datei mehr Informationen liefern:

tail -f /var/log/syslog

Oder man kontrolliert den Traffic von Hand:

dhcpdump

Und fertig ist die dynamische IP-Vergabe im eigenen Netzwerk.

7 Kommentare bei „Dynamic Host Configuration Protocol

  1. Gehört DHCP nicht zur Prüfung 202?

    In den Zielen für die 201 von der offiziellen Seite steht jedenfalls nix davon drin: http://lpi.org/eng/certification/the_lpic_program/lpic_2/exam_201_detailed_objectives

    Wohl aber in den Zielen für die 202:
    http://lpi.org/eng/certification/the_lpic_program/lpic_2/exam_202_detailed_objectives
    Topic 210 Network Client Management
    210.1 DHCP configuration

    Bitte prüfe das mal nach, wer von uns Recht hat. Nur um sicherzugehen, dass Du auch die richtigen Sachen lernst … Die Ziele haben sich im April 2009 geändert… Für die 202 lerne ich im Moment jedenfalls auch DHCP… danke für den Post… 🙂

    1. Du hast recht! Nachdem ich alles durchgearbeitet habe, ist mir auch aufgefallen, dass meine Lehrmittel keinen Unterschied machen zwischen 201 und 202 und so habe ich übersehen, dass DHCP eigentlich in 202 gehören würde… Naja, geschadet hats ja nicht 😉

  2. Hi,

    Kleine Korrektur (vermutlich nur ein Typo): „First-Come-First-Serve“, nicht „First-Come-First-Server“. Sonst ein guter, informativer Artikel! Gerne mehr von der Art :).

    Hans

  3. Umfangreich, komplex und informativ ist der Artikel auf jeden Fall. Ich komme da mit einem mal Lesen gar nicht richtig mit. Ich speicherte das jetzt einfach mal in meiner Favoriten-Leiste und lese mir das mehrmals durch. Ob das was bringt, weiß ich noch nicht genau. Aber danke für die genaue Beschreibung … 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.