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

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

假设我使用ip 链接(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

然后,我用ip-netns(8)创建网络命名空间,test-netns并使用ip 链接(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

该接口不再有 IP 地址。同样的事情也会发生在vlan接口上,这大概就是为什么有关路由和网络命名空间集成的 WireGuard 教程要求您分配wireguard设备分配 IP 地址更改其网络名称空间。

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

相关内容