In diesem Artikel beschäftigen wir uns, wie wir einen DHCP Server am Rapberry Pi einrichten. Hierzu sei gesagt, dass der hier vorgeschlagene DHCP Server keine Alleinstellung hat, denn es gibt verschiedene DHCP Server die man verwenden könnte. Das Prinzip der Konfiguration läuft jedoch immer ähnlich ab.
Als erstes müssen wir einen so genannten DHCP-Server installieren. Beispielhaft führe ich hier den isc-dhcp-server an. Es kann jedoch auch z.B. dnsmasq installiert werden.
Weiters solltet ihr prüfen ob nicht schon ein dhcp Dienst auf eurem System läuft. Für gewöhnlich wird dies nämlich der Fall sein. Im Fall von Raspbian läuft der dhcpcd Dienst. Sollte ein solcher Dienst laufen so müsst ihr unbedingt diesen Dienst abschalten, denn ansonsten kann es zu ungewöhnlichen Effekten bei der Netzwerkkonfiguration kommen was die Funktionsweise des Netzwerks negativ beeinflussen kann.
Prüfen welcher dhcp Dienst läuft findet ihr mit dem Befehl sudo netstat -tulpen | grep -i dhc
heraus. Bei Raspbian wird die Ausgabe höchst wahrscheinlich den dhcpcd Client Dienst anzeigen den wir jedoch für die weitere Konfiguration unseres LTE-Routers nicht benötigen werden. Daher ist es zweckmäßig diesen Dienst zu deaktivieren dies geschieht bei Wheezy wie folgt:
sudo service dhcpcd stop
sudo update-rc.d -f dhcpcd remove
Bei Jessie wird der Dienst wie folgt abgestellt.
sudo service dhcpcd stop
sudo systemctl disable remove
Nach der Deaktivierung des Dienstes solltem man noch prüfen ob der Dienst auch tatsächlich nicht mehr läuft.
Dies geschieht mit dem Befehl sudo service dhcpcd status
Nach Deaktivierung des dhcp Dienstes kann man ihn auch noch deinstallieren mit sudo apt-get remove dhcpcd5
isc-dhcp-server
Mit
sudo apt install isc-dhcp-server
installiert uns den entsprechenden DHCP-Server-Dienst.
Ist dieser installiert müssen wir diesen noch konfigurieren. Zuvor werden wir aber noch die Original Konfigurationsdatei sichern mit sudo cp /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.bak
Nu bearbeiten wir die Konfigurationsdatei des isc-dhcp-server indem wir unsere gewünschten Interfaces eintragen müssen. Dies geschieht mit dem Aufruf der Datei im Texteditor mit sudo nano /etc/default/isc-dhcp-server
In dieser Datei ändern wir in der Zeile INTERFACESv4=""
auf INTERFACESv4="eth0 eth1 wlan0 wlan1"
Nun haben wir die gewünschten Interfaces unseres RPi Routers angegeben und können nun die Datei speichern und schließen.
Starten des ISC-DHCP-SERVERS
Mit sudo systemctl start isc-dhcp-server
starten sie den isc-dhcp-server Dienst. Wenn die Befehlszeile ohne Meldung zurückkehrt, dann ist alles in Ordnung.
Ebenso kann man mit sudo /etc/init.d/isc-dhcp-server start
den Dienst starten.
Stoppen des ISC-DHCP-SERVERS
Mit sudo /etc/init.d/isc-dhcp-server stop
stoppen sie den isc-dhcp-server Dienst.
Neustarten den ISC-DHCP-SERVERS
Mit sudo /etc/init.d/isc-dhcp-server restart
stoppen und starten sie den isc-dhcp-server Dienst.
Prüfen des ISC-DHCP-SERVERS
Prüfen des Dienstes geschieht mit dem Befehl sudo systemctl status isc-dhcp-server
Weitere Informationen erhält man auch noch mit dem Befehl sudo journalctl _SYSTEMD_UNIT=isc-dhcp-server.service
auf der Kommandozeile.
Dateien für den ISC-DHCP-SERVERS
- /etc/init.d/isc-dhcp-server
- /etc/default/isc-dhcp-server In dieser Konfigurationsdatei werden die Netzwerkschnittstellen definiert.
- /etc/dhcp/dhcpd.conf In dieser werden die Subnetze definiert
dhcp
Nach der Grundkonfiguration des isc-dhcp-server müssen wir nun dhcp Dienst konfigurieren. Bevor es daran geht die Konfigurationsdatei zu bearbeiten legen wir von dieser noch ein Backup an. Dies geschieht mit:
sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
Anschließend rufen wir wiederum mit einem Texteditor die Konfigurationsdatei von dhcp auf.
sudo nano /etc/dhcp/dhcpd.conf
Bevor wir in dieser Datei die Subnetze konfigurieren müssen wir dem dhcp noch priveligierte Rechte zuweisen indem wir die Zeile autoriative;
auskommentieren bzw. hinzufügen sollte sie nicht vorhanden sein. Achtung: Nicht das Semikolon (;) am Ende der Zeile vergessen!
Nun geht es an die Konfiguration der Subnetze.
# eth0
subnet 192.168.0.0 netmask 2555.255.255.0 {
range 192.168.0.100 192.168.0.200;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
interface eth0;
# Fixe IP Adressen von Clients im 192.168.0.0 Netzwerk
# Server fuer Datensicherung
host linux-home {
hardware ethernet MAC-Adresse;
fixed-address 192.168.0.64;
option host-name "home-server";
}
}
# wlan0
subnet 192.166.0.0 netmask 2555.255.255.0 {
range 192.166.0.10 192.166.0.150;
option broadcast-address 192.166.0.255;
option routers 192.166.0.1;
interface wlan0;
}
# wlan1
subnet 192.178.0.0 netmask 2555.255.255.0 {
range 192.178.0.100 192.178.0.200;
option broadcast-address 192.178.0.255;
option routers 192.178.0.1;
interface wlan1;
}
Nach der abgeschlossenen Konfiguration müssen wir den DHCP-Dienst noch neu starten mit:
sudo /etc/init.d/isc-dhcp-server restart
Auch können wir uns den Status des Servers mit
sudo service dhcpd status
anzeigen lassen.
Prüfen ob der DHCP-Server läuft kann man auch noch mit dem Befehl dhcping -s "IP-Adresse des DHCP Servers"
durchführen
Parameter für dhcpd.conf
Von den vielen möglichen Parametern die in der dhcpd.conf zur Konfiguration des DHCP-Servers Verwendung finden können sind einige selbsterklärend, andere wiederum nicht so geläufig. Hier stelle ich einige nicht so geläufige Parameter vor damit man noch etwas mehr Feintuning am DHCP-Server betreiben kann.
default-lease-time GANZZAHL
legt die Standard Leasingzeit in Sekunden fest.
max-lease-time GANZZAHL
legt die maximale Leasingzeit in Sekunden fest.
ping BOLEAN
checkt wenn true, pingt der Server eine Adresse, bevor er einem Client eine Leasingvertrag über diese Adresse zuweist.
option domain-name-servers
die IP-Adresse oder Adressen von DNS-Servern die die Clients verwenden dürfen.
option domain-name
der Name der Domain, die den Clients die Nutzung ermöglicht.
authorative
Der Server ist authorativ, dieser DHCP-Server sollte DHCPNAK-Nachrichten an falsch konfigurierte Clients senden.
log-facility local7
Protokolle an syslog facility local7 senden
option routers
definiert die IP-Adresse ihres Gateways oder den Austrittspunkt ihres Netzwerks
option netbios-name-server
die IP-Adressen von NetBIOS Name Service (NBNS)-Servern oder Windows Internet Name Service (WINS)-Servern, die von SMB/CIFS-Protokollen verwendet werden, um Dateien unter Windows gemeinsam zu nutzen.
option netbios-node-type
Ein Code für die Art und Weise, wie NetBIOS-Clients die Namensauflösung versuchen sollten. Die Werte sind 1
für die Verwendung von Broadcasts, 2
für die Verwendung eines WINS-Servers, 4
für die Verwendung von Broadcasts, gefolgt von einem WINS-Server und 8
für die Verwendung eines WINS-Servers, gefolgt von einer Übertragung.
Sie sollten die dargestellten Werte durch die für Ihr eigenes Netzwerk spezifischen Parameter ersetzen.
Portforwarding
Nach der Konfiguration des DHCP-Servers muss noch das so genannte Portforwarding aktiviert werden.
Dies geschieht mit
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
Anschließend in der Datei
sudo nano /etc/sysctl.conf
den Kommentar vor der Zeile
net.ipv4.ip_forward=1
entfernen.
Zuletzt "nur" noch eine Regel in den Iptables erstellen.
Achtung: Wird eine Regel im laufenden Betrieb erstellt so bleibt diese nur bis zum nächsten Neustart wirksam. Um sie dauerhaft in das System einzubinden ist eine Speicherung in einer Datei notwendig.
Iptables
In den Iptables sind die Regeln für das Port forwarding enthalten.
sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
sudo iptables -A FORWARD -i eth1 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth1 -j ACCEPT
Um die soeben erstellten NAT-Regeln dauerhaft zu speichern und sie somit auch nach einem Neustart wieder zur Verfügung zu haben schreibt man diese in die Datei /etc/iptables.ipv4.nat
mit fogendem Befehl:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
Somit bleiben diese Regeln auch nach einem Neustart verfügbar.
Nun muss man diese Regeln jedoch auch nach einem Neustart wieder zur Verfügung haben. Dies geschieht, indem man in der Datei /etc/rc.local
vor "exit 0"
folgendes einträgt: iptables-restore < /etc/iptables.ipv4.nat
Dadurch gewährleistet man, dass bei einem Neustart die iptables aus der Datei /etc/iptables.ipv4.nat
eingelesen und aktiviert werden.
Welche Port forwarding Regeln gerade auf dem System aktiv sind kann man mit
sudo iptables -t filter -n -L -v
für die Kette FORWARD herausfinden.
Für die Kette POSTROUTING gilt folgender Befehl:
sudo iptables -t nat -n -L -v
Weitere nützliche Befehle zu iptables
iptables
Zeigt vollständige Liste aller Tabellen
iptables -F
löscht die Regeln
Quellen
Quellen:
- https://gehaxelt.in/blog/raspberry-als-router
- Wie du einen DHCP-Server auf dem RPi einrichtest
- https://wiki.ubuntuusers.de/WLAN_Router/
- https://filippobuletto.github.io/home-router-lte/#what-i-need
- https://www.raspberry-pi-geek.de/ausgaben/rpg/2015/06/der-raspberry-pi-als-3g-hotspot/
- https://bitreporter.de/raspberrypi/raspberry-pi-als-wlan-hotspot-nutzen/
- https://maker.pro/raspberry-pi/tutorial/how-to-create-a-4g-hotspot-with-raspberry-pi
- Raspberry Pi als WLAN Acces Point einrichten
- Raspberry Pi als WLAN Bridge einrichten (WLAN Access Point)
- Raspberry Pi als WLAN Router einrichten (WLAN-Access-Point)
- DHCP Musterkonfigurationen
- Das Debian Administrationshandbuch - DHCP
- isc-dhcp-server deaktivieren und konfigurieren
- DHCP-Server auf dem Raspberry Pi einrichten
- ISC-DHCPD
- DHCP mini-HOWTO
- Ausfallsicherer DHCP-Server
- Installation und Konfiguration des ISC-DHCP-Servers unter Debian 9
- isc.org
- DHCP Server richtig konfigurieren (heise.de) - Adressverteiler