为什么网络接口在移动到不同的网络命名空间时会丢失其 IP 地址?

sjy*_*sjy 6 iproute network-namespaces

假设我使用ip-link(8)创建一个接口 ,test-macvlan并为其分配地址10.11.12.13

# ip link add link eno1 name test-macvlan type macvlan
# ip address add 10.11.12.13 dev test-macvlan
# ip address show test-macvlan
10: test-macvlan@eno1: <BROADCAST,MULTICAST> mtu 1500 ...
    link/ether d2:f7:32:3f:c9:4a brd ff:ff:ff:ff:ff:ff
    inet 10.11.12.13/32 scope global test-macvlan
Run Code Online (Sandbox Code Playgroud)

然后,我使用ip-netns(8)创建网络命名空间,test-netns并使用ip-link(8)将接口分配test-macvlan给新命名空间:

# ip netns add test-netns
# ip link set test-macvlan netns test-netns
# ip netns exec test-netns ip address show test-macvlan
10: test-macvlan@if2: <BROADCAST,MULTICAST> mtu 1500 ...
    link/ether d2:f7:32:3f:c9:4a brd ff:ff:ff:ff:ff:ff link-netns root
Run Code Online (Sandbox Code Playgroud)

该接口不再有 IP 地址。接口也会发生同样的情况vlan,这可能就是为什么WireGuard 路由和网络命名空间集成教程要求您在更改设备的网络命名空间为其分配wireguardIP 地址的原因。

为什么会出现这种情况?这意味着systemd-networkd 需要新的代码来支持在网络命名空间中创建虚拟网络设备。如果网络接口的配置可以跨网络命名空间移植,那么通过避免容器运行自己的网络管理器的需要,这不是可以简化事情吗?