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

10

Se eu mover uma interface temporariamente para um netns com

ip link set eth10 netns myns

então, não é mais visível na raiz, apenas no espaço de nomes myns.

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

ip link unset eth10

ou talvez

ip link set eth10 netns root

ou similar?

deitch
fonte

Respostas:

13

Eu encontrei uma resposta. Claro, você não pode fazer isso de dentro dos netns. Mas, se você executar a ip netns exec ....partir 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) ao qual o estamos atribuindo no contexto do comando de execução (wrapper) antes de entrar nos netns. Feito!

deitch
fonte
Vamos torcer para que "1" esteja realmente referenciando o espaço para nome da rede "raiz" ...
TheDiveO
movimento eth10 de volta ao padrão namespace rede: ip netns exec myns IP Link conjunto netns eth10 padrão
Ted Feng
No meu sistema Debian 10, "default" parece realmente 1. ser ip netns exec testns ip link set tun0 netns 1trabalhado, enquanto 'default' resultou em Error: argument "default" is wrong: Invalid "netns" value.
Paul
Mexer ainda mais mostra que esses são IDs. Se você criou um espaço para nome adicional que terá o ID 2.
Paul
5

Você pode usar a ip netns deletefunção Na página do manual:

ip [-all] netns delete [NAME] - exclua o nome do (s) namespace (s) da rede

Se NAME estiver presente em / var / run / netns, ele será desmontado e o ponto de montagem será removido. Se este for o último usuário do espaço para nome da rede, o espaço para nome da rede será liberado e todos os dispositivos físicos serão movidos para o padrão , caso contrário, o espaço para nome da rede persistirá até que não haja mais usuários. O ip netns delete pode falhar se o ponto de montagem estiver em uso em outro namespace de montagem.

Não pode ser usado para todos os fins, mas é definitivamente o caminho mais fácil.

Dave
fonte
4

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

Shedee
fonte