Parâmetros de kernel padrão em novos namespaces de rede

1

Quais são os parâmetros padrão do kernel, ao criar um novo namespace de rede? Existe uma maneira de substituí-los na criação?

Eu acho que eles são herdados pelo processo pai. Um exemplo usando o compartilhamento não compartilhado:

> /sbin/sysctl -a --pattern 'net.ipv4.conf.all.forwarding'
net.ipv4.conf.all.forwarding = 1
> unshare -n
> /sbin/sysctl -a --pattern 'net.ipv4.conf.all.forwarding'
net.ipv4.conf.all.forwarding = 1
    
por Dimitris Dalianis 21.03.2017 / 11:14

1 resposta

1

Eu acho que sua suposição está correta, eles são herdados do namespace pai. Isso parece semelhante a como os processos se clonam usando a chamada de sistema fork() , então quaisquer alterações desejadas devem ser aplicadas pelo clone , usando as chamadas normais do sistema. (Incluindo a substituição do programa atual por um completamente diferente, usando exec() . fork() + exec() sendo como, por exemplo, o shell executa outros programas, embora essa mágica geralmente não seja visível para o usuário).

Nenhuma das opções da chamada de sistema unshare subjacente altera isso. Então eu diria que a resposta para sua pergunta é não.

link

Ah ... isso nem foi uma analogia! Veja os flags das opções:

CLONE_NEWNET (since Linux 2.6.24)

This flag has the same effect as the clone(2) CLONE_NEWNET flag. Unshare the network namespace, so that the calling process is moved into a new network namespace which is not shared with any previously existing process. Use of CLONE_NEWNET requires the CAP_SYS_ADMIN capability.

clone() basicamente significa fork() .

Since version 2.3.3, rather than invoking the kernel's fork() system call, the glibc fork() wrapper that is provided as part of the NPTL threading implementation invokes clone(2) with flags that provide the same effect as the traditional system call. (A call to fork() is equivalent to a call to clone(2) specifying flags as just SIGCHLD.)

    
por 21.03.2017 / 17:42