Isolamento do namespace de rede (não)?

1

Eu tenho feito algumas pesquisas sobre Linux e redes em geral, e me deparei com namespaces. Depois de ler artigos e aprender como configurar um, estou confuso.

Instalei um aplicativo no meu sistema e, quando o executo no namespace global (sem namespace), posso conectar-me ao web gui a partir do lan usando o endereço IP do host. Agora, quando eu crio um namespace, e antes de criar adaptadores virtuais ou fazer qualquer outra coisa, se eu abrir o aplicativo no namespace, ainda posso me conectar a ele usando o mesmo IP.

O comando que estou usando para iniciar o serviço é:

sudo ip netns exec blue service *application* start

Meu entendimento é que namespaces de "rede" devem isolar processos. Então, o que estou perdendo?

A propósito, eu geralmente uso essas instruções para namespaces:

link

    
por jeebs 21.01.2017 / 07:57

1 resposta

5

So what am I missing?

O que você está perdendo é que service comunica com init , essencialmente escapando do namespace da rede. O aplicativo acaba sendo executado no mesmo namespace de rede que o sistema init (por padrão).

Em seu núcleo, o problema é que service não apenas fork e exec o daemon do aplicativo binário (que preservaria o namespace). Em vez disso, ele faz pouco mais do que passar seus parâmetros para init através (acredito) de um soquete de domínio Unix. Os contêineres seguros também isolam o sistema de arquivos para evitar esse tipo de coisa.

Eu tentaria apenas invocar o binário do daemon do aplicativo diretamente (sob ip netns exec [namespace] , é claro). Ou use um software de contêiner real onde alguém já tenha resolvido todos os detalhes complicados ...

    
por 21.01.2017 / 08:37