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.

Bei den neueren Versionen von Raspbian wird eine verbindungslokale (link-local) Adressierung vorgenommen. Microsoft hat für Windows eine Möglichkeit geschaffen, dass der Rechner sich selbst eine IP-Adresse geben kann. Ist der Computer für DHCP konfiguriert, kann er, wenn kein DHCP-Server verfügbar ist, sich selbst automatisch eine IP-Adresse zuweisen - etwa bei einem Netzwerk ohne DHCP-Server oder wenn der DHCP-Server ausgefallen ist. Microsoft bezeichnet diese automatische Adresskonfiguration als APIPA (Automatic Private IP Addressing). Beim Raspberry Pi mit Raspbian wird diese Methode ebenfalls verwendet. Sie wird hier meist als "Auto-IP" bezeichnet. So kann der Raspberry auch beim ersten Start per SSH angsesprochen und auch ohne Tastatur und Bildschirm ("headless") erreicht werden.

Die IANA (Internet Assigned Numbers Authority) hat den Bereich 169.254.0.0 bis 169.254.255.255 (kurz: 169.254.0.0/16) für automatische Zuweisung privater IP-Adressen (APIPA) reserviert, der garantiert keine Konflikte mit routingfähigen Adressen verursacht. In RFC 3927 hat die IETF (Internet Engineering Task Force) diese Adressen zur verbindungslokalen (link-local) Adressierung bei IPv4 definiert. Die ersten (169.254.0.0/24) und letzten 256 Adressen (169.254.255.0/24) sind für zukünftige Verwendung reserviert und dürfen nicht von einem Host ausgewählt werden. Verbindungslokale Adressen werden verwendet, wenn andere Mittel zur Adressenzuweisung nicht verfügbar sind. RFC 3927 warnt vor der gleichzeitigen Verwendung gemischter Konfiguration, also verbindungslokaler IPv4-Adressen und gleichzeitig global routingfähiger Adressen auf derselben Schnittstelle. Daher suchen Hosts auch immer erst nach einem DHCP-Server im Netzwerk, bevor sie verbindungslokale Adressen zuweisen.

Jedes Mal, wenn Sie also eine Adresse 169.254.xxx.xxx sehen, konnte der Raspberry Pi keinen DHCP-Server erreichen und hat sich automatisch eine Link-Local-Adresse aus dem 169.254.xxx.xxx/16 Subnetz zugewiesen. Beachten Sie, dass der Computer nicht mit Computern in anderen Subnetzen (oder mit Computern, die keine automatische Zuweisung privater IP-Adressen verwenden) kommunizieren kann. Automatische Zuweisung privater IP-Adressen ist beim RasPi ebenso standardmäßig aktiviert. Bei Problemen im Netz kann es vorkommen, dass der RasPi mal eine Adresse per DHCP bekommt und bei Kommunikationsproblemen selbst eine Adresse generiert. Ich Netz sieht das dann so auch, als ob er manchmal nicht erreichbar sei oder willkürlich IP-Adressen konfiguriert.

Beim automatischen Adresskonfigurationsprozess wählen Netzwerkhosts eine zufällige Kandidatenadresse innerhalb des reservierten Bereichs aus und verwenden ARP-Sonden (ARP = Address Resolution Protocol), um sicherzustellen, dass die Adresse nicht im Netzwerk verwendet wird. Wenn eine global routingfähige oder private Adresse verfügbar wird, nachdem eine verbindungslokale Adresse zugewiesen wurde, sollte die Verwendung der neuen Adresse in der Regel der verbindungslokalen Adresse für neue Verbindungen vorgezogen werden, die Kommunikation über die verbindungslokale Adresse ist jedoch weiterhin möglich.

Den Raspberry Pi im Netz finden

Manchmal reicht es schon, den Befehl ping raspberry.local zu versuchen. Solange die Dateien /etc/hostname oder /etc/hosts nicht geändert wurden, heisst der Computer "raspberry". Das klappt aber nicht immer. Um nun den RasPi zu suchen, gibt es mehrere Möglichkeiten:

Statische Netzwerkadresse vergeben

Im folgenden wird die "klassische" Methode beschrieben, die weiterhin gültig ist. Ab der Raspbian-Version "Jessie" erfolgt die Netzwerkkonfiguration auf andere Weise. Beachten Sie das entsprechende Kapitel weiter unten. Ab der Version "Stretch" ist es dann nochmals anders, siehe das Kapitel dazu.

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

# eigene 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 208.67.222.222 208.67.220.220
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
# OpenDNS Servers
nameserver 208.67.222.222
nameserver 208.67.220.220
Prinzipiell können Sie beliebig viele Adressen von DNS-Servern angeben. Im Beispiel habe ich noch die Adresse der OpenDNS-Nameservers hinzugefügt. Bei der aktuellen Version von Raspbian wird die Datei aber beim Booten wieder mit Standardwerten überschrieben. In diesem Fall hilft entweder die Angabe in der Datei /etc/network/interfaces (siehe oben) oder eine zusätzliche Zeile in der Konfiguration des DHCP, Datei etc/dhcp/dhclient.conf:
option domain-name-servers 172.20.1.254, 208.67.222.222, 208.67.220.220

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 Raspbian-Betriebssystem 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 
bzw. wenn nur die ESSID interessiert:
sudo iwlist wlan0 scan | egrep "(ESSID|IEEE)"
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/wpa_supplicant.conf. Solche Einträge können dort auch mehrfach hinterlegt werden, falls mehrere WLANS gespeichert werden sollen. Der Eintrag lautet minimal (SSID = WLAN-Name, PSK = WLAN-Passwort):

country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
   .
   .
   .
network={
    ssid="MeinWLAN"
    psk="DasGeheimeWlanPasswort"
    key_mgmt=WPA-PSK
}
   .
   .
   .
Achten Sie darauf, dass bei den Einträgen vor und nach den Gleichheitszeichen keine Leerzeichen stehen dürfen! Der Ländercode bei country muss in Großbuchstaben angegeben werden. Fehlt er, wird der WLAN-Controller automatisch deaktiviert. Zuständig dafür ist die Systemd-Service-Datei /lib/systemd/system/wifi-country.service.

Es lassen sich aber auch noch weitere Parameter, beispielsweise die Art der Verschlüsselung angeben. Das folgende Beispiel zeigt gleichzeitig, dass sich auch mehrere WLAN-Verbindungen definieren lassen. Im Beispiel werden zwei WLAN-Netze definiert. Je nachdem, in welchem Netz sich der Raspberry Pi befindet, wird automatisch eine Verbindung aufgebaut. Es können so auch noch weitere Verbindungen hinzugefügt werden. Es muss nur jeweils nur ein passender network={ .. }-Codeblock definiert werden:

   .
   .
   .
# WLAN_1 hat eine WPA2-verschluesselte Verbindung
network={
    ssid="WLAN_1"
    psk="DasGeheimeWlanPasswort_1"
    proto=RSN
    scan_ssid=1
    key_mgmt=WPA-PSK
    pairwise=CCPM
    group=TKIP
}

# WLAN_2 hat nur eine WPA-verschluesselte Verbindung
network={
    ssid="WLAN_2"
    psk="DasGeheimeWlanPasswort_2"
    proto=WPA
    scan_ssid=1
    key_mgmt=WPA-PSK
    pairwise=TKIP
    group=TKIP
}
   .
   .
   .
Abschließend werden die Änderungen der Datei gespeichert und der kompletten Netzwerkdienst neu gestartet:
sudo service networking restart

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.

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 wie oben beschrieben. 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
   .
   .
   .

WLAN "schläft ein"

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. Für WLAN-Adapter auf Basis von Realtec-Chips erreichen Sie das durch einen Eintrag in der Datei /etc/modprobe.d/8192cu.conf:

options 8192cu rtw_power_mgnt=0 rtw_enusbss=1 rtw_ips_mode=1
Auf dem Raspberry Pi mit eingebautem WLAN-Interface genügt eine Zeile in der Datei /etc/network/interfaces in der WLAN-Sektion:
wireless-power off

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
Alternativ kann auch das Kommando ip verwendet werden, um die Routing-Tabelle auszugeben:
ip route
Das Kommando eigent sich auch, die Interfaces anzuzeigen:
ip addr
und natürlich für alle anderen Netzwerkeinstellungen.

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 208.67.222.222 208.67.220.220 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
    208.67.222.222
    208.67.220.220
    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.

Netzwerkonfiguration ab Raspbian "Stretch"

Bei "Stretch" gab es bei der Netzwerkonfiguration wieder größere Änderungen. Anstelle von eth0, eth1 etc. heißen die Netzwerkschnittstellen jetzt enxb827eb11442e etc. Grund dafür ist, dass die Schnittstellennamen nun mit Hardware-IDs verbunden sind - die Schnittstellennamen sind somit reproduzierbar immer dieselben. Wer aber etliche Scripte und Programme laufen hat, die gerne eth0 haben wollen, kann den alten Zustand wieder herstellen - siehe folgendes Kapitel.

Die Datei /etc/network/interfaces bleibt bei "Stretch" leer, auch für die WLAN-Konfiguration. Für die Konfiguration der Ethernet-Schnittstelle ist jetzt nicht mer systemd, sondern der dhcpcd zuständig. Solange man die Netzwerkkonfiguration über irgendwelche GUI-Tools durchführt, muss man sich nicht umgewöhnen, die Ethernet-Schnittstelle empfängt weiterhin Ihre IP-Konfiguration über DHCP und die WLAN-Einstellungen werden weiterhin in der Datei /etc/wpa_supplicant/wpa_supplicant.conf gespeichert.

Zur Konfiguration einer statischen IP-Adresse für die Ethernet-Schnittstelle passen Sie die Datei /etc/dhcpcd.conf an, beispielsweise nach dem folgenden Schema:

   ...
interface enxa8c7eb26412e
static ip_address=10.20.30.99/24
static routers=10.20.30.138
static domain_name_servers=10.20.30.254
Die Notation ".../24" ist schon seit langem bei klassenlosem Routing üblich. Die Zahl hinter dem Schrägstrich gibt an, wieviele Bits der Netzwerkanteil der IP-Adresse belegt. Damit halt man dann auch gleich automatisch die Netzmaske und die Broadcast-Adresse definiert. ".../24" heisst z. B., dass die ersten 24 Bit zur Netzwerkadresse gehören und die übrigen 8 Bit zur Hostadresse, was einer herkömmlichen Netzmaste von 255.255.255.0 entspricht. ".../16" würde hingegen ein B-Netz definieren (Netmaske: 255.255.0.0). Damit die Änderungen wirksam werden, führen Sie das folgende Kommado aus:
sudo systemctl restart dhcpcd
Alternativ können Sie den Rasbperry Pi natürlich auch neu starten. Wenn keine "Sonderwünsche" bestehen, ist die ganze Konfiguration nun einfacher und weniger fehleranfällig geworden.

Wer sich nicht sicher ist, was er als DNS-Server (domain_name_servers) angeben soll, kann die Server von OpenDNS angeben. OpenDNS ist ein freier, nicht aber offener (im Sinne von Opensource) DNS-Server. Er finanziert sich, indem bei fehlerhaft angegebenen Domainname eine eigene Suchseite angezeigt wird. Die OpenDNS-Server haben die IP-Adressen:

    208.67.222.222
    208.67.220.220

WLAN-Konfiguration vorab

Dies ist vor allen Dingen bei Rasperry Pi Zero interessant. Sie können bei der Installation eines Raspbian Images (nicht NOOBS) die WLAN-Parameter vorab einstellen und den SSH-Server aktivieren. Das ermöglicht die Inbetriebnahme eines Raspberry Pi ohne Tastatur und Bildschirm. Die Datei wpa_supplicant.conf wird in der /boot_partition angelegt, was sogar unter Windows möglich ist, weil diese Partition ja ein FAT-Dateisystem hat. Es müssen hier lediglich die zusätzlichen Parameter ctrl_interface und update_config eingetragen werden, idealerweise auch country (damit haben Sie mehr Kanäle). Die folgende Datei gibt ein Schema an:

# Datei /boot/wpa_supplicant.conf
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
       ssid="WLAN-Name"
       psk="Passwort"
       key_mgmt=WPA-PSK
}

Und nicht vergessen, eine leere Datei namens "ssh" in /boot anzulegen, beispielsweise durch das Kommando touch /boot/ssh. Dann wird der SSH-Zugang frei geschaltet.

Oh Schreck! eth0 ist weg!

ab der Raspbian-Version "Stretch" heißen die Netzwerk-Schnittstellen anders: aus eth0 wird #enx<MAC-Adresse>. Eigentlich muss beim Upgrade auf Raspbian "Stretch" kaum etwas umgestellt werden, aber intern hat sich einiges geändert. Bei einem Upgrade von "Jessie" auf "Stretch" sollte sich in Bezug auf die Netzwerk-Konfiguration sogar nichts ändern, anders verhält sich das bei einer Neuinstallation. Die Netzwerk-Schnittstellen heißen nun anders.

Bisher hießen die kabelgebundene Netzwerkschnittstelle beim Raspberry Pi "eth0". Installiert man "Stretch" neu, heißt die Netzwerkkarte aber nicht mehr "eth0", sondern der Name wird aus dem String "enx" und der MAC-Adresse gebildet (z. B. enxa857abdc0d1e). Die Namensgebung gilt auch für WLAN-Schnittstellen, auch wenn das nicht auf den ersten Blick nicht zu sehen ist. Das WLAN-Netzwerkinterface heißt, sofern die Ethernet-Schnittstelle nicht angeschlossen ist, "wlx" kombiniert mit der MAC-Adresse.

Man kann die neue Namensgebung rückgängig mache, wenn man beispielsweise Programme verwendet, die "eth0" verwenden. Dazu muss die Datei cmdline.txt im Verzeichnis /boot geändert werden. Man hängt dazu einfach "net.ifnames=0" an die Zeile an (Achtung: Nur durch ein Leerzeichen getrennt anfügen, keine Zeilenwechsel etc.). Startet man nun den Raspberry Pi neu, dann heißt die Netzwerkkarte wieder "eth0".

Das interne WLAN-Interface, z. B. beim Raspberry Pi 3 wurde bisher als "wlan0" bezeichnet. Mit dem oben beschriebenen Eintrag in die Datei cmdline.txt bleibt alles beim Alten. Auch ohne den Eintrag scheint es so zu sein. Ist aber das Ethernet-Interface des RasPi inaktiv, taucht auch hier die Benennung nach dem neuen Muster "wlx" + MAC-Adresse auf. Die Neuerung wird also beim WLAN nur sichtbar, wenn die Ethernet-Schnittstelle nicht verbunden ist.

Die vergebenen Namen für die Netzwerkinterfaces erfährt man am einfachsten mit dem Kommando

ip addr show

Mehrere IP-Adressen an eine Schnittstelle binden

Bei vielen Netzwerk-Anwendungen ist die Last für den Server so gering, dass sich durchaus mehrere Dienste auf einem System anbieten lassen, z. B. Webserver, die nicht gerade die Besucherfrequenz von Google haben. Zur Unterscheidung kann man zwar auch mehrere Web-Präsenzen durch den Webserver-Prozess verwalten lassen (der unterscheidet dann über den Domainnamen, welches Angebot gewünscht wird, aber auch bei Web-Diensten kann es sinnvoll sein, für jede Web-Site eine eigene IP-Adresse zu verwenden. Bei anderen Services geht es sowieso nur über unterschiedliche IP-Adressen.

Inzwischen geht sehr einfach über das ip-Kommando. Das sieht dann für die Adresse a.b.c.d so aus:

ip address add a.b.c.d/24 dev eth0
Das kann man auch direkt auf der Kommandozeile testen:
root@testling:~# ip address add 10.10.10.2/24 dev eth0
root@testling:~# ip address add 10.10.10.3/24 dev eth0
root@testling:~# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 
  state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
  state UP group default qlen 1000
    link/ether b8:27:eb:7d:58:60 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.50/24 brd 192.168.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.10.10.2/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.10.10.3/24 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::ba27:ebff:fe7d:5860/64 scope link
       valid_lft forever preferred_lft forever

Sehr bequem lässt sich das mit einem Startscript für die Anbindung weiterer IP-Adressen automatisieren, das seinerseits nichts weiteres tut, als für jede Adresse das Kommando ip aufzurufen. Das Script kommt in das Verzeichnis /etc/rc.local. Dort kann man nicht nur die IP-Adressen für weitere virtuelle Interfaces eintragen, sondern auch die Default-Route setzen und zusätzliche Nameserver eintragen.

#!/bin/bash
# alle zusaetzlichen IP-Adresse eintragen
ip address add 10.10.10.2/24 dev eth0
ip address add 10.10.10.3/24 dev eth0
# default-route eintragen
ip route add default via 10.10.10.251
# Nameserver-Eintraege erweitern
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf
echo "nameserver 1.1.1.1" >> /etc/resolv.conf

Links


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