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