Getestet auf einem Raspberry Pi 4B mit
Raspbian Buster Lite 2020-02-05 aktualisiert am 2020-02-13.
Raspbian Buster Lite 2019-07-10 aktualisiert am 2019-08-15.
Updates durchgeführt mit sudo apt update && sudo apt full-upgrade && sudo reboot
.
Es wird nicht mit Raspbian Stretch funktionieren !
Hier finden Sie die letzte getestete Revision für Raspbian Stretch Lite .
Die Verwendung systemd-networkd
anstelle der Standardeinstellung dhcpcd
ist natürlich möglich. Aber es ist nicht in allen Fällen sinnvoll.
networkd ist ein kleiner und schlanker Dienst zum Konfigurieren von Netzwerkschnittstellen, der hauptsächlich für Serveranwendungsfälle in einer Welt mit Hotplugged- und virtualisierten Netzwerken entwickelt wurde. Die Konfiguration ähnelt in Geist und Abstraktionsebene der von ifupdown, Sie benötigen jedoch keine zusätzlichen Pakete, um Bridges, Bonds, VLAN usw. zu konfigurieren. Es ist noch nicht sehr gut für die Verwaltung von WLANs geeignet. NetworkManager ist für solche Desktop-Anwendungsfälle noch viel besser geeignet. [1]
Aber für einen Raspi, der in der Nähe eines Fernsehers oder Verstärkers liegt und rund um die Uhr arbeitet, um Audio oder Video oder eine Kamera usw. zu streamen, systemd-networkd
ist dies eine gute Wahl. Sie müssen jedoch einen vollständigen Wechsel vornehmen. Es gibt keine Möglichkeit, sich mit networking
und / oder zu verwechseln dhcpcd
.
♦ Schritt 1: Vorbereitung
Als Referenz verwende ich eine frisch geflashte SD-Karte von Raspbian Buster Lite 2019-07-10 .
Ich werde auf eine kopflose Installation nur mit ssh achten. Wenn Sie dies verwenden, überprüfen Sie die Tippfehler oder sonst, da Sie mit einer unterbrochenen Verbindung verloren gehen. Wenn Sie eine Headless-Installation wünschen, schauen Sie sich SSH (Secure Shell) an und folgen Sie Abschnitt 3. Aktivieren Sie SSH auf einem Headless Raspberry Pi (fügen Sie eine Datei zur SD-Karte auf einem anderen Computer hinzu) .
Zur Fehlerbehebung beim Herunterfahren oder zum Überprüfen von Nachrichten aus früheren Startvorgängen können Sie die permanente Protokollierung in Journald für Nachrichten von systemd [1] aktivieren. Da es große Protokolldateien erzeugt und Speicherplatz ein Problem sein kann, empfehle ich, es nur bei Bedarf zu aktivieren. systemd-networkd benötigt es nicht und die Protokollierung der aktuellen Sitzung ist immer verfügbar.
pi@raspberrypi: ~$ sudo mkdir -p /var/log/journal
pi@raspberrypi: ~$ sudo systemd-tmpfiles --create --prefix /var/log/journal
Deaktiviere das alte Zeug. Stoppen Sie keinen Dienst, deaktivieren Sie sie nur! Es wird also erst beim nächsten Start wirksam.
pi@raspberrypi: ~$ sudo -Es
In /etc/resolvconf.conf
Einsatz dieser Zeilen.
# Set to NO to disable resolvconf from running any subscribers. Defaults to YES.
resolvconf=NO
Deaktivieren Sie dann das klassische Debian-Netzwerk, das mit Dateien verwaltet wird, /etc/network/interfaces
und deaktivieren Sie die Standard-Raspbian- dhcpcd
Netzwerkverwaltung. Wir maskieren es so, dass sie vollständig deaktiviert sind und nicht von anderen Diensten gestartet werden können.
root@raspberrypi: ~# systemctl mask networking.service
root@raspberrypi: ~# mv /etc/network/interfaces /etc/network/interfaces~
root@raspberrypi: ~# systemctl mask dhcpcd.service
Und aktivieren Sie systemd-networkd:
root@raspberrypi: ~# systemctl enable systemd-networkd.service
root@raspberrypi: ~# systemctl enable systemd-resolved.service
root@raspberrypi: ~# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
♦ Schritt 2: Richten Sie die kabelgebundene Ethernet-Schnittstelle ein (eth0)
Erstellen Sie diese Datei mit Ihren Einstellungen. Sie können dies einfach kopieren und in einen Block in Ihre Befehlszeile einfügen, beginnend mit cat
und einschließlich beider EOF (Trennzeichen EOF wird nicht Teil der Datei):
root@raspberrypi: ~# cat >/etc/systemd/network/04-eth.network <<EOF
[Match]
Name=e*
[Network]
# to use static IP (with your settings) toggle commenting the next 8 lines.
#Address=192.168.50.60/24
#DNS=84.200.69.80 1.1.1.1
#[Route]
#Gateway=192.168.50.1
#Metric=10
DHCP=yes
[DHCP]
RouteMetric=10
EOF
root@raspberrypi: ~# exit
pi@raspberrypi: ~$
Neustart, aber nur wenn du ein Ethernet-Kabel angeschlossen hast ;-)
Es ist möglich, dass das RasPi eine neue IP-Adresse erhält, sodass Sie möglicherweise nach der nächsten Verbindung mit ssh suchen müssen .
♦ Schritt 3: WLAN-Schnittstelle einrichten (wlan0)
Erstellen Sie diese Datei mit Ihren Einstellungen:
pi@raspberrypi:~ $ sudo -Es
root@raspberrypi:~ # cat >/etc/systemd/network/08-wifi.network <<EOF
[Match]
Name=wl*
[Network]
# to use static IP (with your settings) toggle commenting the next 8 lines.
#Address=192.168.50.61/24
#DNS=84.200.69.80 1.1.1.1
#[Route]
#Gateway=192.168.50.1
#Metric=20
DHCP=yes
[DHCP]
RouteMetric=20
EOF
root@raspberrypi:~ #
Richten Sie wpa_supplicant mit dieser Datei und Ihren Einstellungen für ssid=
und ein psk=
und aktivieren Sie sie:
root@raspberrypi:~ # cat >/etc/wpa_supplicant/wpa_supplicant-wlan0.conf <<EOF
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE
network={
ssid="TestNet"
psk="realyNotMyPassword"
key_mgmt=WPA-PSK
proto=RSN WPA
}
EOF
root@raspberrypi:~ # chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
root@raspberrypi:~ # systemctl disable wpa_supplicant.service
root@raspberrypi:~ # systemctl enable [email protected]
root@raspberrypi:~ # rfkill unblock 0
root@raspberrypi:~ # exit
root@raspberrypi:~ $
Starten Sie neu, wenn Sie eine WLAN-Verbindung haben. Die meisten von euch werden haben. Viel Glück ...
Es ist möglich, dass das RasPi eine neue IP-Adresse erhält, sodass Sie möglicherweise nach der nächsten Verbindung mit ssh suchen müssen .
♦ Schritt 4: Verkabelung und WLAN-Schnittstelle für Failover verbinden
Sie sollten beide Schnittstellen wie oben beschrieben einrichten und ausführen. Es ist kein Problem, wenn beide Schnittstellen aktiv sind. Der Kernel verwendet zuerst die Schnittstelle mit der niedrigsten Metrik . Hier wird zuerst die Ethernet-Schnittstelle verwendet. Dies hat jedoch einen großen Nachteil. Wie Sie sehen ~$ ip addr
können, hat jede Schnittstelle ihre eigene IP-Adresse. Wenn der Kernel die Schnittstelle wechselt, weil eine ausgefallen ist, verwendet er auch seine neue Quell-IP-Adresse. Dadurch wird jede etablierte zustandsbehaftete TCP-Kommunikation unterbrochen, z. B. SSH, Streaming, Anmeldesitzungen usw. Sie können eine neue Verbindung von der geänderten Quell-IP-Adresse verwenden, aber die alten Verbindungen bleiben hängen. Das wollen wir nicht wirklich.
Die Lösung dieses Problems ist das Kleben . Wir erstellen eine Zwischenschnittstelle bond0
, deren Einstellungen nicht geändert werden. Die Kabel- und WLAN-Schnittstelle wechselt zu bond0
.
Deaktivieren Sie zuerst die einzelnen Ethernet- und WLAN-Netzwerkdateien:
pi@raspberrypi:~ $ sudo -Es
root@raspberrypi:~ # cd /etc/systemd/network/
root@raspberrypi:~ # mv 04-eth.network 04-eth.network~
root@raspberrypi:~ # mv 08-wifi.network 08-wifi.network~
Richten Sie dann die Verbindung mit diesen vier Dateien ein:
root@raspberrypi:~ # cat >/etc/systemd/network/02-bond0.netdev <<EOF
[NetDev]
# status: cat /proc/net/bonding/bond0
Name=bond0
Kind=bond
[Bond]
Mode=active-backup
# primary slave is defined in *eth.network
MIIMonitorSec=500ms
UpDelaySec=1000ms
DownDelaySec=1000ms
MinLinks=1
EOF
root@raspberrypi:~ # cat >/etc/systemd/network/12-bond0-add-eth.network <<EOF
[Match]
Name=e*
[Network]
Bond=bond0
PrimarySlave=yes
EOF
root@raspberrypi:~ # cat >/etc/systemd/network/16-bond0-add-wifi.network <<EOF
[Match]
Name=wl*
[Network]
Bond=bond0
EOF
root@raspberrypi:~ # cat >/etc/systemd/network/20-bond0-up.network <<EOF
[Match]
Name=bond0
[Network]
# to use static IP (with your settings) toggle commenting the next 4 lines.
DHCP=yes
#Address=192.168.50.60/24
#Gateway=192.168.50.1
#DNS=84.200.69.80 1.1.1.1
EOF
root@raspberrypi:~ # exit
pi@raspberrypi:~ $
Jetzt ist es Zeit, neu zu starten.
Es ist möglich, dass das RasPi eine neue IP-Adresse erhält, sodass Sie möglicherweise nach der nächsten Verbindung mit ssh suchen müssen.
Dann können Sie den Verbindungsstatus überprüfen:
pi@raspberrypi:~ $ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eth0 (primary_reselect always)
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 500
Up Delay (ms): 1000
Down Delay (ms): 1000
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:27:eb:53:bd:de
Slave queue ID: 0
Slave Interface: wlan0
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: b8:27:eb:06:e8:8b
Slave queue ID: 0
Testbindung: Mit dem obigen Bindungsstatus sehen Sie, dass sich die Bindung Currently Active Slave:
ändert und die nicht mehr MII Status:
funktioniert.
Wenn du kopflos bist, nicht down
beide Schnittstellen zusammen ;-)
pi@raspberrypi:~ $ ip addr
pi@raspberrypi:~ $ sudo ip link set eth0 down
pi@raspberrypi:~ $ sudo ip link set eth0 up
pi@raspberrypi:~ $ sudo ip link set wlan0 down
pi@raspberrypi:~ $ sudo ip link set wlan0 up
Seien Sie geduldig, nachdem Sie wlan0 eingerichtet haben. Es kann einige Zeit dauern, bis ich mich wieder mit dem Router verbunden und das Bonding verwaltet habe. Diese Zeit ssh
wird nicht funktionieren.
Für eine eingehendere Überprüfung der Bindung sehen Sie sich möglicherweise das dynamische Netzwerk-Failover an, bei dem WLAN Vorrang vor Ethernet hat .
♦ Schritt 5: Aufräumen
Lösche das alte Zeug:
pi@raspberrypi:~ $ sudo apt --autoremove purge openresolv
pi@raspberrypi:~ $ sudo apt --autoremove purge ifupdown
pi@raspberrypi:~ $ sudo apt --autoremove purge dhcpcd5
pi@raspberrypi:~ $ sudo apt --autoremove purge isc-dhcp-client isc-dhcp-common
Referenzen:
[1] /usr/share/doc/systemd/README.Debian.gz
[2] man systemd.netdev
[3] man systemd.network
[4] https://wiki.debian.org/Bonding
[5] https://www.kernel.org/doc/Documentation/networking/bonding.txt
DNS=192.168.1.1
zu hinzufüge/etc/systemd/network/04-eth.network
. (Ich verwende ein Setup mit statischer IP)…Um die Antwort von @Ingo zu erläutern: Verwenden Sie bitte den Link
anstelle des Links zu
/run/systemd/resolve/resolv.conf
. Dies aktiviert den "integrierten" DNS-Stub und aktiviert Dinge wie den DNS-Server pro Schnittstelle, die wichtig sein können, wenn Sie VPNs verwenden, die ihren eigenen DNS-Server mit nicht öffentlichen Einträgen versehen.quelle