Sysctl IPv6 отключить автонастройку для всех интерфейсов не работает

Sysctl IPv6 отключить автонастройку для всех интерфейсов не работает

Я пытаюсь отключить автонастройку IPv6 для всех моих интерфейсов (у меня их 4). Я хочу использовать

net.ipv6.conf.all.autoconf = 0

В моей конфигурации sysctl (в разделе /etc/sysct.d) Но настройки не применяются ни к одному интерфейсу, однако для net.ipv6.conf.all.autoconfпараметра это работает, поэтому выполните следующую команду: `

sysctl -a | grep "net\.ipv6\.conf" | grep "autoconf"

net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.eth0.autoconf = 1
net.ipv6.conf.eth1.autoconf = 1
net.ipv6.conf.eth2.autoconf = 1
net.ipv6.conf.eth3.autoconf = 1

Затем я попробовал настройку «на лету» с помощью

sysctl -w net.ipv6.conf.all.autoconf=0

Но ни то, ни другое не работает. Знаете ли вы какие-либо обходные пути для этого? Причины, по которым я не хотел делать это по одному ( net.ipv6.conf.eth3.autoconf = 0вручную), потому что иногда у меня есть и другие интерфейсы (они просто не всегда подключены)

решение1

TL;DR

for sInterface in /proc/sys/net/ipv6/conf/*; do sysctl --write $(echo $sInterface.autoconf=0 | sed "s#/#.#g" | sed "s/.proc.sys.//g"); done

следует это сделать.

Длинная версия:

  • sysctlна самом деле изменяет содержимое файла в/proc/sys
  • net.ipv6.conf.all.autoconfтаким образом, физически находится в/proc/sys/net/ipv6/conf/all/autoconf
  • поэтому мы повторяем/proc/sys/net/ipv6/conf/
  • мы меняем все /на .using sedиспользуя #разделитель
  • мы .proc.sys.снова удаляем из строки, sedиспользуя стандартный /разделитель.
  • мы добавляем .autoconf=0в интерфейс
  • и применить сsysctl --write $()

Примечание:Если вы не бегаете так, как rootнужно, вам следует sudo sysctl --write $()вместо этого...

Связанный контент