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.