Como posso mover uma interface para fora de um namespace de rede?

4

Se eu mudar uma interface temporariamente para um netns com

ip link set eth10 netns myns

então ele não está mais visível na raiz, apenas dentro do namespace myns.

Como faço para voltar, algo como (obviamente não existe):

ip link unset eth10

ou talvez

ip link set eth10 netns root

ou similar?

    
por deitch 09.07.2015 / 20:56

3 respostas

7

Eu encontrei uma resposta. Claro, você não pode fazer isso dentro dos netns. Mas, se você executar ip netns exec .... dentro do namespace da rede raiz, tudo funcionará.

ip netns exec <PID> ip link set eth10 netns 1

Então funciona! Leva o PID (1 neste caso) para o qual nós estamos atribuindo isto para estar no contexto do comando de execução (invólucro) antes de nós entrarmos nos netns. Feito!

    
por 09.07.2015 / 22:05
4

Você usa a função ip netns delete . Na página do manual:

ip [-all] netns delete [ NAME ] - delete the name of a network namespace(s)

If NAME is present in /var/run/netns it is umounted and the mount point is removed. If this is the last user of the network namespace the network namespace will be freed and all physical devices will be moved to the default one, otherwise the network namespace persists until it has no more users. ip netns delete may fail if the mount point is in use in another mount namespace.

Ele não pode ser usado para todos os propósitos, mas se você puder usar essa opção, ela parece ser a mais limpa.

    
por 01.03.2017 / 01:13
3

O que funcionou para mim com base na resposta de deitch é executar o comando a partir dos netns personalizados:

ip netns exec myns ip link set eth10 netns 1

    
por 10.01.2018 / 09:21