systemd-networkd를 디버깅하는 방법은 무엇입니까?

systemd-networkd를 디버깅하는 방법은 무엇입니까?

systemd-networkdUbuntu에서 네트워킹을 구성하는 데 사용하고 싶습니다 .

/etc/systemd/network/host0.network파일 을 추가했습니다

[Match]
Name=host0

[Network]
Address=10.5.1.1/24
Gateway=10.5.1.254

내 구성 host0:

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: host0@if14428: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether d6:fa:2e:69:dd:30 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 169.254.229.86/16 brd 169.254.255.255 scope link host0
       valid_lft forever preferred_lft forever
    inet6 fe80::d4fa:2eff:fe69:dd30/64 scope link
       valid_lft forever preferred_lft forever

그러나 위에서 볼 수 있듯이 다시 시작 , 활성화, 재부팅에도 10.5.1.1불구 하고 구성되지 않습니다 . systemd-networkd주소가 APIPA에서 나올 때마다( 마치 DHCP가 구성되지 않은 것처럼)

다른 위치에는 네트워킹이 구성되어 있지 않습니다(특히 /etc/network/interfaces비어 있는 ).

답변1

에서https://coreos.com/os/docs/latest/network-config-with-networkd.html:

수동으로 디버깅 활성화

mkdir -p /etc/systemd/system/systemd-networkd.service.d/

/etc/systemd/system/systemd-networkd.service.d/10-debug.conf다음 콘텐츠로 드롭인을 만듭니다 .

[Service]
Environment=SYSTEMD_LOG_LEVEL=debug

그리고 systemd-networkd서비스를 다시 시작하세요.

systemctl daemon-reload
systemctl restart systemd-networkd
journalctl -b -u systemd-networkd

답변2

systemd-networkd를 디버깅하는 방법은 무엇입니까?

다음을 사용하여 디버그 로깅 활성화service-log-level

활용할 수 있습니다systemctl'에스service-log-level명령:

# set current log level of systemd-networkd.service to "debug":
systemctl service-log-level systemd-networkd.service debug
# syntax:
# systemctl service-log-level SERVICE [LEVEL]
# LEVEL:
# a value in the range 0…7
# or one of the strings emerg, alert, crit, err, warning, notice, info, debug
# check current log level of systemd-networkd.service by not specifying a level:
systemctl service-log-level systemd-networkd.service

systemd-networkd.service로그 모니터링/보기

저널링systemd-networkd.service특정 로그 항목은 다음을 사용하여 모니터링할 수 있습니다.

journalctl --unit=systemd-networkd.service --follow

# or short
journalctl -u systemd-networkd -f

저널링'가 포함된 로그 항목디버그 수준의 systemd-networkd 로그networkctl renew eth0" 내 시스템에서 실행할 때 :

Sep 08 13:45:43 abdull systemd-networkd[572]: Got message type=method_call sender=:1.31 destination=org.freedesktop.network1 path=/org/freedesktop/network1 interface=org.freedesktop.network1.Manager member=RenewLink cookie=2 reply_cookie=0 signature=i error-name=n/a error-message=n/a
Sep 08 13:45:43 abdull systemd-networkd[572]: Sent message type=method_call sender=n/a destination=org.freedesktop.DBus path=/org/freedesktop/DBus interface=org.freedesktop.DBus member=GetConnectionUnixUser cookie=59 reply_cookie=0 signature=s error-name=n/a error-message=n/a
Sep 08 13:45:43 abdull systemd-networkd[572]: Got message type=method_return sender=org.freedesktop.DBus destination=:1.15 path=n/a interface=n/a member=n/a cookie=17 reply_cookie=59 signature=u error-name=n/a error-message=n/a
Sep 08 13:45:43 abdull systemd-networkd[572]: Sent message type=method_return sender=n/a destination=:1.31 path=n/a interface=n/a member=n/a cookie=60 reply_cookie=2 signature=n/a error-name=n/a error-message=n/a
Sep 08 13:45:43 abdull systemd-networkd[572]: DHCP CLIENT (0x359abcde): REQUEST (renewing)
Sep 08 13:45:43 abdull systemd-networkd[572]: DHCP CLIENT (0x359abcde): ACK
Sep 08 13:45:43 abdull systemd-networkd[572]: DHCP CLIENT (0x359abcde): lease expires in 59min 58s
Sep 08 13:45:43 abdull systemd-networkd[572]: DHCP CLIENT (0x359abcde): T2 expires in 49min 25s
Sep 08 13:45:43 abdull systemd-networkd[572]: DHCP CLIENT (0x359abcde): T1 expires in 26min 54s
Sep 08 13:45:43 abdull systemd-networkd[572]: eth0: State changed: configured -> configuring
Sep 08 13:45:43 abdull systemd-networkd[572]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/network1/link/_32 interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=61 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Sep 08 13:45:43 abdull systemd-networkd[572]: eth0: Updating address: 10.0.3.165
Sep 08 13:45:43 abdull systemd-networkd[572]: eth0: Remembering updated address: 10.0.3.165/24 (valid for 1h)
Sep 08 13:45:43 abdull systemd-networkd[572]: eth0: link_check_ready(): static routes are not configured.
Sep 08 13:45:43 abdull systemd-networkd[572]: eth0: DHCP: No routes received from DHCP server: No data available
Sep 08 13:45:43 abdull systemd-networkd[572]: eth0: Configuring route: dst: 10.0.3.1/32, src: n/a, gw: n/a, prefsrc: 10.0.3.165, scope: link, table: main, proto: dhcp, type: unicast
Sep 08 13:45:43 abdull systemd-networkd[572]: eth0: Configuring route: dst: n/a, src: n/a, gw: 10.0.3.1, prefsrc: 10.0.3.165, scope: global, table: main, proto: dhcp, type: unicast
Sep 08 13:45:43 abdull systemd-networkd[572]: eth0: link_check_ready(): dhcp4:no dhcp6_addresses:no dhcp_routes:no dhcp_pd_addresses:no dhcp_pd_routes:no ndisc_addresses:yes ndisc_routes:yes
Sep 08 13:45:43 abdull systemd-networkd[572]: eth0: State changed: configuring -> configured
Sep 08 13:45:43 abdull systemd-networkd[572]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/network1/link/_32 interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=62 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a

반면 systemd-networkd.service기본 로그 수준에서는 내 시스템에서 info실행할 때 로그 항목이 없습니다 .networkctl renew eth0

비교이것 service-log-level솔루션과드롭인해결책:

service-log-level 드롭인
요구/암시systemctl daemon-reload 아니요 ✔️ 네 ❌
systemd-networkd.service다시 시작 해야 함 아니요 ✔️ 네 ❌
구성은 이후에도 지속됩니다.systemd-networkd.service 아니 ❌ 네 ✔️
컴퓨터 재부팅 후에도 구성이 유지됨 아니 ❌ 네 ✔️
디버깅을 켜고 끄는 쉬운 원라이너 네 ✔️ 아니 ❌

참고: 체크 표시(✔️) 및 X 표시(❌) 문자는 바람직하거나 바람직하지 않은 특성을 나타냅니다(문맥에 따라 다름).

답변3

이전 답변은 무엇이 실행 중이고 무엇이 실행되지 않는지 확인하고 서비스를 다시 시작하는 데 유용합니다.

나는 (에서) 추가 할 것이다비활성화된 경우 활성화하는 방법):

systemctl enable <your.service.here>

예를 들어systemd-networkd

또한, 무엇이 일치하는지 잘 모르겠습니다 Name=host0. 2: host0@if14428아래 에 표시되기 때문에 뭔가 추측됩니다 ip addr. 하지만 인터페이스 이름이나 MAC 주소를 그대로 사용하는 것이 ip link더 안전합니다.

관련 정보