Соединение двух сетевых пространств имен через пару интерфейсов veth, где каждая конечная точка имеет одинаковое имя

Соединение двух сетевых пространств имен через пару интерфейсов veth, где каждая конечная точка имеет одинаковое имя

Существует ли одна (простая) команда, которая создаст пару интерфейсов 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.

Связанный контент