Comportamento estranho do sysctl no Ubuntu Server 18.04

Comportamento estranho do sysctl no Ubuntu Server 18.04

Digamos que eu tenha um servidor biônico Ubuntu no qual desejo desabilitar o IPv6. (Importante: este não é um problema XY, por favor, não adivinhe o que estou tentando alcançar ou me pergunte por que quero fazer isso. Eu sei o quão grande e maravilhoso é o IPv6, não há necessidade de pregar para o coro. ) Uma maneira de fazer isso é definir os seguintes sysctls:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Quando sysctlé executado manualmente com as configurações acima, isso desativa todas as redes IPv6 no host:

# ip -6 a
#

Ótimo, mas isso não persiste após uma reinicialização. A maneira recomendada de fazer os sysctls persistirem é colocá-los em /etc/sysctl.conf, ou um arquivo em /etc/sysctl.d. Eu fiz isso, mas depois de reiniciar, o IPv6 ainda está lá:

# ip -6 addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 <censored>/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 2591985sec preferred_lft 604785sec
    inet6 fe80::250:56ff:feae:c158/64 scope link 
       valid_lft forever preferred_lft forever

E ainda assim, os sysctls parecem estar configurados corretamente:

# sysctl net.ipv6.conf.all.disable_ipv6 net.ipv6.conf.default.disable_ipv6 net.ipv6.conf.lo.disable_ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

No entanto, quando eu os configuro na linha de comando, para o mesmo valor, de repente o IPv6 éna verdadedesabilitado:

# sysctl -w net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1 net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# ip -6 addr
# 

Então, minha pergunta é: Por que definir sysctls para valores específicos não padrão em/etc/sysctl.d/ aparecerestar fazendo algo de acordo com o resultado de sysctlsi mesmo, e ainda assimnãorealmente afetando o comportamento do kernel? Existe alguma diferença sutil entre definir um sysctl e fazer com que ele entre em vigor?

Eu sei que sysctlé uma interface, /proc/sysmas também estou vendo a mesma coisa lá:

# cat /proc/sys/net/ipv6/conf/all/disable_ipv6 
1
# ip -6 a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 <censored>/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 2591945sec preferred_lft 604745sec
    inet6 fe80::250:56ff:feae:c158/64 scope link 
       valid_lft forever preferred_lft forever
# echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
# ip -6 a
#

Além disso, fiz uma pesquisa significativa sobre isso, esta questão NÃO é uma cópia de nenhuma destas:

Responder1

Eu fiz um hack muito ruim para resolver esse problema no biônico. É um problema de tempo, como mencionou o steeldriver.

cp -a /lib/systemd/system/systemd-sysctl.service /etc/systemd/system/

No novo arquivo eu adicionoRequires=network.target

crie um arquivo etc/sysctl.d/50-ipv6.confcom conteúdo net.ipv6.conf.all.disable_ipv6 = 1Se você usa o NetworkManager em seu servidor não se esqueça de definir method=ignore

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=ignore

na sua conexão de rede.

Espero ter escrito compreensível.

informação relacionada