![]() |
Raspberry Pi: Netzwerk-KonfigurationProf. Jürgen Plate |
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.
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.
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 dhcpDer 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.254Die 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 restartSollten 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.8Prinzipiell 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-allroutersDort 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-allroutersIm 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:
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 rtl8192cuNachdem 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=0Danach 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.
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 scanNun 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 restartAlternativ (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 . . .
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
$ 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 eth0Die 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
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.
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 removeBei 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 dhcpcd5Um 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 eth0Diese 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 statusZeigt 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 dhcpcdFü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.1Die 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.confUm 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
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-resolvedBeidesmal 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 NetworkManagerIn 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.1Alternativ: 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-networkdDer 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.serviceIm Anschluss an diese Arbeiten sollte auch das WLAN nach dem Booten bereitstehen.
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-resolvedIn 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.8Alle 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.