
Я пытаюсь отключить автонастройку 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/
- мы меняем все
/
на.
usingsed
используя#
разделитель - мы
.proc.sys.
снова удаляем из строки,sed
используя стандартный/
разделитель. - мы добавляем
.autoconf=0
в интерфейс - и применить с
sysctl --write $()
Примечание:Если вы не бегаете так, как root
нужно, вам следует sudo sysctl --write $()
вместо этого...