32

I would like to use systemd-networkd to configure my networking on Ubuntu.

I added an /etc/systemd/network/host0.network file

[Match]
Name=host0

[Network] Address=10.5.1.1/24 Gateway=10.5.1.254

to configure my 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

But, as seen above it is not configured with 10.5.1.1 despite restarting systemd-networkd, enabling it, rebooting. Each time the address is from APIPA (as if there was no DHCP, which is not configured there).

In no other places is networking configured (notably in /etc/network/interfaces, which is empty)

WoJ
  • 3,875

3 Answers3

54

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

Enable debugging manually

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

Create Drop-In /etc/systemd/system/systemd-networkd.service.d/10-debug.conf with following content:

[Service]
Environment=SYSTEMD_LOG_LEVEL=debug

And restart systemd-networkd service:

systemctl daemon-reload
systemctl restart systemd-networkd
journalctl -b -u systemd-networkd
Anon
  • 1,431
9

How to debug systemd-networkd?

activate debug logging using service-log-level

You can leverage systemctl's service-log-level command:

# 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

monitor/see systemd-networkd.service logs

journald's systemd-networkd.service-specific log entries can then be monitored with:

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

or short

journalctl -u systemd-networkd -f

Example journald log entries with "systemd-networkd log on debug level" when executing networkctl renew eth0 on my system:

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

Whereas when systemd-networkd.service is on the default info log level, there are no log entries when when executing networkctl renew eth0 on my system.

Comparison between this service-log-level solution and the drop-in solution:

service-log-level drop-in
requires/implies systemctl daemon-reload no ✔️ yes ❌
requires systemd-networkd.service restart no ✔️ yes ❌
configuration persists after systemd-networkd.service no ❌ yes ✔️
configuration persists after computer reboot no ❌ yes ✔️
easy oneliner for turning debugging on and off yes ✔️ no ❌

Note: checkmark (✔️) and chrossmark (❌) characters indicate desirable or undesirable trait (depending on context).

Abdull
  • 2,432
0

The previous answers are great to find out what is running and what isn't, and restarting the service.

I'd add (from How to enable if it's disabled):

systemctl enable <your.service.here>

e.g. systemd-networkd

Also, I'm not sure what Name=host0 matches. I guess something, since it shows up in 2: host0@if14428 under ip addr. But using and interface name, or MAC address, as it appears in ip link is a safer bet.

robinCTS
  • 4,407