ip link
tem uma opção de namespace, que além disso para um nome de namespace de rede, pode usar um PID para referenciar o namespace de um processo. Se os namespaces PID forem compartilhados entre os processos, você poderá mover os dispositivos de qualquer maneira; provavelmente é mais fácil de dentro , quando você considera PID 1 sendo "fora" . Com namespaces PID separados , você precisa mover do namespace externo (PID) para o interno.
Por exemplo, de dentro de um namespace de rede, você pode criar um par de dispositivos veth para o namespace PID 1 :
ip link add veth0 type veth peer name veth0 netns 1
Como os namespaces funcionam no Linux
Todo processo tem arquivos de referência para os namespaces em /proc/<pid>/ns/
. Além disso, ip netns
cria arquivos de referência persistentes em /run/netns/
. Esses arquivos são usados com a setns
chamada do sistema para alterar o namespace do encadeamento em execução para um namespace apontado por tal arquivo.
Do shell, você pode entrar em outro namespace usando o nsenter
programa, fornecendo arquivos de namespace (caminhos) em argumentos.
Uma boa visão geral dos namespaces do Linux é dada na série de artigos Namespaces in operation no LWN .net.
Configurando namespaces
Quando você configura vários namespaces ( mount, pid, user, etc.), configure o namespace de rede o mais cedo possível, antes de alterar mount e pid namespaces. Se você não tiver namespaces mount ou pid compartilhados, não terá como apontar o namespace de rede para fora, porque não é possível ver os arquivos referentes aos namespaces de rede fora.
Se você precisar de mais flexibilidade do que os utilitários de linha de comando fornecem, você precisa usar as chamadas do sistema para gerenciar espaços de nome diretamente do seu programa. Para documentação, veja as páginas de manual relevantes: man 2 setns
, man 2 unshare
e man 7 namespaces
.