Réponses:
Testé sur un Raspberry Pi 4B avec
Raspbian Buster Lite 2020-02-05 mis à jour le 2020-02-13.
Raspbian Buster Lite 2019-07-10 mis à jour le 2019-08-15.
Mises à jour effectuées avec sudo apt update && sudo apt full-upgrade && sudo reboot
.
Cela ne fonctionnera pas avec Raspbian Stretch !
Vous trouverez ici la dernière révision testée de Raspbian Stretch Lite .
L'utilisation systemd-networkd
au lieu de la valeur par défaut dhcpcd
est bien sûr possible. Mais cela n'a pas de sens dans tous les cas.
networkd est un service petit et léger pour configurer les interfaces réseau, conçu principalement pour les cas d'utilisation de serveurs dans un monde avec des réseaux branchés à chaud et virtualisés. Sa configuration est similaire au niveau de l'esprit et de l'abstraction à ifupdown, mais vous n'avez pas besoin de packages supplémentaires pour configurer les ponts, les liaisons, le vlan, etc. Il n'est pas encore très approprié pour gérer les WLAN; NetworkManager est encore beaucoup plus approprié pour de tels cas d'utilisation de bureau. [1]
Mais pour un raspi allongé près d'un téléviseur ou d'un amplificateur et faisant son travail 24h / 24 et 7j / 7 pour diffuser de l'audio ou de la vidéo ou pour une caméra, etc., systemd-networkd
c'est un bon choix. Mais vous devez faire un changement complet. Il n'y a aucun moyen de mélanger avec networking
et / ou dhcpcd
.
Pour référence, j'utilise une nouvelle carte SD flashée de Raspbian Buster Lite 2019-07-10 .
Je ferai attention à une installation sans tête uniquement avec ssh. Si vous l'utilisez, revérifiez les fautes de frappe, sinon vous êtes perdu avec une connexion rompue. Si vous voulez une installation sans tête, regardez SSH (Secure Shell) et suivez la section 3. Activez SSH sur un Raspberry Pi sans tête (ajoutez un fichier à la carte SD sur une autre machine) .
Pour le dépannage à l'arrêt ou pour vérifier les messages des démarrages précédents, vous pouvez activer la journalisation persistante dans journald pour les messages de systemd [1]. Parce qu'il produit de gros fichiers journaux et que l'espace de stockage peut être un problème, je suggère de l'activer uniquement si nécessaire. systemd-networkd n'en a pas besoin et la journalisation de la session en cours est toujours disponible.
pi@raspberrypi: ~$ sudo mkdir -p /var/log/journal
pi@raspberrypi: ~$ sudo systemd-tmpfiles --create --prefix /var/log/journal
Désactivez les vieux trucs. N'arrêtez aucun service, désactivez-les seulement! Il ne prendra donc effet qu'au prochain démarrage.
pi@raspberrypi: ~$ sudo -Es
En /etc/resolvconf.conf
insérer ces lignes.
# Set to NO to disable resolvconf from running any subscribers. Defaults to YES.
resolvconf=NO
Ensuite, désactivez la mise en réseau Debian classique qui est gérée avec un fichier /etc/network/interfaces
et désactivez la dhcpcd
gestion de réseau Raspbian par défaut . Nous le masquons afin qu'ils soient complètement désactivés et ne puissent pas être démarrés par d'autres services.
root@raspberrypi: ~# systemctl mask networking.service
root@raspberrypi: ~# mv /etc/network/interfaces /etc/network/interfaces~
root@raspberrypi: ~# systemctl mask dhcpcd.service
Et activez 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
Créez ce fichier avec vos paramètres. Vous pouvez simplement copier et coller ceci dans un bloc sur votre ligne de commande en commençant par cat
et en incluant les deux EOF (le délimiteur EOF n'obtiendra pas une partie du fichier):
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: ~$
Redémarrez, mais seulement si vous avez un cordon Ethernet connecté ;-)
Il est possible que le RasPi obtienne une nouvelle adresse IP, vous devrez donc la consulter pour la prochaine connexion avec ssh .
Créez ce fichier avec vos paramètres:
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:~ #
Configuration wpa_supplicant avec ce fichier et vos paramètres pour ssid=
et psk=
et lui permettent:
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:~ $
Redémarrez si vous avez une connexion wifi. La plupart d'entre vous en auront. Bonne chance ...
Il est possible que le RasPi obtienne une nouvelle adresse IP, vous devrez donc la consulter pour la prochaine connexion avec ssh .
Vous devez avoir les deux interfaces configurées et exécutées comme décrit ci-dessus. Ce n'est pas un problème lorsque les deux interfaces sont actives. Le noyau utilisera d'abord l'interface avec la métrique la plus basse . Ici, l'interface Ethernet sera utilisée en premier. Mais cela a un grand inconvénient. Comme vous pouvez le voir, ~$ ip addr
chaque interface a sa propre adresse IP. Si le noyau change d'interface parce qu'une est en panne, il utilise également sa nouvelle adresse IP source. Cela interrompra toute communication TCP établie, par exemple ssh, streaming, sessions de connexion, etc. Vous pouvez utiliser une nouvelle connexion à partir de l'adresse IP source modifiée, mais les anciennes connexions sont bloquées. Ce n'est pas vraiment ce que nous voulons.
La solution de ce problème est le collage . Nous créons une interface intermédiaire bond0
qui ne modifie pas ses paramètres. L'interface filaire et wifi basculera sur bond0
.
Désactivez d'abord les fichiers réseau Ethernet et WiFi uniques:
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~
Ensuite, configurez la liaison avec ces quatre fichiers:
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:~ $
Il est maintenant temps de redémarrer.
Il est possible que le RasPi obtienne une nouvelle adresse IP, vous devrez donc la consulter pour la prochaine connexion avec ssh.
Ensuite, vous pouvez vérifier l'état de la liaison:
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 de liaison: avec le statut de liaison ci-dessus, vous verrez que la Currently Active Slave:
volonté changera et que le MII Status:
sera en baisse.
Si vous êtes sans tête, ne faites pas les down
deux interfaces ensemble ;-)
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
Soyez patient après avoir configuré wlan0. Je peux prendre un certain temps pour me reconnecter au routeur et gérer la liaison. Cette fois ssh
ne fonctionnera pas.
Pour un examen plus approfondi de la liaison, vous pouvez consulter le basculement du réseau dynamique en donnant la priorité au wifi sur Ethernet .
Purger les vieux trucs:
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
références:
[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
à /etc/systemd/network/04-eth.network
. (J'utilise une configuration avec une adresse IP statique)…
Pour élaborer la réponse de @Ingo: veuillez envisager d'utiliser le lien
ln -s /run/systemd/resolve/stub-resolv.conf resolv.conf
au lieu du lien vers /run/systemd/resolve/resolv.conf
. Cela active le stub DNS "intégré" et permet des choses comme le serveur DNS par interface qui pourraient être importantes si vous utilisez des VPN qui fournissent à leur propre serveur DNS des entrées non publiques.