Seltsames Sysctl-Verhalten unter Ubuntu Server 18.04

Seltsames Sysctl-Verhalten unter Ubuntu Server 18.04

Nehmen wir an, ich habe einen Ubuntu Bionic-Server, auf dem ich IPv6 deaktivieren möchte. (Wichtig: Dies ist kein XY-Problem. Bitte raten Sie nicht, was ich erreichen möchte, und fragen Sie mich nicht, warum ich das tun möchte. Ich weiß, wie großartig und wunderbar IPv6 ist, ich muss keine offenen Worte verbreiten.) Eine Möglichkeit, dies zu tun, besteht darin, die folgenden Sysctls festzulegen:

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

Bei sysctlmanueller Ausführung mit den oben genannten Einstellungen werden sämtliche IPv6-Netzwerke auf dem Host deaktiviert:

# ip -6 a
#

Großartig, aber das bleibt nach einem Neustart nicht bestehen. Die empfohlene Methode, um Sysctls dauerhaft zu machen, besteht darin, sie in /etc/sysctl.confoder eine Datei in zu speichern /etc/sysctl.d. Das habe ich getan, aber nach einem Neustart ist IPv6 immer noch da:

# 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

Und dennoch scheinen die Sysctls korrekt eingestellt zu sein:

# 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

Wenn ich sie jedoch in der Befehlszeile auf den gleichen Wert einstelle, wird plötzlich IPv6Genau genommendeaktiviert:

# 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
# 

Meine Frage ist also: Warum ist das Setzen von Sysctls auf bestimmte nicht standardmäßige Werte in/etc/sysctl.d/ erscheinenetwas zu tun, was dem Ergebnis sysctlseiner selbst entspricht, und dochnichttatsächlich das Verhalten des Kernels beeinflussen? Gibt es einen subtilen Unterschied zwischen dem Festlegen eines Sysctl und dessen Inkrafttreten?

Ich weiß, dass dies sysctleine Schnittstelle dafür ist /proc/sys, aber ich sehe dort dasselbe:

# 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
#

Außerdem habe ich umfangreiche Recherchen zu diesem Thema durchgeführt und diese Frage ist KEINE Duplikatfrage einer der folgenden:

Antwort1

Ich habe einen wirklich schlechten Hack gemacht, um dieses Problem auf Bionic zu lösen. Es ist ein Timing-Problem, wie Steeldriver erwähnt hat.

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

In der neuen Datei füge ich hinzuRequires=network.target

Erstellen Sie eine Datei etc/sysctl.d/50-ipv6.confmit Inhalt. net.ipv6.conf.all.disable_ipv6 = 1Wenn Sie NetworkManager auf Ihrem Server verwenden, vergessen Sie nicht, method=ignore festzulegen.

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

in Ihrer Netzwerkverbindung.

Ich hoffe ich habe verständlich geschrieben.

verwandte Informationen