在网络命名空间之间创建 VLAN

在网络命名空间之间创建 VLAN

我想使用网络命名空间(ns1到ns4)实现下图所示的拓扑。

                      拓扑实现

我可以使用以下命令实现上述拓扑,而无需将网络分成两个不同的 VLAN(基于本文,标题为:Linux 网络命名空间简介):

sudo ip netns add ns1
sudo ip netns add ns2
sudo ip netns add ns3
sudo ip netns add ns4

sudo ip link add veth1 type veth peer name veth11
sudo ip link add veth2 type veth peer name veth12
sudo ip link add veth3 type veth peer name veth13
sudo ip link add veth4 type veth peer name veth14

sudo ip link set veth11 netns ns1
sudo ip link set veth12 netns ns2
sudo ip link set veth13 netns ns3
sudo ip link set veth14 netns ns4

sudo ip netns exec ns1  ifconfig lo up
sudo ip netns exec ns2  ifconfig lo up
sudo ip netns exec ns3  ifconfig lo up
sudo ip netns exec ns4  ifconfig lo up

sudo ifconfig veth1 10.1.11.1/24 up
sudo ifconfig veth2 10.1.12.1/24 up
sudo ifconfig veth3 10.1.13.1/24 up
sudo ifconfig veth4 10.1.14.1/24 up

sudo ip netns exec ns1 ifconfig veth11 10.1.11.2/24 up
sudo ip netns exec ns2 ifconfig veth12 10.1.12.2/24 up
sudo ip netns exec ns3 ifconfig veth13 10.1.13.2/24 up
sudo ip netns exec ns4 ifconfig veth14 10.1.14.2/24 up

sudo ip netns exec ns1 route add default gw 10.1.11.1 veth11
sudo ip netns exec ns2 route add default gw 10.1.12.1 veth12
sudo ip netns exec ns3 route add default gw 10.1.13.1 veth13
sudo ip netns exec ns4 route add default gw 10.1.14.1 veth14

根据上述设置,每个人都可以 ping 通其他人。现在我想将 ns1 和 ns3 隔离在一个 VLAN 中,将 ns2 和 ns4 隔离在另一个 VLAN 中。为了实现 VLAN,我尝试使用类似以下内容:

sudo vconfig add veth1 11
sudo vconfig add veth3 11
sudo vconfig add veth11 12
sudo vconfig add veth13 12

但是每个人仍然可以 ping 通其他人,这意味着网络没有被分成两个不同的 LAN。我该如何实现我的目标?虚拟接口的 VLAN 标记还有其他方法吗?

答案1

veth[1,2,3,4] 仍然位于全局命名空间中,因此由内核路由。

您的vconfig命令正在将 vlan 接口添加到相应的 veth,这不是您想要的。(ip link show应该显示 veth1.11 等(取决于 name_type 的设置方式))

我不确定你使用 VLAN 的目的是什么。如果你想要隔离 n1+n3 和 ns2+ns4,那么请将 veth 的另一端移至不同的命名空间:

ip netns add blue
ip link set netns veth1 blue
ip link set netns veth3 blue
ip netns add yellow
ip link set netns veth2 yellow
ip link set netns veth4 yellow

相关内容