Raspberry Pi: Netzwerk-Konfiguration

Prof. Jürgen Plate

Raspberry Pi: Netzwerk-Konfiguration

Vorbemerkung: Oft liegen Netzwerk-Probleme beim Raspberry Pi an einer instabilen Stromversorgung. So kann bei einer zu geringen Betriebsspannung (unter 5 V) der RasPi zur Stabilisierung den Stromverbrauch reduzieren indem er einzelne Komponenten abschaltet. Geschieht dies beim USB-Controller, der intern auch noch den Ethernet-Port bedient (Modelle A und B), betrifft das auch die Netzwerk-Verbindung. Diese geht bei stabiler Betriebsspannung wieder in Betrieb, aber setzt bei Belastungsspitzen aus. Daher sollte man bei sporadischen Ausfällen und Netzwerk-Problemen zuerst das Netzteil austauschen. Vor allem dann, wenn die Netzwerk-Konfiguration schon mal funktioniert hat, und dann auf einmal nicht mehr.

Da der Raspberry Pi für Embedded-Anwendungen oft ohne grafische Oberfläche im Dauerbetrieb läuft und dazu ggf. Server-Dienste anbietet, sollte er auch eine statische IP Adresse im Netzwerk erhalten. Per Default bezieht er seine IP-Adresse automatisch per DHCP (Dynamic Host Configuration Protocol) - beispielsweise vom heimischen DSL-Router. Die so erhaltene IP-Adresse gibt der Raspberry Pi beim Booten preis (siehe Eintrag in der Datei /etc/rc.local). Die IP-Adresse können Sie aber auch mit den Kommandos ip oder ifconfig herausfinden:

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether b8:27:eb:aa:37:2f brd ff:ff:ff:ff:ff:ff
    inet 172.20.1.99/24 brd 172.20.1.255 scope global eth0
Die per DHCP zugewiesene IP-Adresse des Pi lautet also 172.20.1.99. Bei diesem Beispiel und auch bei den folgenden haben alle System im lokalen Netz Adressen aus dem Bereich 172.20.1.x. Die Parameter und Adressen der Beispiele müssen Sie natürlich Ihrem eigenem Netzwerk anpassen.

Initiale IP-Adresse

Wenn Sie den Raspberry Pi erstmals im Netz ohne Tastatur und Bildschirm betreiben, können Sie ihn ja nur per SSH von einem anderen Rechner aus ansprechen. Normalerweise ist er so eingestellt, dass er seine IP-Adresse automatisch per DHCP vom Router bezieht. Normalerweise hat jeder Router einen DHCP-Server aktiviert (darüber wird jedem Gerät die Netzwerkeinstellungen automatisch zugewiesen). Je nachdem, wie groß der IP-Bereich des DHCP-Servers eingestellt ist, müsste man dann erstmal nach dem Kleinen suchen. Manchmal kann man die vergebenen Adressen über das Webinterface des Routers auslesen. Alternativ ginge das mittels ping-Kommando, ist aber ziemlich nervig.

Auf der Seite RasPi_Install.html ist beschrieben, wie man über die Datei /boot/comdline.txt in der vFat-Partition der SD-Karte dem Raspberry Pi eine initiale IP-Konfiguration mitgeben kann. Danach bekommt er dann per SSH eine statische IP-Adresse wie unten beschrieben.

Statische Netzwerkadresse vergeben

Um eine statische Adresse festzulegen, öffnen Sie als root-User die Datei /etc/network/interfaces. Sie hat zwei Einträge:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
Der erste Eintrag ist für das Loppback-Interface (localhost) und bleibt unberührt. Um der Ethernetschnittstelle eth0 nun die IP-Adresse 172.20.1.99 zuzuweisen, ändern Sie den Inhalt der Datei folgendermaßen:
# das loopback-Interface
auto lo
iface lo inet loopback

# eigente Netzadresse
auto eth0
iface eth0 inet static
address 172.20.1.99
netmask 255.255.255.0
broadcast 172.20.1.255
# das eigene Netz
network 172.20.1.0
gateway 172.20.1.254
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 172.20.1.254
Die unter "gateway" angegebene Adresse ist die IP-Adresse des ROuters, der in die große, weite Welt des Internets führt. Damit die Änderungen wirksam werden, muss der Raspberry Pi nicht extra neu gestartet werden (wie man oft lesen kann). Es genügt das Kommando (als root):
/etc/init.d/networking restart
Sollten Sie die Arbeiten über SSH erledigt haben, fliegen Sie nun raus, weil der Raspberry Pi ja eine neue IP-Adresse bekommt. Sie müssen sich also wieder einloggen - diesmal mit der neuen Adresse.

Wenn das Paket "resolvconf" installiert ist, sorgt die letzte Zeile auch für den Eintrag des DNS-Servers in der Datei /etc/resolv.conf, andernfalls müssen Sie das selbst durch Editieren der Datei erledigen. Der Eintrag ist ganz einfach:

nameserver 172.20.1.254
nameserver 8.8.8.8
Prinzipiell können Sie beliebig viele Adressen von DNS-Servern angeben. Im Beispiel habe ich noch die Adresse des Google-Nameservers hinzugefügt (was zweischneidig ist, denn oft wird diese Adresse auch von Malware verwendet, um festzustellen, ob der Trojaner etc. ins Internet kommt).

Wenn Sie gerade dabei sind, können Sie dem Pi auch noch einen neuen Namen verpassen. Der wird einfach in der Datei /etc/hostname eingetragen. Der gleiche Name muss auch noch in die Datei /etc/hosts eingetragen werden. Die Default-Datei hat folgenden Inhalt:

::1 raspberry localhost6.localdomain6 localhost6
127.0.1.1 raspberry


127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Dort ersetzen Sie den Namen "raspberry" durch Ihren Wunschnamen. Sie können auch noch eine Domain hinzufügen und weitere Systeme eintragen. Wenn all Ihre Raspberrys die gleiche hosts-Datei haben, können Sie sich gegenseitig nicht nur bei der IP-Adresse, sondern auch beim Namen rufen. Im folgenden Beispiel ist auch die statische IP-Adresse erfasst:
127.0.0.1    localhost
127.0.1.1    pipibox
172.20.1.99  pipibox pipibox.local
172.20.1.88  www     www.local

::1 pipibox localhost6.localdomain6 localhost6
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Im Beispiel wird bei den IP-Adresse 172.20.1.x nicht nur der Name, sondern auch ein Domainname eingetragen (es sind übrigens auch mehrere Namen für eine IP-Adresse möglich). Wenn Sie keine eigene Domain besitzen, kommen folgende Top-Level-Domains in Frage:

WLAN einrichten

WLAN bei den Modellen 2 mit WLAN-Stick

Das Einbinden des Raspberry Pi ins WLAN kann mehr oder weniger aufregend sein - je nachdem, welchen WLAN-Stick Sie verwenden ist die Einrichtung einfach oder kompliziert. Der Grund dafür liegt in den unterschiedlichen Chipsätzen der WLAN-Sticks. Überall empfohlen wird der WLAN-Stick von Edimax, der EDIMAX EW-7811UN Wireless USB Adapter, 150 Mbit/s, IEEE802.11b/g/n. Er wird von Raspbian automatisch erkannt und eingebunden, da der Kernel den passenden Treiber (RTL8192CU) bereits mitbringt.

Sobald der Stick eingesteckt wurde, wird er von Raspbian auch schon erkannt. Dies kann mit dem Befehl dmesg überprüft werden. Sie sollten sehen, dass ein WLAN-Adapter von Realtek erkannt wurde und der passende Treiber (rtl8192cu) geladen wurde:

[  124.008618] usb 1-1.2: New USB device found, idVendor=7392, idProduct=7811
[  124.008653] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  124.008672] usb 1-1.2: Product: 802.11n WLAN Adapter
[  124.008692] usb 1-1.2: Manufacturer: Realtek
[  124.008709] usb 1-1.2: SerialNumber: 00e04c000001
[  124.397563] usbcore: registered new interface driver rtl8192cu
Nachdem der Stick erfolgreich erkannt wurde, taucht auch ein neues Netzwerk-Device namens "wlan0" auf. Das können Sie mittels ifconfig überprüfen. Dabei sehen Sie auch, dass dem Interface wlan0 noch keine IP-Adresse zugeteilt wurde:
   ...

wlan0     Link encap:Ethernet  Hardware Adresse 80:1f:02:e1:81:e8
          UP BROADCAST MULTICAST  MTU:1500  Metrik:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
Gegebenenfalls sollten Sie die Stromsparfunktion des Edimax-Treibers deaktivieren. Sonst kann es geschehen, dass eine Verbindung bei Inaktivität unterbrochen wird. Dazu legen Sie eine Konfigurationsdatei für den Treiber an. In die Datei /etc/modprobe.d/8192cu.conf wird die folgende Zeite geschrieben:
options 8192cu rtw_power_mgnt=0 rtw_enusbss=0
Danach muss wieder mal die Datei /etc/network/interfaces bearbeitet werden. Statt eth0 ist diesmal wlan0 dran:
auto lo
iface lo inet loopback
iface eth0 inet dhcp

auto wlan0
iface wlan0 inet dhcp
allow-hotplug wlan0
wpa-ap-scan 1
wpa-scan-ssid 1
wpa-ssid "NAME-DES-WLAN"
wpa-psk "DER-GEHEIME-WLAN-KEY"
Natürlich könnte auch hier eine statische Adresse vergeben werden. Das läuft dann genauso ab, wie oben bei der eth0-Adresse.
auto lo
iface lo inet loopback

iface eth0 inet static
address 172.20.0.2
netmask 255.255.255.0
gateway 172.20.0.1

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 172.20.0.3
netmask 255.255.255.0
gateway 172.20.0.1
wpa-ap-scan 1
wpa-scan-ssid 1
wpa-ssid "NAME-DES-WLAN"
wpa-psk "DER-GEHEIME-WLAN-KEY"

Der WPA-Supplicant ist eine Software, die das Einrichten unterschiedlicher WLAN-Zugänge vereinfachen will. Hier werden alle WLAN-spezifischen Daten in eine Konfigurationsdatei geschrieben und nicht in die Datei /etc/network/interfaces. Dort steht dann nur eine Zeile zusätzlich:

auto wlan0
iface wlan0 inet dhcp
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
Wer diese Features verwenden will, sollte die Anleitung bei Ubuntu durcharbeiten.

WLAN beim Modell 3

Das Modell 3 besitzt WLAN im 2,4 MHz-Band (und Bluetooth) on Bord über den Broadcom-Chip BCM43438. Die Einrichtung erfolgt fast genauso, wie oben beschrieben - nur dass kein WLAN-Stick benötigt wird. Die Anbindung des WLAN-Moduls erfolgt nicht über USB, sondern über den SDIO-Input. Das WLAN-Modul benötigt bei der Einrichtung auch keine Extra-Treiber, es ist lediglich der Energiesparmodus zu beachten.

Auf der Platinenunterseite des Raspberry Pi 3 ist ein Lötpad für eine UF.L-Antennenbuchse (Miniatur-Antennenstecker) vorgesehen (J 13). Das ist z. B. wichtig, wenn das Board in einem Metallgehäuse landet, das die Funksignale abschirmt. Dann kann man die Antenne nach aussen verlegen.

Die aktuellen Raspian-Versionen ab Release 2016-02-26 unterstützen den WLAN-Chip. Der Raspberry Pi sollte für die Konfiguration entweder per Ethernet mit dem Netz verbunden werden, damit sich eine SSH-Verbindung aufbauen lässt, oder er kann mit einem Monitor, Maus und Tastatur bedient werden.

Mit dem Befehl ifconfig -a überprüfen Sie zunächst, ob der interne WLAN-Adapter des Raspberry Pi 3 von Raspbian erkannt wurde und betriebsbereit ist. In der Ausgabe müßte ein Netzwerk-Device namens "wlan0" auftauchen,das Onboard-WLAN des RasPi. Sollte neben "lo" und "eth0" kein weiteres Netzwerk-Device auftauchen, müssen Sie das Raspbian-Betriebssystem aktualisiert und dann den Rechner neu starten. Nach dem Neustart sollte die interne Wlan-Schnittstelle dann verfügbar sein. Der Update erfolgt mit der Kommandofolge:

sudo apt-get update
sudo apt-get dist-upgrade
sudo shutdown -r now

Standardmäßig sind beim Raspberry Pi 3 die WLAN-Kanäle 12 und 13 deaktiviert, da diese in den USA nicht zugelassen sind. Um dies zu ändern, müssen Sie die länderspezifischen Einstellungen anpassen. Das Konfigurationswerkzeug raspi-config enthält bereits einen entsprechenden Menüpunkt (Internationalisation Options → Change Wi-Fi Country), so dass der Ländercode problemlos angepasst werden kann. In Deutschland sollte die Einstellung "DE Germany" lauten.

Danach checken Sie, welche Netzwerke in Reichweite sind. Die Netzwerke sind absteigend nach Signalstärke geordnet und jeweils in der Zeile mit "ESSID" befindet sich der Netzwerkname, den Sie in den kommenden Schritten benötigen. Den WLAN-Scan führen Sie mit dem folgenden Kommando durch:

sudo iwlist wlan0 scan
Nun sind die Vorarbeiten erledigt.

Nun muss für das gewünschte WLAN der geheime Schlüssel hinterlegt werden. Dieser Eintrag erfolgt am Ende der Datei /etc/wpa_supplicant.conf. Solche Einträge können dort auch mehrfach hinterlegt werden, falls mehrere WLANS gespeichert werden sollen. Der Eintrag lautet (SSID = WLAN-Name, PSK = WLAN-Passwort):

network={
    ssid="MeinWLAN"
    psk="DasGeheimeWlanPasswort"
    key_mgmt=WPA-PSK
}
Abschließend werden die Änderungen der Datei gespeichert und der kompletten Netzwerkdienst neu gestartet:
sudo service networking restart
Alternativ (z. B. wenn Sie per SSH am RasPi eingeloggt sind) können Sie das WLAN am Raspberry Pi erst deaktivieren und anschließend wieder aktivieren:
sudo ifconfig wlan0 down
sudo ifconfig wlan0 up

Damit ist die Einrichtung der WLAN-Verbindung abgeschlossen. Das System sollte nach einem Neustart der Netzwerkfunktionen (s. o.) automatisch eine Verbindung zum konfigurierten WLAN aufbauen und sich via DHCP eine IP-Adresse vom Router holen.

Wichtig ist, dass für die Dauer der Aktivierung des WLAN-Moduls dessen Energiesparmodus deaktiviert ist, da es sonst vorkommen kann, dass sich der Raspberry Pi vom Netzwerk trennt. Um das zu erreichen, fügen wir folgende zwei Zeilen am Ende der WLAN-Definition in der Datei /etc/network/interfaces ein:

pre-up iw dev wlan0 set power_save off
post-down iw dev wlan0 set power_save on

Soll der WLAN-Schnittstelle eine statische IP-Adresse im Netz zugewiesen werden, muss der Inhalt der Datei /etc/network/interfaces geändert werden. Innerhalb der Datei findet man den Eintrag zum WLAN-Interface wlan0 der z. B. folgendermaßen lautet:

   .
   .
   .
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
   .
   .
   .
Dieser Eintrag wird nun folgendermaßen geändert (die angegebenen IP-Adressen ersetzen Sie durch jene Ihres Netzes):
   .
   .
   .
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 10.10.10.252
netmask 255.255.255.0
gateway 10.10.10.254
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

pre-up iw dev wlan0 set power_save off
post-down iw dev wlan0 set power_save on
   .
   .
   .

Hostnamen ändern

Grundsätzlich sollte man das Tool raspi-config zum Ändern des Hostnamens verwenden. Es gibt in der Regel vier Dateien, in denen der Hostname eingetragen sein kann:

/etc/hostname
/etc/mailname
/etc/hosts
/etc/resolv.conf (selten)
Die Dateien lassen sich mit einem Editor ändern, die /etc/hostname zusätzlich mit dem Kommando hostname. Zum Ändern des Hostnamens müssen alle Dateien aktualisiert werden. Wenn Sie die Änderung irgendwo vergessen, erscheinen Fehlermeldungen wie "Hostname xyz kann nicht aufgelöst werden" oder "unable to resolve host xyz". In der Datei /etc/hosts kann der Hostname (z. B. "himbeere") durch die folgende Zeile am Ende der Datei eingetragen werden:
127.0.1.1  himbeere

Routing prüfen

Funktioniert das lokale Netz (überprüfen mit dem ping-Kommando), gibt es aber keine Verbindung zum Internet, kann es am Routing liegen. Das sogenannte Standard-Gateway ist in einem Netz der Router in das Internet - also die Netzkomponente, die häufig vom Internet-Provider zur Verfügung gestellt wird. Die Verbindung ins Internet ist nur dann möglich, wenn ein Host die IP-Adresse des Standard-Gateways kennt. Überprüfen können Sie dies mit dem route- oder netstat-Kommando:
$ route -n
Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.27.1.1       0.0.0.0         UG    0      0        0 eth0
10.10.0.0       0.0.0.0         255.255.0.0     U     0      0        0 eth0
10.27.0.0       0.0.0.0         255.255.0.0     U     0      0        0 eth0

$ netstat -r
Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags   MSS Fenster irtt Iface
default         10.27.1.1       0.0.0.0         UG        0 0          0 eth0
10.10.0.0       *               255.255.0.0     U         0 0          0 eth0
10.27.0.0       *               255.255.0.0     U         0 0          0 eth0
Die Standard- bzw. Default-Route (die immer dann gilt, wenn der Host die Route zur Ziel-Adresse nicht kennt) ist in der aufgelisteten Routing-Tabelle daran zu erkennen, dass sie mit "0.0.0.0" oder "default" beginnt. Gibt es keine Zeile mit "0.0.0.0" oder "default" oder ist hier eine falsche IP-Adresse eingetragen, wird in der Regel keine Verbindung ins Internet möglich sein. Der Grund für das Fehlen des Standard-Gateways ist eine unvollständige bzw. fehlerhafte manuelle IP-Konfiguration - oder es fand überhaupt keine IP-Konfiguration statt.

Enthält die Tabelle eine Standard-Route, entspricht die angegebene IP-Adresse der des Standard-Gateways und es ist trotzdem keine Internet-Verbindung möglich, hat das Standard-Gateway möglicherweise keine Verbindung zum Internet oder es ist ausgeschaltet. Das kann man mit einem Ping auf das Standard-Gateway klären. Ist das Standard-Gateway selbst erreichbar, dann stimmt zumindest die Konfiguration bezüglich des Standard-Gateways. Zum Test kann man eine Route auch manuell eintippen:

sudo route add default gw 10.27.1.1

Netzwerk einrichten ab Raspbian "Jessie"

Mit dem Release von "Jessie" wird Debian um das Startsystem systemd erweitert, was sich nicht nur auf etliche Systemdienste, sondern auch auf die Netzwerkkonfiguration auswirkt. Rein prinzipiell können Sie das Netz wie oben beschrieben über die Datei /etc/network/interfaces einrichten und das Netz über das Script im Verzeichnis /etc/init.d nach bisheriger System-V-Tradition starten. Ab der Version "Jessie" der Debian/Raspbian-Distribution eröffen sich aber zwei neue Möglichkeiten. Es kann trotzdem Gründe dafür geben, dass Sie weiterhin die IPv4-Konfiguration über die Datei /etc/network/interfaces vornehmen wollen. Dann müssen Sie aber auch den dhcpcd-Daemon außer Betrieb nehmen, wie es im folgenden Abschnitt geschildert wird.

Netzwerkkonfiguration über dhcpcd

Raspbian verwendet für die Netzwerkkonfiguration auch bei der Vergabe statischer Adressen den DHCP-Client-Dienst dhcpcd, der zum Problem werden kann, wenn man die IPv4-Konfiguration auf diese Weise vornimmt. Eignetlich ist er nur bei komplexen Anwendungen notwendig.

Wenn man diesen DHCP-Client definitiv nicht braucht, dann sollte man ihn deaktivieren. Entweder man schaltet den Daemon aus (empfohlen). Bei Raspbian Wheezy:

sudo service dhcpcd stop
sudo update-rc.d -f dhcpcd remove
Bei Raspbian Jessie: pre> sudo service dhcpcd stop sudo systemctl disable dhcpcd Wenn man radikal sein will, dann entfernt man den dhcpcd komplett:
sudo service dhcpcd stop
sudo apt-get remove dhcpcd5
Um die Änderungen zu übernehmen, folgt hier ein Reboot.

Wollen Sie den DHCPCD nicht deaktivieren, weil er für ein bestimmtes Interface benötigt wird, können Sie die Konfiguration durch den dhcpcd für ein bestimmtes Interface ausschließen. Dazu tragen Sie in die Konfigurations-Datei /etc/dhcpcd.conf eine Zeile ein, die das Interface von der Konfiguration durch den dhcpcd ausschließt, z. B.:

denyinterfaces eth0
Diese Zeile klammert das betreffende Interface aus der Netzwerk-Konfiguration aus. Die Netzwerk-Konfiguration für dieses Interface muss dann in der Datei /etc/network/interfaces erfolgen.

Alternativ können Sie die IPv4-Konfiguration aber auch komplett in den dhcpcd verlagern. Ab "Jessie" verwendet Raspbian für die Netzwerkkonfiguration auch bei der Vergabe statischer Adressen den DHCP-Client. Zuvor sollten Sie feststellen, ob der "hcpcd überhaupt aktiv ist.

sudo service dhcpcd status
Zeigt der Status einen installierten, aber abgeschalteten dhcpcd an, müssen Sie diesen einschalten. Erst dann können Sie die Konfiguration vornehmen.
sudo service dhcpcd start
sudo systemctl enable dhcpcd
Für die Ethernet-Schnittstelle erzwingen Sie mit den folgenden Zeilen eine feste IP-Adresse. Dazu hängen Sie die Angaben an die vorhandene Datei /etc/dhcpcd.conf an. Die IP-Adressen sind nur beispielhaft; Sie müssen diese an Ihr Netz anpassen. Bei der Vergabe der IP-Adresse achten Sie darauf, solche Adressen zu wählen, die bis dahin nicht verwendet werden und sich auch nicht im Adress-Pool eines DHCP-Servers befinden. Sonst kommt es zu Verbindungsproblemen im Netz.
interface eth0

static ip_address=10.10.0.10/24
static routers=10.10.0.1
static domain_name_servers=10.10.0.1

interface wlan0

static ip_address=10.10.0.11/24
static routers=10.10.0.1
static domain_name_servers=10.10.0.1
Die Angabe "/24" hinter der IP-Adresse ist eine Verkürzte Angabe der Netzmaske. Sie besagt, dass von den 32 Bit der IP-Adresse 24 Bit dem Netzwerk zugeordnet sind. Das entspricht der Netzmaske 255.255.255.0 (also ein C-Netz).

Wichtig: Die Konfiguration in der Datei /etc/network/interfaces muss wieder in den Ursprungszustand versetzt werden:

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
   wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
   wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
Um die Änderungen zu übernehmen, folgt auch hier ein Reboot.

Stört Sie nicht, dass mit dem dhcpcd ein zusätzlicher Dienst läuft, und haben Sie auch keine weiteren Anforderungen an die Netzwerkkonfiguration, können Sie es bei den oben beschriebenen Änderungen belassen. Übrigens erzeugt der dhcpcd beim Booten eine längere Wartezeit, wenn kein Netz zur Verfügung steht. Man kann die Wartezeit verkürzen, indem man in der Datei /etc/dhcpcd.conf die folgende Zeile einträgt (Angabe in Sekunden):

timeout 5

Netzwerk-Konfiguration über Systemd

Eine saubere Konfiguration, die auch auf weiteren Linux-Systemen bzw. bei späteren Versionen des Raspian funktioniert, ermöglicht jedoch erst ein Umstieg auf die Dienste von Systemd. Systemd ist inzwischen auf vielen Linux-Systemen für den Bootvorgang und die damit einhergehenden Initialisierungen aller Dienste verantwortlich. Das bisherige SysV-Init erledigte alle Aufgaben immer nacheinander. Das stellte sicher bei den frühen UNIX- und Linux-Systemen kein Problem dar, weil nur relativ wenige Dinge zu initialisieren und starten waren. Auch konnte die Reihenfolge der Startscripte recht einfach deterministisch festgelegt werden. Inzwischen ist der Startvorgang aber immer vielschichtiger und komplexer geworden. Systemd versucht maximale Parallelisierung der Startprozesse und erreicht damit sehr schnelle Boot-Zeiten. Zum Systemd gibt es viele Infos und Tutorials im Netz (siehe Links am Ende des Textes).

Der erste Schritt zu einer sauberen Netzwerkkonfiguration besteht darin, alle Dienste zu entfernen, die hier Probleme bereiten könnten. Man sollte die Umstellung auf systemd-networkd auch nicht per SSH machen. Falls es dabei eine Unterbrechung der Verbindung geben sollte, bekommt man die Verbindung ggf. nicht wieder aufgebaut. Alle folgenden Arbeiten werden als Administrator (root) ausgeführt (→ sudo su).

Zuerst prüfen Sie, ob der Dienst systemd-networkd vorhanden ist. Das ist die Voraussetzung für alle weiteren Arbeiten. Ab Raspbian Jessie sollte das funktionieren. Der Dienst für die Namensauflösung, systemd-resolved, sollte ebenfalls verfügbar sein.

systemctl status systemd-networkd
systemctl status systemd-resolved
Beidesmal sollte dort "Loaded: loaded" gemeldet werden.

Zunächst werden die alten Network- oder Networking-Komponenten zumindest deaktiviert. Deinstallation und Löschen empfiehlt sich nicht, weil man sonst nur schwer wieder auf den alten Zustand zurückkehren kann (wobei man den dhcpcd löschen kann, falls er nicht gebraucht wird).

# dhcpcd stoppen und loeschen
systemctl stop dhcpcd
systemctl disable dhcpcd
apt-get -y remove dhcpcd5 openresolv

# SysV-Networking stoppen
systemctl disable networking.service
# bzw.  update-rc.d networking remove
# falls der Netzwork Manager laeuft:
systemctl disable NetworkManager
In den Status-Zeilen "Loaded: loaded" sollte hinten "enabled" stehen.

Damit sind die Vorarbeiten abgeschlossen. Nun geht es darum, eine Netzwerk-Konfiguration anzulegen. Diese kann auf mehrere Dateien verteilt sein, die sich alle im selben Verzeichnis befinden. Um Netzwerkgeräte mit systemd-networkd zu konfigurieren, müssen Sie die Informationen in Textdateien mit der Endung ".network" ablegen. Diese Konfigurationsdateien werden dann im Verzeichnis /etc/systemd/network gespeichert. Wenn mehrere Dateien, die auf ".network" enden, lädt und verarbeitet sie der Systemd nacheinander in lexikalischer Reihenfolge. Sie können also ähnlich wie bei den Präfixen der SysV-Init-Links die Reihenfolge durch den Namen festlegen. Beachten Sie, dass Systemd-Dienstdateien auch unterhalb des Verzeichnisses /usr/lib/systemd/ liegen können. Die Dateien in /etc/systemd/ habe jedoch höhere Priorität.

Ist das Verzeichnis /etc/systemd/network/ leer, können Sie es einfach anlegen. Gibt es das Verzeichnis dagegen schon, informieren Sie sich über die Namen der bereits vorhandenen Dateien - gegebenenfalls können sie eine bereits vorhandene Datei ändern. Sonst legen Sie für jedes Inrerface eine neue Datei an. Der Dateiname ist dabei relativ egal. Er muss nur auf ".network" enden. Trotzdem empfiehlt es sich, sinnvolle Dateinamen zu wählen, um sich im Fehlerfall oder bei späteren Änderungen leichter zurecht zu finden. Derzeit gibt es drei Arten von Konfigurationsdateien: ".link", ".network" und ".netdev".

Angenommen, das Device "eth0" soll mit einer statischen IP-Adresse ans Netz. Dann erstellen Sie eine neue Datei, z. B. eth0.network, und tragen dort die Konfiguration ein:

# Fuer was soll die Konfiguration vorgenommen werden?
[Match]
# Wildcards sind möglich! "Name=eth*" für die gleichzeitige Konfiguration vieler 
# Interfaces waere denkbar, ist aber nur selten sinnvoll
Name=eth0

[Network]
# Die Netzwerkkonfiguration
Description=RasPi eth0 static
Address=10.10.0.10/24
Gateway=10.10.0.1
DNS=10.10.0.1
Alternativ: Eintrag für eine IP-Konfiguration mit DHCP:
[Match]
Name=wlan0

[Network]
Description=RasPi wlan0 dhcp
DHCP=yes

Das ist eigentlich schon alles. Im Verzeichnis /etc/systemd/network/ sind außer den ".network"-Dateien wie oben erwähnt auch noch ".netdev"- und ".link"-Dateien möglich. ".link"-Dateien beschreiben Eigenschaften eines Netzwerkgerätes, etwa MAC-Adresse, Duplex-Modus etc. Normalerweise sind sie nicht notwendig. ".link"-Dateien enthalten einen [Match]-Block, in dem die Eigenschaften des Netzwerk-Devices festgelegt werden. Streng genommen sind diese Dateien nicht Teil des networkd, sondern eine Ergänzung für udev. Sie bieten eine einfache und selbsterklärende Syntax anstelle der Regeln für die komplexe Syntax und Logik von udev. Zum Beispiel wird ein Interface auf eine MTU von 1500 Bytes, Full Duplex Gigabit und Wake-on-LAN gesetzt:

[Match]
MACAddress=A8:30:44:33:11:22

[Link]
MTUBytes=1500
BitsPerSecond=1G
Duplex=full
WakeOnLan=magic

".netdev"-Dateien erstellen virtuelle Geräte, z. B. Bridges, VLANs etc.

In einigen Fällen muss auch noch ein neuer Service eingeführt werden, z. B. beim Wake-on-LAN (WOL), wo das Interface noch für WOL freigegeben werden muss. Das ist dann aber schon Standard-Systemd-Steuerung. Trotzdem gestalt sich der Service recht einfach und selbsterklärend. Die Datei /etc/systemd/system/wol@.service lautet:

[Unit]
Description=Wake-on-LAN for %i
Requires=network.target
After=sys-subsystem-net-devices-%i.device

[Service]
ExecStart=/usr/sbin/ethtool -s %i wol g
Type=oneshot

[Install]
WantedBy=multi-user.target\

Doch zurück zur Basisinstallation. Nach dem Erstellen der Konfigurationsdatei(en) werden die Netzdienste gestartet:

# Systemd-Netzwerkdienst starten
systemctl enable systemd-networkd.service
systemctl start systemd-networkd.service

# Prüfen, ob der Dienst laeuft:
systemctl status systemd-networkd
Der Parameter "enable" aktiviert den Systemd-Netzwerkdienst dauerhaft, so dass er bei jedem Bootvorgang gestartet wird. "start" startet den Dienst aktuell. Mit den Kommandos ifconfig oder ip kann nun überprüft werden, ob die Netzwerk-Konfiguration geklappt hat.

Den Zugang zum WLAN regelt nach wie vor das Programm wpa_supplicant. Damit das Programm schon aktiv ist, wenn das Netzwerk startet, erstellen Sie zuerst die Konfigurationsdatei /etc/wpa_supplicant/wpa_supplicant-wlan0.conf (die zweite Datei nenen Sie dann /etc/wpa_supplicant/wpa_supplicant-wlan1.conf usw.). In der Datei können Sie beliebig viele WLANs definieren; das Programm wählt automatisch aus den verfügbaren WLANs das Netz mit der höchsten Priorität aus. Der Inhalt der Datei lautet:

ctrl_interface=/var/run/wpa_suppticant
eapol_version=l
ap_scan=1
fast_reauth=l

network={
  ssid="das_wlan"
  psk="GeheimesPasswort"
  priority=l
}

network={
  ssid="anderes_wlan"
  psk="AnderesGeheimesPasswort"
  priority=2
}
Des Weiteren brauchen Sie einen Dienst, der wpa_supplicant für die Schnittstelle wlan0 startet. Dazu erstellen Sie die Datei /etc/systemd/system/wpasupplicant@.service mit der Service-Definition. Es handelt sich um einen generischen Dienst, dessen Enable- und Startkommando das folgende Listing zeigt:
[Unit]
Descriptiom=WPA supplicant daemon
Before=network.target
Wants=network.target

[Service]
type=simple
ExecStart=/sbin/ip l set %i up
ExecStart=/sbin/wpa_supplicant -B -i %i -c /etc/wpa_supplicant/wpa_supplicant-%i.conf
ExecStop=/usr/sbin/ip link set dev %i down

[Install]
Alias='multi-user.target.wants/wpa_supplicant@%i.service

Dann muss dieser Dienst noch dauerhaft eingebunden und gestartet werden:

systemctrl enable wpasupplicant@wlan0.service
systemctrl start wpasupplicant@wlan0.service
Im Anschluss an diese Arbeiten sollte auch das WLAN nach dem Booten bereitstehen.

DNS-Konfiguration über Systemd

Nun muss noch der DNS-Dienst systemd-resolved konfiguriert werden. Die Datei /etc/resolv.conf wird vom networkd nicht verwendet. Stattdessen kommt der Dienst resolved zum Einsatz, der eine dynamische Variante der Datei generiert. Zum Aktivieren sind folgende Kommandos notwendig:

# DNS-Dienst systemd-resolved aktivieren und starten:
systemctl enable systemd-resolved.service
systemctl start systemd-resolved.service

# Prüfen, ob der Dienst laeuft:
systemctl status systemd-resolved
In der Status-Zeile "Loaded: loaded" sollte hinten "enabled" stehen.

Einmal gestartet, erstellt der Systemd seine eigene Datei resolv.conf unterhalb von /run/systemd. Es ist jedoch üblich, DNS-Resolver-Informationen in der Datei /etc/resolv.conf zu speichern, und viele Anwendungen verlassen sich immer noch auf diese Datei. Für die Kompatibilität erstellen Sie einen symbolischen Link zu /etc/resolv.conf:

mv /etc/resolv.conf /etc/resolv.conf.ORIG 
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Die Konfiguration erfolgt durch Bearbeiten der Datei /etc/systemd/resolved.conf. Dort genügt ein Eintrag:

[Resolve]
DNS=10.10.10.1 8.8.8.8
Alle hier definierten DNS-Server liegen in ihrer Priorität hinter denen, die in einer ".network"-Datei festgelegt wurden. Die Einträge werden jedoch als alternative Nameserver verwendet (8.8.8.8 ist übrigens die Adresse des Google-Nameservers). Dazu ein Beispiel: Es wird ein statischer DNS 192.168.127.1 in einer der ".network"-Dateien definiert. Ausserdem stehen die o. a. Server in der Datei /etc/systemd/resolved.conf. Insgesamt erhält man dann die DNS-Server:
    192.168.127.1
    10.10.10.1
    8.8.8.8
Anschliessende den Dienst noch einmal neu starten:
systemctl restart systemd-resolved.service

Übrigens: Wenn man einen Service aktiviert bzw. deaktiviert, könnte man den Zusatz ".service" ggf. auch weglassen. Systemd nimmt immer die Erweiterung ".service" an, wenn nichts weiter definiert wurde. Man findet derartig verkürzte Kommandos manchmal in irgendwelchen Anleitungen. Es ist trotzdem sinnvoll, wichtige Systemkommandos immer vollständig anzugeben.

Links


Copyright © Hochschule München, FK 04, Prof. Jürgen Plate
Letzte Aktualisierung: