Câu trả lời:
Đã thử nghiệm trên Raspberry Pi 4B với
Raspbian Buster Lite 2020 / 02-05 được cập nhật vào ngày 2020/02/13.
Raspbian Buster Lite 2019-07-10 được cập nhật vào 2019-08-15.
Cập nhật được thực hiện với sudo apt update && sudo apt full-upgrade && sudo reboot
.
Nó sẽ không hoạt động với Raspbian Stretch !
Ở đây bạn sẽ tìm thấy bản sửa đổi được thử nghiệm cuối cùng cho Raspbian Stretch Lite .
Sử dụng systemd-networkd
thay vì mặc định dhcpcd
là tất nhiên có thể. Nhưng nó không có ý nghĩa trong mọi trường hợp.
networkd là một dịch vụ nhỏ và gọn để cấu hình các giao diện mạng, được thiết kế chủ yếu cho các trường hợp sử dụng máy chủ trong một thế giới với mạng được cắm và ảo hóa. Cấu hình của nó tương tự về mức độ tinh thần và mức độ trừu tượng so với ifupdown, nhưng bạn không cần bất kỳ gói bổ sung nào để định cấu hình cầu, trái phiếu, vlan, v.v. Nó không phù hợp lắm để quản lý mạng WLAN; NetworkManager vẫn thích hợp hơn nhiều cho các trường hợp sử dụng Desktop như vậy. [1]
Nhưng đối với một raspi đặt gần TV hoặc bộ khuếch đại và thực hiện công việc 24/7 để phát trực tiếp âm thanh hoặc video hoặc cho máy ảnh, v.v., systemd-networkd
là một lựa chọn tốt. Nhưng bạn phải làm một chuyển đổi hoàn chỉnh. Không có cách nào để trộn lẫn với networking
và / hoặc dhcpcd
.
Để tham khảo, tôi sử dụng Thẻ SD mới được flash từ Raspbian Buster Lite 2019-07-10 .
Tôi sẽ chú ý đến một cài đặt không đầu chỉ với ssh. Nếu bạn đang sử dụng điều này, hãy kiểm tra lại lỗi chính tả hoặc nếu không bạn sẽ bị mất kết nối bị hỏng. Nếu bạn muốn cài đặt không đầu thì hãy xem SSH (Secure Shell) và làm theo phần 3. Kích hoạt SSH trên Raspberry Pi không đầu (thêm tệp vào thẻ SD trên máy khác) .
Để khắc phục sự cố khi tắt máy hoặc để kiểm tra tin nhắn từ các lần khởi động trước, bạn có thể cho phép đăng nhập liên tục vào tạp chí cho các tin nhắn từ systemd [1]. Bởi vì nó tạo ra các tệp nhật ký lớn và nơi lưu trữ có thể là một vấn đề tôi đề nghị chỉ kích hoạt nó nếu cần. systemd-networkd không cần nó và đăng nhập phiên hiện tại luôn có sẵn.
pi@raspberrypi: ~$ sudo mkdir -p /var/log/journal
pi@raspberrypi: ~$ sudo systemd-tmpfiles --create --prefix /var/log/journal
Vô hiệu hóa những thứ cũ. Đừng dừng bất kỳ dịch vụ nào, chỉ vô hiệu hóa chúng! Vì vậy, nó sẽ chỉ có hiệu lực trong lần khởi động tiếp theo.
pi@raspberrypi: ~$ sudo -Es
Trong /etc/resolvconf.conf
chèn những dòng này.
# Set to NO to disable resolvconf from running any subscribers. Defaults to YES.
resolvconf=NO
Sau đó vô hiệu hóa mạng Debian cổ điển được quản lý bằng tệp /etc/network/interfaces
và tắt dhcpcd
quản lý mạng Raspbian mặc định . Chúng tôi che giấu nó để chúng bị vô hiệu hóa hoàn toàn và không thể được bắt đầu bởi các dịch vụ khác.
root@raspberrypi: ~# systemctl mask networking.service
root@raspberrypi: ~# mv /etc/network/interfaces /etc/network/interfaces~
root@raspberrypi: ~# systemctl mask dhcpcd.service
Và kích hoạt 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
Tạo tập tin này với các cài đặt của bạn. Bạn chỉ có thể sao chép và dán khối này trong một khối vào dòng lệnh của bạn bắt đầu bằng cat
và bao gồm cả EOF (dấu phân cách EOF sẽ không nhận được một phần của tệp):
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: ~$
Khởi động lại, nhưng chỉ khi bạn có dây ethernet kèm theo ;-)
Có thể là RasPi có một địa chỉ IP mới để bạn có thể phải xem nó cho kết nối tiếp theo với ssh .
Tạo tập tin này với các cài đặt của bạ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:~ #
Thiết lập wpa_supplicant với tập tin này và cài đặt cho ssid=
và psk=
và kích hoạt nó:
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:~ $
Khởi động lại nếu bạn có kết nối wifi. Hầu hết các bạn sẽ có. Chúc may mắn ...
Có thể là RasPi có một địa chỉ IP mới để bạn có thể phải xem nó cho kết nối tiếp theo với ssh .
Bạn nên thiết lập cả hai giao diện và chạy như mô tả ở trên. Không có vấn đề gì khi cả hai giao diện đều hoạt động. Nhân sẽ sử dụng giao diện với số liệu thấp nhất trước tiên. Ở đây giao diện ethernet sẽ được sử dụng đầu tiên. Nhưng điều này có một bất lợi lớn. Như bạn có thể thấy với ~$ ip addr
mỗi giao diện có địa chỉ IP riêng. Nếu kernel chuyển giao diện vì nó bị hỏng thì nó cũng sử dụng địa chỉ IP nguồn mới của nó. Điều này sẽ phá vỡ mọi giao tiếp TCP được thiết lập đầy đủ, ví dụ như ssh, phát trực tuyến, phiên đăng nhập, v.v. Bạn có thể sử dụng một kết nối mới từ địa chỉ IP nguồn đã thay đổi nhưng các kết nối cũ bị kẹt. Đó không thực sự là những gì chúng ta muốn.
Giải pháp của vấn đề này là liên kết . Chúng tôi tạo một giao diện tạm thời bond0
không thay đổi cài đặt của nó. Giao diện có dây và wifi sẽ chuyển sang bond0
.
Đầu tiên vô hiệu hóa các tập tin mạng ethernet và 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~
Sau đó thiết lập liên kết với bốn tệp này:
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:~ $
Bây giờ là lúc để khởi động lại.
Có thể RasPi có một địa chỉ IP mới để bạn có thể phải xem nó để biết kết nối tiếp theo với ssh.
Sau đó, bạn có thể kiểm tra trạng thái liên kết:
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
Kiểm tra liên kết: với trạng thái liên kết ở trên, bạn sẽ thấy rằng Currently Active Slave:
sẽ thay đổi và MII Status:
xuống.
Nếu bạn không đầu, đừng down
cả hai giao diện với nhau ;-)
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
Hãy kiên nhẫn sau khi cài đặt wlan0 lên. Tôi có thể mất một thời gian để kết nối lại với bộ định tuyến và quản lý liên kết. Lần này ssh
sẽ không hoạt động.
Để đánh giá sâu hơn về liên kết, bạn có thể xem qua chuyển đổi dự phòng mạng động ưu tiên wifi qua ethernet .
Dọn dẹp những thứ cũ:
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
tài liệu tham khảo:
[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/boinating.txt
DNS=192.168.1.1
vào /etc/systemd/network/04-eth.network
. (Tôi đang sử dụng một thiết lập với IP tĩnh),
Để giải thích câu trả lời từ @Ingo: vui lòng xem xét sử dụng liên kết
ln -s /run/systemd/resolve/stub-resolv.conf resolv.conf
thay vì liên kết đến /run/systemd/resolve/resolv.conf
. Điều này cho phép sơ khai DNS "tích hợp" và cho phép những thứ như máy chủ DNS trên mỗi giao diện có thể quan trọng nếu bạn sử dụng VPN cung cấp máy chủ DNS của riêng họ với các mục không công khai.