
是否有一個(簡單)命令可以建立 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