丢失了 systemd-networkd 的网络接口。发生了什么?

丢失了 systemd-networkd 的网络接口。发生了什么?

我有一个带有 4 个以太网端口的 systemd 主机。

一个端口是为隔离容器保留的。它设置为:

# /etc/systemd/network/20-eth3-reserved.network
[Match]
Name=eth3
[Link]
Unmanaged=yes

我还为端口设置了别名,每个端口都在其链接文件上,例如

# /etc/systemd/network/12-alias-eth3.link
[Match]
MACAddress=42:42:42:42:42:03
[Link]
Name=eth3

我稍后会在 systemd-nspawn 容器中使用非托管接口

# /etc/systemd/nspawn/container1.nspawn
...
[Network]
Private=yes
VirtualEthernet=no
Interface=eth3

在某个时候(9 月),它运行良好。但几个月前,带有非托管设置的界面突然从系统中消失了。

nspawn 无法启动容器,提示未找到接口。

ip link没有显示 eth3,也没有显示 mac 地址。

lshw奇怪的是显示了所有管理端口,但是没有列出serial已禁用端口的 macaddress(字段)。

dmesg显示所有端口,并列出所有端口的正确 mac 地址,包括已禁用的端口。稍后,它还会显示正在应用的别名!

[Wed Nov 10 11:44:31 2021] igb 0000:03:00.3 eth3: renamed from enps0f4

因此,即使问题开始后,systemd 仍能正常看到该设备。

networkclt显示所有管理端口以及lounmanaged但没有 eth3 的迹象。

如果有更好的方法来“保留”一个物理接口用于 nspawn,而不是Unmanaged=yes

答案1

如果这不是 systemd 现状的一个悲哀亮点,那么这一切都太可笑了。

VM 没有启动,或者它已启动而我试图重新启动它?无论哪种情况均未machinectl list显示容器启动。

我发现内核看到的接口消失的唯一原因是它被移动到另一个命名空间,并且只有当 nspawn 将接口分配给正在运行的容器时才会发生这种情况。

但是没有启动容器,也没有办法调试/调查发生了什么,或者强制发布。

遗憾的是,networkctl它对命名空间和 cgroup 的了解甚至比传统系统还要少ps。如果接口连接到某个地方,那么它就等于消失了。

最后我不知道发生了什么,但系统更新和重启暂时解决了这个问题。

相关内容