有没有办法可以将辅助 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。