透過 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

相關內容