답변:
2020-04-11에 업데이트 된 Raspbian Buster Lite 2020-02-13 을 사용하여 Raspberry Pi 4B에서 테스트되었습니다 .
업데이트가 완료되었습니다 sudo apt update && sudo apt full-upgrade && sudo reboot
.
Raspbian Stretch에서는 작동하지 않습니다 !
다음 은 Raspbian Stretch Lite에 대해 마지막으로 테스트 된 개정판입니다 .
systemd-networkd
기본값 대신 사용 하는 dhcpcd
것도 가능합니다. 그러나 모든 경우에 의미가있는 것은 아닙니다.
networkd는 네트워크 플러그 인을 구성하는 작고 간결한 서비스로, 대부분 핫 플러그 및 가상화 된 네트워킹 환경에서 서버 사용 사례를 위해 설계되었습니다. 구성은 정신과 추상화 수준에서 ifupdown과 유사하지만 브리지, 본드, VLAN 등을 구성하기 위해 추가 패키지가 필요하지 않습니다. 아직 WLAN 관리에 적합하지 않습니다. NetworkManager는 여전히 이러한 데스크탑 사용 사례에 훨씬 적합합니다. [1]
그러나 TV 나 앰프 근처에 누워서 오디오 나 비디오를 스트리밍하거나 카메라 등을 위해 24/7 작업을 systemd-networkd
하는 것이 좋은 선택입니다. 그러나 완전한 전환을해야합니다. networking
및 / 또는와 섞을 방법이 없습니다 dhcpcd
. 또한 네트워크 관리자는 Raspbian에서 기본적으로 지원하지 않습니다.
참고로 Raspbian Buster Lite 의 새로운 플래시 SD 카드를 사용합니다 .
ssh로만 헤드리스 설치에주의를 기울일 것입니다. 이 기능을 사용하는 경우 오타를 다시 확인하십시오. 그렇지 않으면 연결이 끊어지면 손실됩니다. 헤드리스 설치를 원할 경우 SSH (Secure Shell) 를보고 섹션 3을 따르십시오 . 헤드리스 Raspberry Pi에서 SSH 활성화 (다른 머신의 SD 카드에 파일 추가) .
오래된 것들을 비활성화하십시오. 서비스를 중지하지 말고 비활성화하십시오! 따라서 다음 부팅시에만 적용됩니다. 그것을 따르는 방법
설정으로이 파일을 작성하십시오. cat
EOF로 시작 하고 두 가지 EOF를 포함 하여 명령 행에 이것을 한 블록으로 복사하여 붙여 넣을 수 있습니다 (구분자 EOF는 파일의 일부를 얻지 못합니다).
pi@raspberrypi: ~$ sudo -Es # if not already done
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:~ # 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
설치 프로그램은이 파일에 대한 설정을 wpa_supplicant를 country=
, 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:~ $
재부팅과 행운을 빕니다 ;-)
RasPi가 새로운 IP 주소를 얻을 가능성이 있으므로 ssh 와의 다음 연결을 위해 IP 주소를 확인해야 할 수도 있습니다 .
위에서 설명한대로 인터페이스를 설정하고 실행해야합니다. 두 인터페이스가 모두 작동해도 문제가 없습니다. 커널은 가장 낮은 메트릭을 가진 인터페이스를 먼저 사용합니다. 여기서는 이더넷 인터페이스가 먼저 사용됩니다. 그러나 이것은 큰 단점이 있습니다. ip -4 -brief addr
각 인터페이스에서 볼 수 있듯이 자체 IP 주소가 있습니다. 커널이 다운되어 인터페이스를 전환하면 새로운 소스 ip-address도 사용합니다. 이것은 ssh, 스트리밍, 로그인 세션 등과 같이 확립 된 상태 전체 TCP 통신을 중단시킵니다. 변경된 소스 IP 주소에서 새 연결을 사용할 수 있지만 이전 연결은 고정되어 있습니다. 그것은 실제로 우리가 원하는 것이 아닙니다.
이 문제의 해결책은 결합 입니다. bond0
설정을 변경하지 않는 임시 인터페이스 를 만듭니다 . 유선 및 Wi-Fi 인터페이스가로 전환됩니다 bond0
.
먼저 단일 이더넷 및 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~
그런 다음이 네 가지 파일로 본딩을 설정하십시오.
root@raspberrypi:~ # cat >/etc/systemd/network/02-bond0.netdev <<EOF
[NetDev]
# status: cat /proc/net/bonding/bond0
Name=bond
Kind=bond
[Bond]
Mode=active-backup
# primary slave is defined in *eth.network
MIIMonitorSec=500ms
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
그러나 이것은 전체 이야기가 아닙니다. systemd-networkd 는 서비스에 따라 시작을 진행하기 전에 모든 인터페이스가 작동 하는지 확인 합니다. 본딩을 사용하면 슬레이브 인터페이스 (eth0, wlan0)가있어 작동한다는 신호를 보내지 않습니다. 하나 이상의 슬레이브가 연결되어 있으면 연결 인터페이스 만 나타납니다. 따라서 오류가 발생하고 부팅 대기 시간이 길어지면 검사가 실패합니다. 이를 관리하려면을 수정해야합니다 systemd-networkd-wait-online.service
. 방법은 다음의 지침을 따르십시오
완료되면 다시 부팅해야합니다.
RasPi가 새로운 IP 주소를 얻었을 수 있으므로 ssh와의 다음 연결을 위해 IP 주소를 확인해야 할 수도 있습니다.
그런 다음 접합 상태를 확인할 수 있습니다.
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): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: dc:a6:32:4c:08:1b
Slave queue ID: 0
Slave Interface: wlan0
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: dc:a6:32:4c:08:1c
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의 우선 순위를 정할 수 있습니다 .
참고 문헌 :
[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 서버와 같은 기능을 사용할 수 있습니다. 이는 DNS 서버에 비공개 항목을 제공하는 VPN을 사용하는 경우 중요 할 수 있습니다.