web-dev-qa-db-ja.com

各エンドポイントが同じ名前を持つvethインターフェイスペアを介して2つのネットワーク名前空間を接続する

Vethインターフェイスのペアを作成し、各インターフェイスを異なるネットワーク名前空間に割り当てる単一の(シンプルな)コマンドはありますか?

たとえば、2つの名前空間mynamespace-1mynamespace-2があるとします。インターフェイスの各エンドポイントがeth0という名前のvethペアを介してこれら2つの名前空間を接続する単一の(シンプルな)コマンドはありますか?

現在私が行うことは、vethペアを作成し、各インターフェイスを対応する名前空間に移動し、その名前空間内からインターフェイスの名前を変更することです。これらの3つのコマンドを1つのコマンドに圧縮できるかどうか知りたいのですが。

コンテキストについては、ここに私が現在名前空間のペアを接続して接続をテストしている方法の例があります。

# 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
5
igal

私が提供できる最高の方法は、1つの名前空間でコマンドを実行し(-nショートカットを使用)、同じ名前で各エンドポイントを作成し、それらのoneを別の名前空間に移動することです。そのコマンド:

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オプションをサポートしていない場合はこのフォームを使用できます。

6
dirkt