Eu tenho o host executando o RHEL-7.2. Dentro disso, rodando o LXC. Dentro do LXC, criando namespaces de rede. Dentro do namespace, a alteração de sysctl
variáveis estava falhando (como root):
$ ip netns add testns
$ ip netns exec testns bash
$ sysctl net.ipv6.conf.all.disable_ipv6=1
sysctl: setting key "net.ipv6.conf.all.disable_ipv6": Read-only file system
Se eu remontar /proc/sys
para RW em um shell e, em seguida, sysctl -w
dentro do mesmo shell, funcionará.
$ ip netns exec testns bash
$ mount -o remount,rw /proc/sys
$ sysctl net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6 = 1
Em seguida, inicio o segundo shell e insiro netns, e /proc/sys
aparece como somente leitura para esse shell, mas permanece gravável no shell de 1sh. Isso me intriga. O efeito de alterar valores pelo primeiro shell é visível para o segundo shell.
Eu estava tentando adicionar remontar ao script de provisionamento, mas essa questão atrapalha.
$ ip netns exec testns sysctl net.ipv6.conf.all.disable_ipv6=1
sysctl: setting key "net.ipv6.conf.all.disable_ipv6": Read-only file system
$ ip netns exec testns sh -c \
> 'mount -o remount,rw /proc/sys && sysctl net.ipv6.conf.all.disable_ipv6=1'
net.ipv6.conf.all.disable_ipv6 = 1
$ ip netns exec testns sysctl net.ipv6.conf.all.disable_ipv6=0
sysctl: setting key "net.ipv6.conf.all.disable_ipv6": Read-only file system
Observe que posso fazer isso sysctl
change no host e no namespace padrão do LXC sem problemas. Se eu criar um namespace no host diretamente, não tenho esse problema. Eu só corro em /proc/sys
sendo somente leitura dentro do namespace dentro do LXC.
Minhas perguntas aqui são:
Q1 . Eu gostaria que /proc/sys
dentro do namespace dentro do LXC permanecesse permanentemente montado com o RW para que eu pudesse definir sysctl vars a qualquer momento.
Q2 . Eu gostaria de entender porque isso se comporta. Parece que /proc/sys
mount é de alguma forma por processo ou por setns
de chamada do sistema? man ip-netns
fala sobre a montagem de ligação para /etc/netns/<name>/file
, mas não vejo nada sobre /proc
. Eu senti falta de algo óbvio?
Atualizar
Encontrei o que provavelmente será a resposta para o meu Q2 .
Primeiro experimentalmente e depois em man ip-netns
:
ip netns exec automates handling of this configuration,
file convention for network namespace unaware applications,
by creating a mount namespace and bind mounting
all of the per network namespace configure files
into their traditional location in /etc
.
Portanto, sempre que ip netns exec
criar um novo namespace de montagem, o /proc/sys
será a vítima de todas as opções de montagem de onde ele foi tirado. Meu melhor palpite é que preciso encontrar o que faz com que ip netns exec
monte a ligação /proc/sys
no modo somente leitura em LXC, o que provavelmente responderá à minha pergunta Q1.