Upline: Infos & Dokus Administration Linux

DHCP Server unter Debian Linux einrichten


Hinweis: Dieses Tutorial wurde im Mai 2006 erstellt, zu diesem Zeitpunkt gab es bereits seit längerem Debian Sarge 3.1, trotzdem basiert diese Anleitung auf der Konfiguration in einem Debian Woody 3.0. Änderungen gegenüber neueren Debian-Versionen (z.B. Debian Sarge) sollten minimal sein. Bei anderen Linux-Distributionen wie z.B. SuSE oder RedHat muss die Paketinstallation entsprechend angepaßt werden, evtl. könnten auch die Pfade zu den conf-Dateien etwas abweichen. Die daraus resultierenden Unterschiede sind nicht in diese Linux DHCP HowTo eingeflossen.


Allgemeines über DHCP

Was ist DHCP und wozu ist es gut?

DHCP wird benötigt, um Netzwerkgeräte (also z.B. die Netzwerkkarte eines Computers) automatisch mit einer IP-Adresse zu versorgen. Heutzutage ist es auch in kleineren (privaten) Netzwerken völlig normal, einen DHCP-Server zu verwenden, da diese in allen aktuellen DSL-Routern bereits integriert sind. Die in solchen Routern integrierten Server haben meistens nicht den vollen Funktionsumfang, der theoretisch möglich ist, bieten aber zumindest die wichtigsten Grundeinstellungen. Was diesen Low-Cost-DSL-Routern nahezu immer fehlt, ist die Möglichkeit, einer bestimmten MAC-Adresse eine vordefinierte IP-Adresse zuzuweisen. Einige können dies allerdings wenigstens für WLAN. Zum einen wäre dies für die Hersteller ein in 99% der Fälle überflüssiger Mehraufwand und zum anderen kann man leistungsfähigere Hardware somit immer noch gewinnbringender verkaufen ;) Mit einem entsprechend konfigurierten Linux-Rechner ist es jedoch kein Problem, auch diese feste Vergabe bequem per vi einzustellen.

Wie funktioniert DHCP?

DHCP steht für das in der RFC 2131 definierte Dynamic Host Configuration Protocol und ist zu BOOTP rückwärts kompatibel. Um einer Netzwerkkarte per DHCP eine IP-Adresse zuweisen zu können, muss der Client sich beim Server melden. Zu diesem Zeitpunkt besitzt die Netzwerkkarte allerdings noch keine IP-Adresse. Daher wird die DHCP-Anfrage über die Broadcastadresse 255.255.255.255 auf Port 67 ins Netz geschickt und enthält die MAC-Adresse der Netzwerkkarte. Alle DHCP-Server, die diesen Broadcast erhalten, können diesen auswerten und entsprechend ihrer Einstellungen beantworten. Deshalb ist unbedingt darauf zu achten, dass es zu keinerlei Konflikten und Überschneidungen zwischen mehreren Servern kommt! Empfängt der zuständige DHCP-Server ein DHCP-Request, so antwortet er ebenfalls auf der Broadcast-Adresse, allerdings mit Port 68.

Installation und Konfiguration des DHCP-Servers

Paketinstallation

Die Paketinstallation erfolgt unter Debian wie üblich:
apt-get install dhcp3-dev dhcp3-server dhcp3-client dhcp3-common
Alternativ kann man die deb-Pakete natürlich auch per Hand herunterladen und mit dpkg -i installieren. Bei anderen Linuxen installiert man die entsprechenden Pakete entweder per Hand aus den zugehörigen rpm-Files oder verwendet z.B. bei SuSE den Yast.

Anpassung der Konfigurationsdateien

/etc/network/interfaces

In der interfaces wird eingestellt, wie die Netzwerkarte(n) ihre IP-Adressen erhalten. Hierzu verwendet man die Schreibweise iface x inet y, wobei für x das jeweilige Kürzel (z.B. eth0 für die erste Netzwerkarte oder lo für das Loopback-Device) verwendet wird. Das y ersetzt man für lo durch loopback und für die "echten" Netzwerkkarten eth0/eth1/... entweder durch dhcp oder static. Bei der Einstellung dhcp bezieht die Netzwerkkarte ihre IP-Adresse von einem DHCP-Server, bei der Einstellung static wird hingegen anschließend eine feste IP-Adresse inkl. aller nötigen Angaben (Netzmaske, Netzwerkadresse, Broadcastadresse, Gatewayadresse) definiert. Da ein DHCP-Server im Normalfall seine IP-Adresse nicht von einem anderen DHCP-Server bezieht, muss die IP wie im folgenden Beispiel festgelegt werden:
auto lo eth0
iface lo inet loopback
iface eth0 inet static
 address 192.168.2.2
 netmask 255.255.255.0
 network 192.168.2.0
 broadcast 192.168.2.255
 gateway 192.168.2.1
Die Gateway-Adresse gibt hierbei den Router an - übernimmt der Server selbst die Routingfunktion, so muss dies natürlich berücksichtigt werden. Als IP-Adresse für den DHCP-Server wurde hier die 192.168.2.2 gewählt, um Probleme mit evtl. vorhandenen DHCP-Servern (z.B. aus DSL-Routern) mit ihren Standardnetzen 192.168.0.0 und 192.168.1.0 zu vermeiden, weiterhin sollte man die statischen Serveradressen entweder von unten (also z.B. die *.2, weil die *.1 schon vom Router belegt ist) oder von oben (also z.B. *.254) beginnend festlegen.

/etc/dhcp3/dhcpd.conf mit dynamischer IP-Vergabe

In der Konfigurationsdatei des dhcp-Deamon dhcpd.conf muss folgendes ergänzt werden:
subnet 192.168.2.0 netmask 255.255.255.0 
{ 
 option domain-name "proteino.local";
 option domain-name-servers 192.168.2.2;
 option routers 192.168.2.1;
 option broadcast-address 192.168.2.255;
 option subnet-mask 255.255.255.0;
 default-lease-time 86400;
 max-lease-time 604800;
 range 192.168.2.10 192.168.2.20;
}
Erklärung der einzelnen Parameter:
  • option domain-name "x"; - nennt den lokalen(!) Domainnamen x
  • option domain-name-servers x; - nennt die IP-Adresse des Nameservers (im Bsp. ist ein bind9 auf dem dhcp-Server installiert)
  • option routers x; - nennt die IP-Adresse des Routers (Gateway)
  • option broadcast-address x; - nennt die Broadcast-Adresse des Netzwerks
  • default-lease-time x; - definiert die Zeit in Sekunden, die ein DHCP-Lease standardmäßig gültig ist. Oft wird als Wert 86400 (entspricht 24h) verwendet, in gut gesicherten kleinen lokalen Netzwerken kann man aber auch ruhig größere Werte verwenden.
  • max-lease-time x; - definiert die Zeit in Sekunden, die ein DHCP-Client für das Lease maximal anfordern kann, meist verwendet man hier 604800 (=7d).
  • range x y; - legt die per DHCP zu vergebende Startadresse x und die Endadresse y fest. Dieser Bereich muss in evtl. vorhandenen anderen DHCP-Servern für das gleiche Netz ausgeschlossen werden und darf keine festen IPs anderer Rechner des Netzwerks beinhalten!
Diese Angaben gelten für im Internet stehende DHCP-Server von Internet Service Providern (ISP) natürlich nur in entsprechend angepaßter Form. Weiterhin ist zu beachten, dass die option- und lease-time-Parameter auch außerhalb der geschweiften Klammer um das subnet stehen können und somit für die dhcpd.conf globale Gültigkeit erhalten. Besonders interessant wird dies bei der IP-Vergabe über mehrere Subnetze hinweg, die die gleiche Subnetzmaske haben. Besonderes Augenmerk sollte man hierbei auf die korrekte Klammerung legen.

/etc/dhcp3/dhcpd.conf mit statischer IP-Vergabe

Als Grundlage dient die dhcpd.conf aus dem vorhergehenden Punkt zur dynamischen IP-Adressvergabe, lediglich die als global gewünschten Parameter werden hier ausgelagert und weiterhin werden zwei statische IPs vergeben:
# globale Werte
option domain-name "proteino.local";
option domain-name-servers 192.168.2.2;
option routers 192.168.2.1;
option broadcast-address 192.168.2.255;
option subnet-mask 255.255.255.0;

subnet 192.168.2.0 netmask 255.255.255.0
{
 host barfoo
 {
  hardware ethernet 00:20:af:1c:90:1b;
  fixed-address 192.168.2.8;
 }
 host foobar
 {
  hardware ethernet 00:20:af:1c:90:1c;
  fixed-address 192.168.2.9;
 }
 range 192.168.2.10 192.168.2.20;
}
In dieser Beispiel-Konfiguration sieht man bereits sehr schön eine kleine Verschachtelung der Klammerung und wie einem host über seine MAC-Adresse eine statische IP-Adresse zugewiesen werden kann. Um zusätzlich zu den statischen IP-Adressen auch einen dynamischen Bereich für weitere Netzwerkgeräte verwenden zu können, wird wieder eine range angegeben. Nunmehr sind folgende IP-Adressen (nur letztes Octet von 192.168.2.x) vergeben:
  • 0 - Netzwerkadresse
  • 1 - Router/Gateway
  • 2 - der DHCP-Server höchstpersönlich, dieser enthält hier auch den DNS-Server (Domain Name System)
  • 8 - ein Client oder Server namens barfoo mit einem Netzwerkinterface mit der MAC-Adresse 00:20:af:1c:90:1b
  • 9 - ein Client oder Server namens foobar mit einem Netzwerkinterface mit der MAC-Adresse 00:20:af:1c:90:1c
  • 10-20 - reserviert für DHCP-Clients
  • 255 - Broadcastadresse

/etc/default/dhcp3-server

In dieser Datei muss das Netzwerkgerät genannt werden, auf welchem der DHCP-Server läuft. Nach dem Aufruf von dhcpd3 eth0 sollte dort folgendes stehen:
INTERFACES="eth0"



Start und Test des DHCP-Servers

Mit /etc/init.d/dhcp3-server start wird der DHCP3-Server gestartet, falls noch nicht automatisch bei der Installation angelegt, muss man noch manuell die Start- und Stopscriptlinks in die entsprechenden Runlevel-Verzeichnisse packen.
Die Funktionalität kann man anschließend wie folgt testen:
  • unter Linux: Rechner mit automatisch startendem dhcp-Client (bzw. fest in den Kernel integriertem dhcp-Client) hochfahren - fertig. Läuft der Rechner bereits und hat noch keine automatische DHCP-Aktualisierung (z.B. ältere 2.4-Kernel), so genügt ein /etc/init.d/dhcpd restart. Das dhcpd muss entsprechend dem im System verwendeten Client (z.B. dhclient) namentlich angepaßt werden. Ob man auch wirklich eine IP bezogen hat, kann man mit ifconfig überprüfen. Klappt das trotz vorhandenem DHCP-Client nicht, kann evtl. ein etwas rabiateres /etc/init.d/networking restart weiterhelfen.
  • unter Windows NT, Windows 2000, Windows XP, Windows 2003 und folgenden: in der Kommandozeile ipconfig /renew eingeben, mit ipconfig /all kontrollieren. Wichtig: die Eigenschaften des TCP/IP-Protokolls müssen auf DHCP (IP-Adresse automatisch beziehen) stehen!
  • unter Windows 95, Windows 98, Windows 98SE und Windows ME: in der Kommandozeile winipcfg eingeben im folgenden Konfigurationsprogramm die entsprechenden Einstellungen vornehmen.
Hat alles funktioniert? Na dann herzlichen Glückwunsch zu Deinem eigenen Linux-DHCP-Server und weiterhin viel Erfolg und Spaß mit Debian/GNU Linux!

Fehler, Anmerkungen, Kritik?

Falls mir irgendwo Fehler unterlaufen sind, bitte ich darum, diese in meinem IT-Forum so genau wie möglich (evtl. inkl. Berichtigung) zu posten. Danke!