Wie du einen Raspberry Pi DHCP-Server in Betrieb nimmst

Veröffentlicht: vor 2 monaten · Lesedauer ca. 12 Minuten

Darf ich dir eine Frage stellen?

Eine etwas persönliche Frage?

Nein, es ist nichts schweinisches 🙂

Aber mich würde es interessieren, wie oft du schon in deinem Leben manuell eine IP vergeben musstest?

Was? Kein einziges Mal?

Das könnte vielleicht daran liegen, dass in dem entsprechenden Netzwerk ein DHCP-Server vorhanden war.

Diese Funktionalität, gehört nämlich zu der Grundausstattung eines jeden Routers, der heutzutage verkauft wird.

Das Dynamic Host Configuration Protocol, kurz DHCP, ist ein Kommunikationsprotokoll und ermöglicht die Verteilung von IP-Adressen in einem Netzwerk. Aber nicht nur die IPs werden vergeben. Auch der Standardgateway (also die Adresse des Routers) oder die Netzwerkmaske wird dem Client per DHCP zugewiesen.

Längst vorbei sind die Zeiten, in denen man sich noch die IP-Adresse manuell in den Netzwerk-Einstellungen ändern musste. Es gibt kaum ein Router, der kein DHCP mehr unterstützt. Und wenn du doch so einen besitzt, dann solltest du dir erst recht ein RasPi-Router zulegen 🙂

DHCP ist für unseren kleinen Router ein must-have-feature!

Was ist DHCP und wie funktioniert es?

Nehmen wir mal an, du möchtest dich mit einem Netzwerk verbinden. Du steckst erst einmal das Netzwerkkabel ein und dann passiert es schon.

Bevor du auch nur den Gedanken daran verschwendest dir manuell eine IP Adresse zuzuweisen, schickt dein PC eine Nachricht an das Netzwerk und stellt sich einmal vor.

Alle anderen Computer bekommen auch diese Nachricht. Jedoch fühlt sich bis auf den DHCP keiner angesprochen. Teilweise bemerken die es noch nicht einmal, weil es die gar nicht interessiert.

Die Kommunikation läuft über Port 67/UDP am Server und Port 68/UDP beim Client und könnte etwa wie so aussehen:

Client: „Hallo, ich bin neu hier, mein Name ist Max. Gibt es hier ein DHCP?“ (discover)
Server: „Ja, ich bin hier, Max. Ich kann dir die IP x.x.x.x geben.“ (offer)
Client: „Ja, das klingt super. Kann ich die haben?“ (request)
Server: „Max, hier ist die Adresse. Du kannst die für die nächsten 12 Stunden behalten.“ (acknowledge)

Der DHCP-Server notiert sich jetzt die Zeit, die Ablaufzeit und die Adresse, die er Max gegeben hat.

Wenn sich Max innerhalb der nächsten 12 Stunden ausloggt, sieht die Kommunikation wie folgt aus:

Client: „DHCP Server, ich bin es, Max, ich brauche die IP nicht mehr!“ (release)
Server: „Alles klar, Max. Mach’s gut!“

Der DHCP entfernt dann Max’s Eintrag aus seiner Liste.

Was passiert eigentlich, wenn der Rechner von Max jetzt abstürzt o. ä.? Theoretisch wäre die IP dann für immer blockiert.

Hier kommt die Ablaufzeit ins Spiel.

Wenn jetzt der nächste Client kommt, könnte die Kommunikation wie folgt aussehen:

Client: „Hallo, ich bin neu hier, mein Name ist Moritz. Gibt es hier ein DHCP?“
Server: „Ja, ich bin hier Moritz. Ich habe hier eine ungenutzt IP. Brauchst du eine?“
Client: „Ja, das klingt super. Kann ich die haben?“
Server: „Moritz, hier ist die Adresse. Du kannst die für die nächsten 12 Stunden behalten.“

12 Stunden später….

Client: „DHCP Server, ich bin es, Moritz. Die 12 Stunden sind jetzt vorbei. Kann ich die IP noch etwas behalten?“ (request)
Server: „Moritz, du kannst die IP für weitere 12 Stunden behalten.“ (acknowledge)

Eigentlich eine prima Sache, oder? 🙂

Der Benutzer brauchst sich um nichts zu kümmern. Alles läuft vollautomatisch im Hintergrund ab 🙂

Konfiguration auf dem Raspberry Pi

Ich verwende den ISC DHCP Server. Es ist jedoch nicht so, dass es besser oder die anderen schlechter sind, als der ISC. Sondern eher, weil die Konfiguration des Servers etwas besser von der Hand geht. Man hat alles wichtige zentral an einer Stelle und keinen unnötigen Schnickschnack. Wirklich nur das, was man benötigt.

Lediglich die Auswertung der Logs ist etwas kompliziert, da die Einträge in keiner separaten Datei stehen, sondern global in der /var/logs/syslog. Jedoch muss man auch dazu sagen, dass diese Kleinigkeit kein Ausschlusskriterium darstellt, da ich persönlich kaum Logs durchwühle, wenn den alles funktioniert. 🙂

Zunächst wird das Paket für den DHCP Server installiert.

$ sudo apt-get install isc-dhcp-server

Direkt nach der Installation musst du die Schnittstellen angeben, auf die der DHCP-Server konfiguriert werden soll.

Aber vorher noch ein Backup der Konfigurationsdatei erstellen (falls mal etwas schieflaufen sollte).

$ sudo cp /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.bak
$ sudo nano /etc/default/isc-dhcp-server

In der letzten Zeile ist der Wert INTERFACES. Wenn du mehrere Schnittstellen hast, kannst du die auch alle hintereinander Schreiben:

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#	Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="eth1 wlan0 wlan1"

Gleich im Anschluss, muss die Konfiguration vom DHCP selbst etwas angepasst werden. Die Datei ist etwas mäßig dokumentiert, reicht aber aus um den Dienst nach eigenen Wünschen zu konfigurieren.

$ sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
$ sudo nano /etc/dhcp/dhcpd.conf

Falls der DHCP Server autoritär fungieren soll, also der einzige DHCP Server im Netzwerk ist, gibt man dies mit diesem Schlüsselwort an.

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

Unter lease time versteht man den Zeitraum, für die der Server seine IP-Adresse zur Verfügung stellt. Die Angabe ist in Sekunden und kann für den Heimgebrauch eigentlich auch relativ weit nach oben geschraubt werden. Da kommt es ja sowieso kaum vor, dass man mehr Rechner als IPs hat.

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

Bevor die IP vergeben wird, kann der Server die IP noch einmal anpingen um sicherzustellen, dass die IP auch wirklich nicht vergeben ist. Jedoch ist es meistens unnötig und dauert entsprechend länger. Der Parameter hierfür wäre:

ping-check true;

ISC kann mehrere Subnetze gleichzeitig beliefern. Die Subnetze werden wie folgt in Blöcken definiert:

# eth1
subnet 10.10.1.0 netmask 255.255.255.0 {
        range 10.10.1.10 10.10.1.250;
}
# wlan0
subnet 10.20.0.0 netmask 255.255.255.0 {
        range 10.20.0.10 10.20.0.250;
}
# wlan1
subnet 10.20.1.0 netmask 255.255.255.0 {
        range 10.20.1.10 10.20.1.250;
}

Mit der Angabe eines interfaces, kann man dem Server sagen, über welche Schnittstelle der Server lauschen und die IP-Adressen verteilen soll.

interface eth1;

Der DHCP benötigt noch die Angabe, über welche Adresse alle IPs gerouted werden sollen. Meistens (fast immer) ist das die eigene IP. Also die IP der eigenen Schnittstelle.

option routers 10.10.1.1;

In einem host Block definierst du Rechner, die immer wieder die gleiche IP bekommen sollen. Gut geeignet für Server oder Geräte, auf die du kein Einfluss hast.

host printer {
   hardware ethernet xx:xx:xx:xx:xx:xx;
   fixed-address 10.30.0.42;
   option host-name "Drucker";
}

Wichtig zu wissen ist auch, dass fast alle Parameter sowohl innerhalb, als auch außerhalb eines subnet oder host blocks definiert werden können. Beispielsweise ist es bei dem Befehl interfaces sinnvoll, da man je nach Schnittstelle andere Adressen vergeben möchte.

IP Forward

Per Definition kennen sich Computer nur innerhalb eines Subnetzes. Würde man ein ping von einem PC mit der IP 172.26.16.16/24 in Richtung 172.26.17.16/24 senden, würde keine Antwort ankommen. Wären beide Computer innerhalb des 16er Netzes, wäre der ping erfolgreich.

Es ist zwingend erforderlich, dass man die Netze voneinander trennt, da der DHCP nicht zwei Netzwerkschnittstellen gleichzeitig mit einem Adressbereich beliefern kann.

Damit man das in den Griff bekommt, gibt es mit dem IP Forwarding eine kleine Abhilfe.

Dazu öffnest du die sysctrl und kommentierst eine Zeile rein.

$ sudo nano /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Jetzt noch das Forwarding und NATing aktivieren

$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Im Hintergrund passiert jetzt folgendes:

Es kommt ein ping von eth1 auf eine wlan0 IP rein:

Jupiter schaut auf zunächst in sein eth1 Netz und findet nichts. Als nächstes werden die anderen Netze angefragt ob die IP bekannt ist. Falls ja, antwortet der entsprechende Rechner auf die Anfrage. Falls nicht, geht die Anfrage weiter bis über den Provider raus ins Internet. Spätestens da ist Schluss. Da der ping aus einem Privaten Adressbereich gekommen ist, werden die Anfragen einfach verworfen.

Jetzt nur noch mit

$ service isc-dhcp-server start

starten und dann kannst du dich schon probeweise zum Server verbinden.

Meine finale Konfiguration

Meine finale Konfiguration sieht schlussendlich wie folgt aus:

authoritative;
log-facility local7;
default-lease-time 600;
max-lease-time 7200;
# DNS Option muss später angepasst werden
option domain-name-servers 8.8.8.8, 8.8.4.4;

subnet 10.10.1.0 netmask 255.255.255.0 {
	range 10.10.1.10 10.10.1.250;
	option routers 10.10.1.1;
	interface eth1;
}

subnet 10.20.0.0 netmask 255.255.255.0 { 
	range 10.20.0.10 10.20.0.250;
	option routers 10.20.0.1;
	interface wlan0;
}

subnet 10.20.1.0 netmask 255.255.255.0 { 
	range 10.20.1.10 10.20.1.250;
	option routers 10.20.1.0;
	interface wlan1;
}

DHCP Server – Fazit

Ein DHCP Server kann viel Zeit und nerven sparen. Es muss nicht mehr aufwendig jeder einzelne Rechner mit einer IP-Adresse versehen werden.

Wenn ein neuer Rechner ins Netzwerk kommt, muss man nicht erst den Administrator fragen welche IP denn noch vorhanden ist und welche genommen werden darf.

Zwar klingt das etwas lächerlich für ein paar Rechner solch eine Automatisierung zu verwenden, aber man bedenke jedoch die heutige mobile Welt.

Es kommen immer mal Freunde zu Besuch, die mit ihrem Smartphone ins Internet wollen um mal eben bei YouTube ein Video oder das letzte Schnäppchen bei eBay zeigen wollen. Zumal ich nicht sicher bin, ob man bei allen Smartphones die IP-Adresse manuell vergeben kann 🙂

Nicht zu verachten ist auch der Aufwand, wenn man Administrator von über 1000 Rechnern ist (nein, bin ich nicht) und der IP-Adressenbereich ändern muss. Der Administrator wäre erst einmal für ein paar Tage beschäftigt.

Kategorien:
Jupiter-PI
Das könnte dir auch gefallen
Sei der erste und teile deine Meinung mit der Welt!
... und was meinst du dazu?
Deine E-Mail-Adresse wird nicht veröffentlicht.