通过 veth 接口对连接两个网络命名空间,其中每个端点具有相同的名称

通过 veth 接口对连接两个网络命名空间,其中每个端点具有相同的名称

是否有一个(简单)命令可以创建 veth 接口对并将每个接口分配给不同的网络命名空间?

例如,假设我有两个命名空间:mynamespace-1mynamespace-2。是否有一个(简单的)命令可以通过 veth 对连接这两个命名空间,其中接口的每个端点都被命名eth0

目前我要做的是创建 veth 对,将每个接口移动到相应的命名空间,然后从该命名空间内重命名该接口。我想知道这三个命令是否可以压缩成一个命令。

对于上下文,以下是我当前如何连接一对命名空间并测试连接的示例:

# Create two network namespaces
sudo ip netns add 'mynamespace-1'
sudo ip netns add 'mynamespace-2'

# Create a veth virtual-interface pair
sudo ip link add 'myns-1-eth0' type veth peer name 'myns-2-eth0'

# Assign the interfaces to the namespaces
sudo ip link set 'myns-1-eth0' netns 'mynamespace-1'
sudo ip link set 'myns-2-eth0' netns 'mynamespace-2'

# Change the names of the interfaces (I prefer to use standard interface names)
sudo ip netns exec 'mynamespace-1' ip link set 'myns-1-eth0' name 'eth0'
sudo ip netns exec 'mynamespace-2' ip link set 'myns-2-eth0' name 'eth0'

# Assign an address to each interface
sudo ip netns exec 'mynamespace-1' ip addr add 192.168.1.1/24 dev eth0
sudo ip netns exec 'mynamespace-2' ip addr add 192.168.2.1/24 dev eth0

# Bring up the interfaces (the veth interfaces the loopback interfaces)
sudo ip netns exec 'mynamespace-1' ip link set 'lo' up
sudo ip netns exec 'mynamespace-1' ip link set 'eth0' up
sudo ip netns exec 'mynamespace-2' ip link set 'lo' up
sudo ip netns exec 'mynamespace-2' ip link set 'eth0' up

# Configure routes
sudo ip netns exec 'mynamespace-1' ip route add default via 192.168.1.1 dev eth0
sudo ip netns exec 'mynamespace-2' ip route add default via 192.168.2.1 dev eth0

# Test the connection (in both directions)
sudo ip netns exec 'mynamespace-1' ping -c 1 192.168.2.1
sudo ip netns exec 'mynamespace-2' ping -c 1 192.168.1.1

答案1

我能提供的最好的方法是在一个命名空间中执行命令(使用-n快捷方式),创建具有相同名称的每个端点,然后移动将它们放入该命令中的不同命名空间中:

ip -n mynamespace-1 link add eth0 type veth peer name eth0 netns mynamespace-2

您仍然需要执行其他操作,例如地址分配(-n缩写也可能有帮助),因此无论如何您都必须编写脚本。

如前所述man ip,该-n选项是 的快捷方式,因此如果您不支持该选项ip netns exec ... ip ...,可以使用此表单。ip-n

相关内容