Странное поведение sysctl на Ubuntu Server 18.04 - proUbuntu
2 голосов
от
редактировать

Допустим, у меня есть бионический сервер Ubuntu, на котором я хочу отключить IPv6. (Важно: это не проблема XY, пожалуйста, не пытайтесь угадать, чего я пытаюсь достичь, или спросите меня, почему я хочу это сделать. Я знаю, какой замечательный и замечательный IPv6, нет необходимости проповедовать хору. ) Один из способов сделать это - установить следующие sysctls:

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

Когда sysctl запускается вручную с указанными выше настройками, это отключает все сети IPv6 на хосте:

# ip -6 a
#

Отлично, но это не сохраняется после перезагрузки. Рекомендуемый способ сохранения sysctl - поместить их в /etc/sysctl.conf или в файл /etc/sysctl.d. Я сделал это, но после перезагрузки IPv6 все еще там:

# 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

И, тем не менее, sysctl, кажется, установлены правильно:

# 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

Однако, когда я установил для них в командной строке одно и то же значение, внезапно IPv6 на самом деле отключен:

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

Итак, мой вопрос заключается в следующем: почему установка sysctl на определенные значения, отличные от значений по умолчанию в /etc/sysctl.d/ , выглядит так, что делает что-то в соответствии с выводом самого sysctl, и все же не на самом деле влияет на поведение ядра? Есть ли какая-то тонкая разница между установкой sysctl и вступлением в силу?

Я знаю, что sysctl - это интерфейс для /proc/sys, но я вижу там тоже самое:

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

Кроме того, я провел значительное исследование в этом, этот вопрос не является обманом ни одного из них:

1 Ответ

0 голосов
от
редактировать

Я сделал очень плохой взлом, чтобы решить эту проблему на бионическом. Это проблема со временем, как упомянул SteelDriver.

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

В новом файле я добавляю Requires=network.target

создать файл etc/sysctl.d/50-ipv6.conf с содержимым net.ipv6.conf.all.disable_ipv6 = 1 Если вы используете NetworkManager на своем сервере, не забудьте установить method = ignore

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

в вашем сетевом соединении.

Надеюсь, я написал понятно.

Добро пожаловать на сайт proUbuntu, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...