是否有一个(简单)命令可以创建 veth 接口对并将每个接口分配给不同的网络命名空间?
例如,假设我有两个命名空间:mynamespace-1
和mynamespace-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