Statische IP-Konfiguration bei Raspbian Jessie

Lesedauer: ~4 Minuten

Vor einer Zeit bin ich mit einem Kollegen zusammen auf ein faszinierendes Problem gestoßen. Für ein wissenschaftliches Projekt sollten mehrere _Raspberry Pi_s deutschlandweit verteilt werden und mit verschiedenen Messwerten arbeiten. Zur Vorbereitung soll das System natürlich abgehärtet werden und vorwiegend read-only sein. Aber schon bei der eigentlichen Einrichtung der IP-Konfiguration tat sich für uns ein doch eher unerwartetes Problem auf.

Zuvor hatten wir immer nur mit recht alten Raspbian Wheezy-Versionen gearbeitet und haben unsere Konfiguration immer Manuell in /etc/network/interfaces vorgenommen. Dies stellte nie ein Problem dar und die Netzwerkkonfiguration lief wie erwartet. In den neuen Versionen von Raspian Wheezy und vor allem beim Raspbian Jessie -Release gibt es allerdings ein paar neue Pakete, welche unter anderem auch dafür sorgen, dass diese Methode nicht mehr eben so möglich ist.

Nachdem wir den Raspberry Pi mit einer Adresse aus dem 10.0.0.0/8-Netz konfiguriert und neu gestartet hatten, zeigte uns die Ausgabe von ifconfig auch die gewünschten Werte zum Interface eth0 an. Die Realität war allerdings eine andere. Beim Start hat sich der Raspberry Pi per DHCP eine Adresse vom DHCP-Server geholt und gleichzeitig die Einstellungen in /etc/network/interfaces angewendet. Das Interface war dadurch sowohl unter der Adresse im 10er-Netz, als auch unter der Adresse, die ihm vom DHCP-Server gegeben wurde, erreichbar. Trotzdem wurden in ifconfig nur die von uns vorgegebenen Werte angezeigt. Dies sorgte für Verwirrung, vor allem da wir anderes Verhalten von dem System gewohnt waren.

Nach etwas Recherche in den Logs entpuppte sich der Service dhcpcd, der DHCP-Client-Daemon als Übeltäter. Hier eröffnen sich nun mehrere Lösungsmöglichkeiten, wobei ich auf drei näher eingehen werde.

Option 1: Deaktivieren von dhcpcd

Die offensichtlichste Lösung ist wohl, dass man den Service dhcpcd einfach deaktiviert. Anschließend muss die Netzwerkkonfiguration zwingend über /etc/network/interfaces erfolgen. Dies entsprach auch dem, was wir von dem System erwartet haben und war dem entsprechend auch die Lösung, welche wir umgesetzt haben. Dhcpcd kann über folgende Terminalbefehle deaktiviert werden:

sudo service dhcpcd stop
sudo systemctl disable dhcpcd

Wird das System nicht mit systemd verwaltet, sondern noch mit init, so ist statt dem letzten Befehl folgender auszuführen:

sudo update-rc.d -f dhcpcd remove

Damit die Änderung auch wirksam wird, kann man entweder das ganze System oder, wenn es etwas sanfter sein soll, den Dienst networking neu starten. Bei der letzteren Methode sollte man beachten, dass es hierbei zu einem Verbindungsabbruch der SSH Verbindung kommen kann, sofern man über diese arbeitet.

sudo service networking restart

Option 2: dhcpcd und /etc/network/interfaces parallel nutzen

Diese Methode bietet sich an, wenn man mehr als eine Netzwerkschnittstelle am Raspberry Pi verwendet. Ein gutes Beispiel wäre hier ein WLAN USB-Dongle. Möchte man nun eth0 statisch konfigurieren, aber wlan0 von dhcpcd verwalten lassen, so ist dies auch möglich. In diesem Fall kann man einfach eth0 aus der Konfiguration von dhcpcd ausschließen.

Hierfür editiert man mit dem Editor seiner Wahl die Datei /etc/dhcpcd.conf und fügt folgende Zeile der Konfiguration hinzu:

denyinterfaces eth0

Anschließend muss wieder das System wie bei Option 1 entweder neu gestartet werden. Auch hier würde es aber reichen, wenn man den Dienst networking neu startet.

Option 3: dhcpcd statisch konfigurieren

Zu guter Letzt kann man die komplette Konfiguration der Netzwerkinterfaces auch mit dhcpcd vornehmen. Dies scheint wohl auch der gewünschte weg der Entwickler zu sein. Nach jahrelanger Gewohnheit, vor allem bei Headless-Servern, kann man sich aber nur schwer von der Konfiguration durch /etc/network/interfaces trennen. Deshalb ist dies auch nicht die von uns favorisierte Methode, soll aber zur Vollständigkeit nicht ungenannt bleiben.

dhcpcd bietet die Möglichkeit, dass man in der Konfigurationsdatei auch statische IP-Adressen für Netzwerkschnittstellen angibt. Hierfür editiert man wieder die Datei /etc/dhcpcd.conf und fügt am Ende folgende Zeilen ein:

interface eth0
static ip_address=10.0.0.30/8
static routers=10.0.0.1
static domain_name_servers=10.0.0.1

Auch hier muss zum Abschluss der Dienst networking neu gestartet oder ein reboot des System durchgeführt werden.