Risposte:
Testato su un Raspberry Pi 4B con
Raspbian Buster Lite 2020-02-05 aggiornato il 2020-02-13.
Raspbian Buster Lite 2019-07-10 aggiornato il 15-08-2019.
Aggiornamenti effettuati con sudo apt update && sudo apt full-upgrade && sudo reboot
.
Non funzionerà con Raspbian Stretch !
Qui troverai l' ultima revisione testata per Raspbian Stretch Lite .
L'utilizzo al systemd-networkd
posto del default dhcpcd
è ovviamente possibile. Ma non è significativo in tutti i casi.
networkd è un servizio piccolo e snello per configurare le interfacce di rete, progettato principalmente per i casi d'uso dei server in un mondo con reti hotplugged e virtualizzate. La sua configurazione è simile nello spirito e nel livello di astrazione di ifupdown, ma non sono necessari pacchetti aggiuntivi per configurare bridge, bond, vlan ecc. Non è ancora molto adatto per la gestione delle WLAN; NetworkManager è ancora molto più appropriato per tali casi d'uso del desktop. [1]
Ma per un raspi che si trova vicino a una TV o un amplificatore e fa il suo lavoro 24 ore su 24, 7 giorni su 7 per lo streaming di audio o video o per una fotocamera, ecc., systemd-networkd
È una buona scelta. Ma devi fare un passaggio completo. Non c'è modo di mescolare con networking
e / o dhcpcd
.
Per riferimento uso una nuova SD card flashizzata di Raspbian Buster Lite 2019-07-10 .
Avrò attenzione ad un'installazione senza testa solo con ssh. Se lo stai usando, ricontrolla gli errori di battitura o così altrimenti ti perdi con una connessione interrotta. Se si desidera un'installazione senza testa, guardare SSH (Secure Shell) e seguire la sezione 3. Abilitare SSH su un Raspberry Pi senza testa (aggiungere il file alla scheda SD su un altro computer) .
Per la risoluzione dei problemi relativi allo spegnimento o per controllare i messaggi dagli stivali precedenti, è possibile abilitare la registrazione permanente in journald per i messaggi da systemd [1]. Poiché produce file di registro di grandi dimensioni e il luogo di archiviazione potrebbe essere un problema, suggerisco di abilitarlo solo se necessario. systemd-networkd non ne ha bisogno e la registrazione della sessione corrente è sempre disponibile.
pi@raspberrypi: ~$ sudo mkdir -p /var/log/journal
pi@raspberrypi: ~$ sudo systemd-tmpfiles --create --prefix /var/log/journal
Disabilita le cose vecchie. Non interrompere alcun servizio, disabilitalo solo! Quindi avrà effetto solo al prossimo avvio.
pi@raspberrypi: ~$ sudo -Es
In /etc/resolvconf.conf
inserto queste linee.
# Set to NO to disable resolvconf from running any subscribers. Defaults to YES.
resolvconf=NO
Quindi disabilita la classica rete Debian gestita con file /etc/network/interfaces
e disabilita la dhcpcd
gestione della rete Raspbian predefinita . Lo mascheriamo in modo che siano completamente disabilitati e non possano essere avviati da altri servizi.
root@raspberrypi: ~# systemctl mask networking.service
root@raspberrypi: ~# mv /etc/network/interfaces /etc/network/interfaces~
root@raspberrypi: ~# systemctl mask dhcpcd.service
E abilita 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
Crea questo file con le tue impostazioni. Puoi semplicemente copiarlo e incollarlo in un blocco nella riga di comando a partire da cat
e includendo entrambi EOF (il delimitatore EOF non otterrà parte del file):
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: ~$
Riavvia, ma solo se hai un cavo Ethernet collegato ;-)
È possibile che RasPi ottenga un nuovo indirizzo IP, quindi potrebbe essere necessario cercarlo per la prossima connessione con ssh .
Crea questo file con le tue impostazioni:
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:~ #
Wpa_supplicant installazione con questo file e le impostazioni per la ssid=
ed psk=
e consentire:
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 wpa_supplicant@wlan0.service
root@raspberrypi:~ # rfkill unblock 0
root@raspberrypi:~ # exit
root@raspberrypi:~ $
Riavvia se hai una connessione wifi. Molti di voi avranno. In bocca al lupo ...
È possibile che RasPi ottenga un nuovo indirizzo IP, quindi potrebbe essere necessario cercarlo per la prossima connessione con ssh .
Dovresti avere entrambe le interfacce configurate e funzionanti come descritto sopra. Non è un problema quando entrambe le interfacce sono attive. Il kernel utilizzerà prima l'interfaccia con la metrica più bassa . Qui verrà utilizzata per prima l'interfaccia Ethernet. Ma questo ha un grande svantaggio. Come puoi vedere con ~$ ip addr
ogni interfaccia ha il suo indirizzo IP. Se il kernel cambia l'interfaccia perché non funziona, usa anche il suo nuovo indirizzo IP sorgente. Ciò interromperà qualsiasi comunicazione TCP statefull stabilita, ad esempio ssh, streaming, sessioni di accesso e così via. È possibile utilizzare una nuova connessione dall'indirizzo IP di origine modificato ma le vecchie connessioni sono bloccate. Non è proprio quello che vogliamo.
La soluzione di questo problema è il legame . Creiamo un'interfaccia provvisoria bond0
che non cambia le sue impostazioni. L'interfaccia cablata e wifi passerà a bond0
.
Innanzitutto disabilita i singoli file di rete ethernet e wifi:
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~
Quindi impostare il collegamento con questi quattro file:
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:~ $
Ora è il momento di riavviare.
È possibile che RasPi ottenga un nuovo indirizzo IP, quindi potrebbe essere necessario cercarlo per la prossima connessione con ssh.
Quindi è possibile verificare lo stato del legame:
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
Test bonding: con lo stato di bonding sopra vedrai che Currently Active Slave:
cambierà e MII Status:
sarà giù.
Se sei senza testa, non down
entrambe le interfacce insieme ;-)
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
Sii paziente dopo aver impostato wlan0. Potrei impiegare del tempo per riconnettermi al router e gestire il collegamento. Questa volta ssh
non funzionerà.
Per una revisione più approfondita del collegamento, è possibile dare un'occhiata al failover dinamico della rete dando la priorità al wifi tramite Ethernet .
Elimina le vecchie cose:
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
riferimenti:
[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
a /etc/systemd/network/04-eth.network
. (Sto usando una configurazione con IP statico) ...
Per elaborare la risposta di @Ingo: considera l'utilizzo del link
ln -s /run/systemd/resolve/stub-resolv.conf resolv.conf
invece del collegamento a /run/systemd/resolve/resolv.conf
. Ciò abilita lo stub DNS "integrato" e abilita cose come il server DNS per interfaccia che potrebbe essere importante se si utilizzano VPN che forniscono al proprio server DNS voci non pubbliche.