Respuestas:
Probado en un Raspberry Pi 4B con
Raspbian Buster Lite 2020-02-05 actualizado en 2020-02-13.
Raspbian Buster Lite 2019-07-10 actualizado el 2019-08-15.
Actualizaciones realizadas con sudo apt update && sudo apt full-upgrade && sudo reboot
.
¡No funcionará con Raspbian Stretch !
Aquí encontrará la última revisión probada para Raspbian Stretch Lite .
Por supuesto, es posible usarlo en systemd-networkd
lugar del predeterminado dhcpcd
. Pero no es significativo en todos los casos.
networkd es un servicio pequeño y delgado para configurar interfaces de red, diseñado principalmente para casos de uso de servidores en un mundo con redes conectadas en caliente y virtualizadas. Su configuración es similar en nivel de espíritu y abstracción a ifupdown, pero no necesita ningún paquete adicional para configurar puentes, enlaces, vlan, etc. Todavía no es muy adecuado para administrar redes WLAN; NetworkManager es aún mucho más apropiado para tales casos de uso de escritorio. [1]
Pero para un raspi cerca de un televisor o amplificador y hacer su trabajo 24/7 para transmitir audio o video o para una cámara, etc., systemd-networkd
es una buena opción. Pero tienes que hacer un cambio completo. No hay forma de mezclarse con networking
y / o dhcpcd
.
Como referencia, uso una tarjeta SD actualizada de Raspbian Buster Lite 2019-07-10 .
Prestaré atención a una instalación sin cabeza solo con ssh. Si está utilizando esto, revise los errores tipográficos o de lo contrario se perderá con una conexión interrumpida. Si desea una instalación sin cabeza, mire SSH (Secure Shell) y siga la sección 3. Habilite SSH en una Raspberry Pi sin cabeza (agregue el archivo a la tarjeta SD en otra máquina) .
Para solucionar problemas de apagado o para verificar los mensajes de las botas anteriores, puede habilitar el registro persistente en journald para los mensajes de systemd [1]. Debido a que produce grandes archivos de registro y el lugar de almacenamiento puede ser un problema, sugiero habilitarlo solo si es necesario. systemd-networkd no lo necesita y el registro de la sesión actual siempre está disponible.
pi@raspberrypi: ~$ sudo mkdir -p /var/log/journal
pi@raspberrypi: ~$ sudo systemd-tmpfiles --create --prefix /var/log/journal
Desactiva las cosas viejas. ¡No detengas ningún servicio, solo deshabilítalos! Por lo tanto, solo tendrá efecto en el próximo arranque.
pi@raspberrypi: ~$ sudo -Es
En /etc/resolvconf.conf
insertar estas líneas.
# Set to NO to disable resolvconf from running any subscribers. Defaults to YES.
resolvconf=NO
Luego deshabilite la red clásica de Debian que se administra con un archivo /etc/network/interfaces
y deshabilite la dhcpcd
administración de red predeterminada de Raspbian . Lo ocultamos para que estén completamente deshabilitados y otros servicios no puedan iniciarlo.
root@raspberrypi: ~# systemctl mask networking.service
root@raspberrypi: ~# mv /etc/network/interfaces /etc/network/interfaces~
root@raspberrypi: ~# systemctl mask dhcpcd.service
Y habilite 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 este archivo con tu configuración. Simplemente puede copiar y pegar esto en un bloque a su línea de comando comenzando con cat
e incluyendo ambos EOF (el delimitador EOF no obtendrá parte del archivo):
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: ~$
Reinicie, pero solo si tiene un cable de ethernet conectado ;-)
Es posible que RasPi obtenga una nueva dirección IP, por lo que es posible que tenga que buscarla para la próxima conexión con ssh .
Cree este archivo con su configuración:
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 de instalación con este archivo y su configuración para ssid=
y psk=
y le permiten:
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:~ $
Reinicia si tienes una conexión wifi. La mayoría de ustedes lo tendrá. Buena suerte ...
Es posible que RasPi obtenga una nueva dirección IP, por lo que es posible que tenga que buscarla para la próxima conexión con ssh .
Debe tener ambas interfaces configuradas y en ejecución como se describe anteriormente. No hay problema cuando ambas interfaces están activas. El núcleo usará la interfaz con la métrica más baja primero. Aquí la interfaz de ethernet se usará primero. Pero esto tiene una gran desventaja. Como puede ver con ~$ ip addr
cada interfaz tiene su propia dirección IP. Si el kernel cambia la interfaz porque uno se ha caído, también usa su nueva dirección IP de origen. Esto interrumpirá cualquier comunicación TCP con estado establecida, por ejemplo, ssh, transmisión, sesiones de inicio de sesión, etc. Puede usar una nueva conexión desde la dirección IP de origen modificada pero las conexiones antiguas están atascadas. Eso no es realmente lo que queremos.
La solución de este problema es la vinculación . Creamos una interfaz provisional bond0
que no cambia su configuración. La interfaz cableada y wifi cambiará a bond0
.
Primero deshabilite los archivos de red única ethernet y 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~
Luego configure la vinculación con estos cuatro archivos:
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:~ $
Ahora es el momento de reiniciar.
Es posible que RasPi obtenga una nueva dirección IP, por lo que es posible que tenga que buscarla para la próxima conexión con ssh.
Luego puede verificar el estado de la vinculación:
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
Prueba de vinculación: con el estado de vinculación anterior, verá que Currently Active Slave:
cambiará y que MII Status:
está inactivo.
Si no tiene cabeza, no las down
dos interfaces juntas ;-)
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
Sea paciente después de configurar wlan0. Puede que me tome un tiempo volver a conectarme al enrutador y administrar la vinculación. Esta vez ssh
no funcionará.
Para una revisión más profunda de la vinculación, puede echar un vistazo a la conmutación por error de red dinámica priorizar wifi sobre ethernet .
Purga las cosas viejas:
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
referencias:
[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
. (Estoy usando una configuración con IP estática) ...
Para elaborar la respuesta de @Ingo: considere usar el enlace
ln -s /run/systemd/resolve/stub-resolv.conf resolv.conf
en lugar del enlace a /run/systemd/resolve/resolv.conf
. Esto habilita el código auxiliar de DNS "integrado" y habilita cosas como el servidor DNS por interfaz que podría ser importante si usa VPN que proporcionan a su propio servidor DNS entradas no públicas.