Conectando dois namespaces de rede através de um par de interfaces veth onde cada endpoint tem o mesmo nome

4

Existe um único comando (simples) que criará um par de interfaces veth e atribuirá cada interface a um namespace de rede diferente?

Por exemplo, suponha que eu tenha dois namespaces: mynamespace-1 e mynamespace-2 . Existe um único comando (simples) que conectará esses dois namespaces por meio de um par veth no qual cada terminal da interface é denominado eth0 ?

Atualmente, o que eu faço é criar o par veth, mover cada interface para o namespace correspondente e renomear a interface a partir desse namespace. Eu gostaria de saber se esses três comandos podem ser compactados em um único comando.

Para o contexto, aqui está um exemplo de como eu estou atualmente conectando um par de namespaces e testando a conexão:

# 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
    
por igal 20.11.2017 / 16:42

1 resposta

5

O melhor que posso oferecer é executar o comando em um namespace (usando o atalho -n ), criar cada endpoint com o mesmo nome e mover um deles em um namespace diferente nesse comando:

ip -n mynamespace-1 link add eth0 type veth peer name eth0 netns mynamespace-2

Você ainda precisará fazer outras coisas como a atribuição de endereço (a abreviação -n também pode ser útil), então você terá que escrever um script, de qualquer forma.

Como man ip diz, a opção -n é um atalho para ip netns exec ... ip ... , portanto, você pode usar este formulário se o ip não suportar a opção -n .

    
por 21.11.2017 / 23:00