동적 장애 조치로 네트워킹에서 시스템 네트워크로 마이그레이션하는 방법


14

Systemd의이 systemd-networkdRaspbian의 기존 네트워크 시스템을 대체 할 수 있습니다.

이더넷과 무선 랜을위한 두 개의 인터페이스가있는 Raspberry Pi에서 Raspbian과 어떻게 작동합니까? 또한 동적 장애 조치를 실현할 수 있습니까?

답변:


28


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에서 기본적으로 지원하지 않습니다.


♦ 1 단계 : 준비

참고로 Raspbian Buster Lite 의 새로운 플래시 SD 카드를 사용합니다 .

ssh로만 헤드리스 설치에주의를 기울일 것입니다. 이 기능을 사용하는 경우 오타를 다시 확인하십시오. 그렇지 않으면 연결이 끊어지면 손실됩니다. 헤드리스 설치를 원할 경우 SSH (Secure Shell) 를보고 섹션 3을 따르십시오 . 헤드리스 Raspberry Pi에서 SSH 활성화 (다른 머신의 SD 카드에 파일 추가) .

오래된 것들을 비활성화하십시오. 서비스를 중지하지 말고 비활성화하십시오! 따라서 다음 부팅시에만 적용됩니다. 그것을 따르는 방법


♦ 2 단계 : 유선 이더넷 인터페이스 (eth0) 설정

설정으로이 파일을 작성하십시오. catEOF로 시작 하고 두 가지 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

♦ 3 단계 : WLAN 인터페이스 설정 (wlan0)

설정으로이 파일을 작성하십시오.

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 주소를 확인해야 할 수도 있습니다 .


♦ 4 단계 : 장애 조치를위한 유선 및 Wi-Fi 인터페이스 본딩

위에서 설명한대로 인터페이스를 설정하고 실행해야합니다. 두 인터페이스가 모두 작동해도 문제가 없습니다. 커널은 가장 낮은 메트릭을 가진 인터페이스를 먼저 사용합니다. 여기서는 이더넷 인터페이스가 먼저 사용됩니다. 그러나 이것은 큰 단점이 있습니다. 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


첫 번째 인용 상단과 관련하여 Raspbian은 NetworkManager를 사용한 적이 없습니다. Fedora와 파생 시스템 (Redhat이 지원하는 프로젝트 인 systemd가 최초로 배포 된 곳)의 인공물입니다.
goldilocks

ARM에서 반드시 실행되는 것은 아닌 다른 데비안 기반 시스템에도 적용 할 수 있습니다. 간결한 설명에 감사드립니다.
TCB13 2016 년

이것은 내 확장에 효과가 있었지만 버스터에서 문제가 발생하여 장치가 도메인을 해결할 수 없다는 문제가 발생했습니다. 어떤 아이디어가 원인이 될 수 있습니까?
user5950

@ user5950 버스터와 함께 변경된 것이 있습니까? 나는 그것을 볼 것이다. 잠시만 기다려주세요.
Ingo

@Ingo 빠른 재생 감사합니다. 에 줄 DNS=192.168.1.1을 추가하여 문제를 해결할 수 /etc/systemd/network/04-eth.network있습니다. (나는 고정 IP로 설정을 사용하고 있습니다)…
user5950

4

@Ingo의 답변을 자세히 설명하려면 링크 사용을 고려하십시오.

ln -s /run/systemd/resolve/stub-resolv.conf resolv.conf

에 대한 링크 대신 /run/systemd/resolve/resolv.conf. 이렇게하면 "통합 된"DNS 스텁이 가능하고 인터페이스마다 DNS 서버와 같은 기능을 사용할 수 있습니다. 이는 DNS 서버에 비공개 항목을 제공하는 VPN을 사용하는 경우 중요 할 수 있습니다.


매우 흥미로운 의견에 감사드립니다. 이것에 대한 문서 및 / 또는 출처가 있습니까? 그렇다면 답변을 수정하고 (아래의 링크를 사용하여) 거기에 추가하십시오.
Ingo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.