位于其自己的 netns 命名空间中的辅助 IP

位于其自己的 netns 命名空间中的辅助 IP

有没有办法可以将辅助 IP 移到其自己的命名空间中,同时将主 IP 保留在原始设备上?

如果我的设备上有 10.0.0.1 和 10.0.0.2eth0但我希望 10.0.0.2 位于其自己的网络中test,我最接近的做法是添加一个韦特对和一座桥,并移动eth0桥接器的主要 IP:

  netns: test              netns: default
==============     ===============================
vethB:10.0.0.2 <-> vethA <-> br0:10.0.0.1 <-> eth0

不幸的是,将 10.0.0.1 IP 移出eth0会让一些不透明的旧版应用程序感到困惑,所以我宁愿保留它eth0

答案1

Linuxmacvlan设备在这里是一个可行的解决方案。

它实例化一个第 2 层子接口,该子接口是善意逻辑设备,与eth0:1管理辅助 IP 的管理虚构不同,我可能会将其移入网络命名空间和地址。例如:

#  netns: test        netns: default
# ==============     ================
# test0:10.0.0.2 <->  eth0:10.0.0.1

# Create "test" network namespace
ip netns add test
ip netns exec test ip link set lo up

# Create subinterface and move to "test"
ip link add link eth0 name test0 type macvlan
ip link set test0 netns test

# Configure the subinterface
ip netns exec test ip addr add 10.0.0.2/24 brd + dev test0

这样可以保留“主”IP,eth0从而使现有系统或多或少不知道我隐藏的“辅助”IP。

wifi 接口附录

用户點數指出,macvlan如果eth0无线上网接口。相反,使用接口类型ipvlan mode 12

答案2

给定设备只能位于一个命名空间中,请参阅https://lwn.net/Articles/580893/

除了环回设备之外,每个网络设备(物理或虚拟接口、网桥等)只能存在于单个网络命名空间中。

所以你eth0只能在一个中。你的设置,有两个虚拟接口和一个桥接器,是这个问题的解决方案。我不明白如果 IP 绑定到br0而不是eth0,它会对应用程序产生什么变化,它们应该看不到差异。否则,你需要提供更多详细信息。你真的遇到问题了吗?如果是,是哪些问题,或者你只是期待它们?

如果您可以使用它们,请查看 VLAN:您可以将每个 VLAN(从同一物理接口)放在不同的命名空间中。详情如下:https://blog.scottlowe.org/2014/03/21/a-follow-up-on-linux-network-namespaces/

如果您不能使用网桥或 VLAN,则需要设置一些 IP 转发或 NAT。

相关内容