Dynamic Host Configuration Protocol

Aus xinux.net
Zur Navigation springen Zur Suche springen

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.

Datei:Example.png

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


Inhaltsverzeichnis