Com o ip netns exec, você pode executar um comando em um namespace de rede personalizado - mas também existe uma maneira de executar um comando no namespace padrão?
Por exemplo, depois de executar estes dois comandos:
sudo ip netns add test_ns
sudo ip netns exec test_ns bash
Como o bash recém-criado pode executar programas no namespace de rede padrão? Não há ip netns exec padrão ou algo semelhante, até onde eu encontrei.
Meu cenário é:
Desejo executar um servidor SSH em um espaço para nome de rede separado (para manter o resto do sistema inconsciente da conexão de rede, pois o sistema é usado para teste de rede), mas quero poder executar programas no espaço para nome de rede padrão via a conexão SSH.
O que eu descobri até agora:
Os namespaces de rede criados são listados como arquivos em / var / run / netns (mas não há arquivo para o namespace padrão)
O código exec do ip netns pode ser encontrado aqui: http://git.kernel.org/cgit/linux/kernel/git/shemminger/iproute2.git/tree/ip/ipnetns.c#n132 - Eu não entendi tudo isso ainda está sendo feito, mas não parece muito promissor.
os netns ip identificam $$ como sugerido por Howto query e altere o namespace da rede no linux? não retorna nada quando no namespace da rede padrão
nsenter -t 1 -n
mas ele criou um novo processo da mesma formaip netns exec
e não mudou o espaço para nome do processo atual.Descobri que você pode retornar ao espaço para nome da rede padrão com dois comandos simples:
Esse método obviamente pressupõe que você pode ver processos fora do seu próprio espaço para nome através do
proc
sistema de arquivos. Se você também estiver em um espaço para nome PID separado, retornar ao espaço para nome padrão não é tão simples.Os comandos acima foram testados no Ubuntu 14.04. Não sei se existe alguma distribuição específica sobre a abordagem.
fonte
mount --bind
vez deln -s
, pois significa que oip
comando também pode gerenciá-lo (o ip basicamente monta --bind nesses arquivos de espaço para nome para configurar espaços de nome persistentes)."ln -s / proc / 1 / ns / net / var / run / netns / default" <----- Não é recomendado.
O contador do código que gera o "ip netns show"
Se você possui um shell bash, basta sair do bash e sair.
Se você possui ssh em um netns, faça ssh na interface dos ns padrão e faça o que precisa fazer lá.
Como último recurso, ln como acima, mas sugiro removê-lo assim que for feito e antes que ocorram alterações em qualquer ns. Caso contrário, o contador será corrompido e causará problemas.
fonte
Você pode obter o formulário pid fazendo 'ps aux' ou até um top, se quiser.
Pessoalmente, sempre ssh no namespace principal, sempre posso voltar ao padrão digitando exit e, em seguida, reinserir o namespace, se necessário.
fonte