Ответы:
Протестировано на Raspberry Pi 4B с
Raspbian Buster Lite 2020-02-05, обновлено 2020-02-13.
Raspbian Buster Lite 2019-07-10 обновлен 2019-08-15.
Обновления сделаны с sudo apt update && sudo apt full-upgrade && sudo reboot
.
Это не будет работать с Raspbian Stretch !
Здесь вы найдете последнюю протестированную версию Raspbian Stretch Lite .
Использование systemd-networkd
вместо значения по умолчанию, dhcpcd
конечно, возможно. Но это не имеет смысла во всех случаях.
networkd - это небольшая и компактная служба для настройки сетевых интерфейсов, разработанная главным образом для случаев использования серверов в мире с горячим подключением и виртуализированной сетью. Его конфигурация похожа по духу и уровню абстракции на ifupdown, но вам не нужны дополнительные пакеты для настройки мостов, соединений, vlan и т. Д. Он пока не очень подходит для управления WLAN; NetworkManager все еще более подходит для таких случаев использования Desktop. [1]
Но для распи, лежащего рядом с телевизором или усилителем и выполняющего свою работу 24/7 для потокового аудио или видео или для камеры и т. Д., systemd-networkd
Это хороший выбор. Но вы должны сделать полный переход. Нет способа смешаться с networking
и / или dhcpcd
.
Для справки я использую обновленную SD-карту Raspbian Buster Lite 2019-07-10 .
Я буду обращать внимание на безголовую установку только с помощью ssh. Если вы используете это, дважды проверьте опечатки или около того, иначе вы потерялись с разорванным соединением. Если вы хотите установить устройство без монитора, посмотрите на SSH (Secure Shell) и следуйте разделу 3. Включите SSH на автономном Raspberry Pi (добавьте файл на SD-карту на другом компьютере) .
Для устранения неполадок при завершении работы или для проверки сообщений от предыдущих загрузок вы можете включить постоянную регистрацию в journald для сообщений от systemd [1]. Поскольку он создает большие файлы журналов и место для хранения может быть проблемой, я предлагаю включить его только при необходимости. systemd-networkd не нуждается в этом, и регистрация текущего сеанса всегда доступна.
pi@raspberrypi: ~$ sudo mkdir -p /var/log/journal
pi@raspberrypi: ~$ sudo systemd-tmpfiles --create --prefix /var/log/journal
Отключить старые вещи. Не останавливайте никакую услугу, только отключите их! Так что это вступит в силу только при следующей загрузке.
pi@raspberrypi: ~$ sudo -Es
В /etc/resolvconf.conf
вставки этих строк.
# Set to NO to disable resolvconf from running any subscribers. Defaults to YES.
resolvconf=NO
Затем отключите классическую сеть Debian, которая управляется с помощью файла, /etc/network/interfaces
и отключите dhcpcd
управление сетью Raspbian по умолчанию . Мы маскируем его, чтобы они были полностью отключены и не могли быть запущены другими службами.
root@raspberrypi: ~# systemctl mask networking.service
root@raspberrypi: ~# mv /etc/network/interfaces /etc/network/interfaces~
root@raspberrypi: ~# systemctl mask dhcpcd.service
И включите 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
Создайте этот файл с вашими настройками. Вы можете просто скопировать и вставить это в одном блоке в вашу командную строку, начиная с cat
EOF и включая оба (разделитель EOF не получит часть файла):
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: ~$
Перезагрузите компьютер, но только если у вас есть сетевой шнур ;-)
Вполне возможно, что RasPi получит новый IP-адрес, поэтому вам, возможно, придется посмотреть его для следующего соединения с ssh .
Создайте этот файл с вашими настройками:
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 с этим файлом и ваши настройки ssid=
и psk=
и включить его:
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:~ $
Перезагрузитесь, если у вас есть подключение к Wi-Fi. Большинство из вас будет иметь. Удачи ...
Вполне возможно, что RasPi получит новый IP-адрес, поэтому вам, возможно, придется посмотреть его для следующего соединения с ssh .
Вы должны настроить и запустить оба интерфейса, как описано выше. Это не проблема, когда оба интерфейса работают. Сначала ядро будет использовать интерфейс с самой низкой метрикой . Здесь интерфейс Ethernet будет использоваться в первую очередь. Но это имеет большой недостаток. Как видите, у ~$ ip addr
каждого интерфейса есть свой IP-адрес. Если ядро переключает интерфейс из-за отказа, оно также использует свой новый IP-адрес источника. Это нарушит любую установленную TCP-связь с состоянием, например, ssh, потоковую передачу, сеансы входа в систему и так далее. Вы можете использовать новое соединение с измененного исходного IP-адреса, но старые соединения застряли. Это не совсем то, что мы хотим.
Решением этой проблемы является склеивание . Мы создаем временный интерфейс bond0
, который не меняет своих настроек. Проводной и Wi-Fi интерфейс переключится на bond0
.
Сначала отключите отдельные файлы сети Ethernet и Wi-Fi:
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~
Затем настройте связь с этими четырьмя файлами:
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:~ $
Теперь пришло время перезагрузки.
Вполне возможно, что RasPi получит новый IP-адрес, поэтому вам, возможно, придется посмотреть его для следующего соединения с ssh.
Затем вы можете проверить статус склеивания:
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
Тестовое соединение: со статусом соединения выше вы увидите, что Currently Active Slave:
будет меняться, а MII Status:
вниз -.
Если вы без головы, не используйте down
оба интерфейса вместе ;-)
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
Будьте терпеливы после установки wlan0. Мне может потребоваться некоторое время, чтобы повторно подключиться к маршрутизатору и управлять связыванием. На этот раз ssh
не сработает.
Для более глубокого обзора связывания вы можете взглянуть на динамическое переключение при сбое сети с приоритетом Wi-Fi через Ethernet .
Очистить старые вещи:
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
ссылки:
[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
. (Я использую настройку со статическим IP) ...
Чтобы уточнить ответ от @Ingo: рассмотрите возможность использования ссылки.
ln -s /run/systemd/resolve/stub-resolv.conf resolv.conf
вместо ссылки на /run/systemd/resolve/resolv.conf
. Это включает «интегрированную» заглушку DNS и включает такие вещи, как DNS-сервер для интерфейса, что может быть важно, если вы используете VPN, которые предоставляют свой DNS-сервер непубличными записями.