Raspberry Pi: ISC-DHCP-Server einrichten

Mit Raspbian Jessie geprüft.

Es gibt mehrere DHCP-Server für Linux. Der DHCP-Server von ISC ist der gebräuchlichste und leistungsfähigste DHCP-Server. Gleichzeitig ist er vergleichsweise einfach zu konfigurieren.

Vorbereitungen zum Betrieb eines DHCP-Servers

  • IPv4-Adressbereich festlegen
  • Subnetzmaske und Standard-Gateway festlegen
  • DNS-Server festlegen
  • Lease-Time festlegen

Hinweis: Bezeichnung der Netzwerk-Schnittstellen

Seit Raspbian Stretch haben die Netzwerk-Schnittstellen für Ethernet und WLAN andere Bezeichnungen. Also nicht mehr "eth0" und "wlan0", sondern "enx..." und "wlx...". Das betrifft per USB angeschlossenen Netzwerk-Adapter, deren Bezeichnung von den hier genannten Bezeichnungen abweichen. Das bedeutet, dass man zuerst die individuelle Bezeichnung ermitteln oder die Namensgebung auf das alte Verfahren umstellen muss.

Wichtig: Statische IPv4-Konfiguration

Damit der ISC-DHCP-Server nach der Installation und Konfiguration erfolgreich in Betrieb geht, ist eine statische IPv4-Konfiguration erforderlich.
Dabei ist wichtig, dass die IPv4-Konfiguration an die betreffende Schnittstelle gebunden ist, auch wenn keine physikalische Verbindung zum Netzwerk besteht.

Hinweis: Es empfiehlt sich die IPv4-Konfiguration über die Datei "/etc/network/interfaces" zu machen.

ISC-DHCP-Server einrichten

Zuerst installieren wir den DHCP-Server.

sudo apt-get install isc-dhcp-server

Unter Umständen erscheint bei der Installation eine Fehlermeldung. Das ist an der Stelle korrekt, weil der Server mit der Default-Konfiguration nicht lauffähig ist. Die Installation war in diesem Fall trotzdem erfolgreich.

Zuerst müssen wir definieren, für welches Netzwerk-Interface der ISC-DHCP-Server arbeiten soll. Dazu öffnen wir folgende Konfigurationsdatei.

sudo nano /etc/default/isc-dhcp-server

Hier fügen wir in der dafür vorgesehenen Zeile die Interface-Bezeichnung hinzu. Wir wählen hier beispielhaft "wlan0" für einen WLAN-Router. Je nach Anwendung kann es aber auch "eth0" sein.

INTERFACES="wlan0"

Weiter geht es mit der Konfiguration. Vorher sichern wir die Default-Konfigurationsdatei und erstellen eine neue.

sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf_alt
sudo nano /etc/dhcp/dhcpd.conf

Danach öffnet sich der Editor mit einer leeren Datei, in die wir die folgende Konfiguration eintragen.

authoritative;
default-lease-time 86400;
max-lease-time 86400;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.100 192.168.1.150;
  option routers 192.168.1.1;
  option domain-name-servers 192.168.1.1;
  option domain-name "local";
}

Bei jeder Zeile handelt es sich um eine Direktive, also eine Anweisung für den DHCP-Server, die jeweils mit einem Semikolon bzw. Strichpunkt abgeschlossen wird. Ausnahmen bilden Zeilen mit sich öffnenden oder schließenden geschweiften Klammern.

Die hier dargestellte Konfiguration ist beispielhaft und darf nicht einfach so übernommen werden. Ein fehlerhaft konfigurierter DHCP-Server kann in einem Netzwerk Störungen verursachen.

Die Konfigurationsdatei beginnt mit der Direktive "authoritative;". Das bedeutet, dass der DHCP-Server für das Netzwerk verantwortlich ist und das Sagen hat.
Die Direktive "default-lease-time" bestimmt die Dauer, die eine IP-Konfiguration gültig ist. "max-lease-time" ist die maximal gültige Dauer für eine IP-Konfiguration. Beides sollte gesetzt sein, sonst würde die Lease-Time theoretisch unendlich sein. Die Angabe erfolgt in Sekunden.
Dann folgt die Definition des Subnetzes mit Netzadresse, der Subnetzmaske und der Adressbereich, der verteilt bzw. verwaltet werden soll.
Innerhalb des Subnetzes befindet sich die Direktive für das Standard-Gateways mit "option routers", den DNS-Server mit "option domain-name-servers" und die lokale Top-Level-Domain mit "option domain-name".
Wenn eine der Direktiven außerhalb des Subnetzes steht, dann gilt diese Option generell und nicht nur für dieses Subnetz.

Wenn eine Zeile geändert wird, dann ist darauf zu achten, dass jede Zeile, außer bei einer geschweiften Klammer, mit einem Semikolon/Strichpunkt (";") endet.

Anschließend muss der DHCP-Server gestartet werden.

sudo systemctl start isc-dhcp-server

Wenn die Befehlseingabe ohne Meldung zurückkehrt, dann hat es geklappt.

Wenn der Start des ISC-DHCP-Servers mit einem Fehler abgebrochen wurde, dann sollte man eine Status-Abfrage vornehmen, um dem Fehler genauer auf den Grund zu gehen.

sudo systemctl status isc-dhcp-server

Im Fehlerfall sind die Meldungen leider nicht immer eindeutig. Es sei denn, man hat einen Konfigurationsfehler gemacht. Sehr beliebt sind Tippfehler oder fehlende Strichpunkte (";") am Ende einer Direktive.

Die vergebenen Leases werden in einer Datei verzeichnet:

cat /var/lib/dhcp/dhcpd.leases

Fehlermeldung: No subnet declaration for wlan0

In der Status-Abfrage erscheint die Fehlermeldung: "No subnet declaration for wlan0 (no IPv4 addresses)."

Bei dieser Fehlermeldung ist auf den ersten Blick nicht ersichtlich, was damit gemeint ist. Eines vorweg, es hat nichts mit der Konfiguration des ISC-DHCP-Servers zu tun.
Damit der ISC-DHCP-Server erfolgreich startet müssen die betreffenden Interfaces, in diesem Fall "wlan0", auf IP-Ebene konfiguriert sein. Und zwar passend zum Subnetz in der DHCP-Server-Konfiguration.

Kurzfristig kann man das mit dem folgenden Kommando erreichen:

sudo ip addr add 192.168.100.1/24 dev wlan0
ip a

Aber, das ist nur eine temporäre Lösung. Bei einem Neustart geht diese Konfiguration verloren. Deshalb muss die IPv4-Konfiguration festgelegt werden. Die IPv4-Konfiguration sollte man beispielhaft in der Datei "/etc/network/interfaces" vornehmen.

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.1.1
netmask 255.255.255.0

Nach einen Reboot prüfen:

ip a
sudo systemctl status isc-dhcp-server

Der ISC-DHCP-Server sollte dann ohne Problem starten.

Hinweis: Warum kann die Konfiguration nicht mit dem DHCPCD ("/etc/dhcpcd.conf") erfolgen? Das Problem beim DHCP Client Daemon ist, dass die IPv4-Konfiguration erst dann von diesem vorgenommen wird, wenn das Interface eine physikalische Verbindung zum Netzwerk hat. Wenn man das nicht sicherstellen kann, dann startet der ISC-DHCP-Server nicht.

Hinweis zum ISC-DHCP-Server

Der ISC-DHCP-Server ist bezüglich der IP-Adress-Vergabe sehr konservativ. Gemeint ist, dass er versucht dem selben Client immer wieder die selbe IP-Adresse zu geben. Solange er einen Anhaltspunkt findet, zum Beispiel die MAC-Adresse oder eine konkrete Anfrage des Clients nach einer IP-Adresse, wird er diese zuteilen.
Warum könnte das wichtig sein? In einem lokalen Netzwerk ist das nahezu bedeutungslos. Anders sieht es aus, wenn ein ISP Kunden per dynamischer Adressvergabe an sein Netz anbindet und darüber Services für die Kunden betreibt. Beispielsweise Voice over IP oder Video-Streaming. Wenn die dynamisch zugeteilte IP-Adresse des Kundennetzes seine Gültigkeit verliert und der Router des Kunden eine neue anfordert und auch eine neue bekommt, dann brechen alle laufenden Verbindungen mit der alten IP-Adresse ab. Zum Beispiel Telefongespräche und Video-Streams. Das will man natürlich vermeiden, weil es dem Kunden suggeriert, dass der Internet-Anschluss nicht richtig funktioniert und sich öffentliche Beschwerden und beim Support einstellen.

Weitere verwandte Themen:

Teilen:

Produktempfehlungen