systemd 网络在启动时忽略网络配置文件

systemd 网络在启动时忽略网络配置文件

我有一个使用 Yocto 编译的嵌入式 Linux 系统,使用 systemd。我有一个网络配置文件,位于/etc/systemd/network/20-wired.network.该文件的内容是:

[Match]
Name=eth0

[Network]
Address=192.168.5.40/24
Gateway=192.168.5.1
DNS=192.168.5.1

但是,当我重新启动计算机时,eth0 接口已使用 DHCP 成功配置,而不是分配静态 IP 地址。该ip a命令显示:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.223/16 brd 10.1.255.255 scope global dynamic noprefixroute eth0
       valid_lft 85898sec preferred_lft 85898sec
    inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

但是,如果我在启动后等待 5 秒左右,然后执行systemctl restart systemd-networkd系统通常会正确配置,如下所示:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.40/24 brd 192.168.5.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

最后,通过正确的时间重新启动网络服务,我似乎甚至可以得到这个结果(既包括预期的静态地址,也包括不需要的 DHCP 地址):

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.40/24 brd 192.168.5.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.1.1.223/16 brd 10.1.255.255 scope global dynamic noprefixroute eth0
       valid_lft 86246sec preferred_lft 86246sec
    inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

有谁知道这里发生了什么或如何调试它?我的配置有明显的错误吗?

systemctl status systemd-networkd启动后立即显示以下内容(特别是在 network-online.target 之后):

* systemd-networkd.service - Network Service
     Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
     Active: activating (start) since Tue 2021-07-20 12:58:52 UTC; 65ms ago
TriggeredBy: * systemd-networkd.socket
       Docs: man:systemd-networkd.service(8)
   Main PID: 282 ((networkd))
      Tasks: 1 (limit: 3576)
     Memory: 416.0K
     CGroup: /system.slice/systemd-networkd.service
             `-282 (networkd)

几秒钟后,它看起来像这样:

* systemd-networkd.service - Network Service
     Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-07-20 12:58:52 UTC; 3min 20s ago
TriggeredBy: * systemd-networkd.socket
       Docs: man:systemd-networkd.service(8)
   Main PID: 282 (systemd-network)
     Status: "Processing requests..."
      Tasks: 1 (limit: 3576)
     Memory: 2.0M
     CGroup: /system.slice/systemd-networkd.service
             `-282 /lib/systemd/systemd-networkd

因此,当 network-online.target 服务运行时,该服务看起来仍在“激活”。但我不确定这意味着什么,或者这是否是一个问题。

答案1

我刚刚注意到 systemd-networkd 和 NetworkManager 都在运行。这不正常,对吧?通常你会想要其中之一? systemctl disable /lib/systemd/system/NetworkManager.service && reboot似乎已经解决了问题。

编辑:这不是答案,或者至少不是全部答案。即使禁用了 NetworkManager,这种情况也再次发生。

答案2

您不需要禁用网络管理器。只需将此行附加到您的配置文件中:

NM_CONTROLLED=no

希望这会有所帮助。

相关内容