![Comportamiento extraño de sysctl en Ubuntu Server 18.04](https://rvso.com/image/913202/Comportamiento%20extra%C3%B1o%20de%20sysctl%20en%20Ubuntu%20Server%2018.04.png)
Digamos que tengo un servidor biónico Ubuntu en el que deseo deshabilitar IPv6. (Importante: este no es un problema XY, no adivinen lo que estoy tratando de lograr ni me pregunten por qué quiero hacer esto. Sé lo grandioso y maravilloso que es IPv6, no es necesario predicar al coro. ) Una forma de hacer esto es configurar los siguientes sistemas:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Cuando sysctl
se ejecuta manualmente con la configuración anterior, esto desactiva todas las redes IPv6 en el host:
# ip -6 a
#
Genial, pero eso no persiste tras reiniciar. La forma recomendada de hacer que los sysctls persistan es colocarlos en /etc/sysctl.conf
, o en un archivo /etc/sysctl.d
. Lo hice, pero después de reiniciar, IPv6 sigue ahí:
# 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
Y, sin embargo, los sysctls parecen estar configurados correctamente:
# 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
Sin embargo, cuando los configuro en la línea de comando, con el mismo valor, de repente IPv6 esde hechodesactivado:
# 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
#
Entonces mi pregunta es: ¿Por qué establecer sysctls en valores específicos no predeterminados en/etc/sysctl.d/
aparecerestar haciendo algo de acuerdo con el resultado de sysctl
sí mismo, y sin embargono¿Afectando realmente el comportamiento del kernel? ¿Existe alguna diferencia sutil entre configurar un syctl y hacer que surta efecto?
Sé que sysctl
es una interfaz, /proc/sys
pero también veo lo mismo allí:
# 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
#
Además, he realizado una investigación importante sobre esto, esta pregunta NO es una trampa de ninguna de estas:
Respuesta1
Hice un truco realmente malo para resolver este problema en bionic. Es un problema de sincronización, como mencionó Steeldriver.
cp -a /lib/systemd/system/systemd-sysctl.service /etc/systemd/system/
En el nuevo archivo agregoRequires=network.target
cree un archivo etc/sysctl.d/50-ipv6.conf
con contenido. net.ipv6.conf.all.disable_ipv6 = 1
Si usa NetworkManager en su servidor, no olvide configurar método = ignorar
[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=ignore
en su conexión de red.
Espero haber escrito comprensible.