В SYSCTL, что /proc/sys/net/ipv[46]/conf/
клавиши имеют следующие подразделы: all
, default
, и ключ для каждого сетевого интерфейса. Например, на машине с одним сетевым интерфейсом eth0 это будет выглядеть так:
iserv ~ # ll /proc/sys/net/ipv[46]/conf/
/proc/sys/net/ipv4/conf/:
insgesamt 0
dr-xr-xr-x 0 root root 0 12. Sep 23:30 all/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 default/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 eth0/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 lo/
/proc/sys/net/ipv6/conf/:
insgesamt 0
dr-xr-xr-x 0 root root 0 12. Sep 23:30 all/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 default/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 eth0/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 lo/
Все соответствующие настройки существуют в каждой клавише отдельно. Например, если я хочу отключить объявления маршрутизатора IPv6 со accept_ra
значением, это значение существует четыре раза:
iserv ~ # sysctl -a 2>/dev/null | grep "accept_ra "
net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.default.accept_ra = 1
net.ipv6.conf.lo.accept_ra = 1
net.ipv6.conf.eth0.accept_ra = 1
Теперь у меня вопрос: какое из этих значений мне нужно изменить? Я решил all
(чтобы изменить все существующие интерфейсы) и default
(чтобы изменить все новые интерфейсы, которые могут появиться позже), но изменение их все равно оставляет значение 1 для lo и eth0:
iserv ~ # sysctl -w net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.all.accept_ra = 0
iserv ~ # sysctl -w net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.default.accept_ra = 0
iserv ~ # sysctl -a 2>/dev/null | grep "accept_ra "
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.lo.accept_ra = 1
net.ipv6.conf.eth0.accept_ra = 1
Будет ли машина теперь принимать Router Advertisements на eth0 или нет?
Ответы:
Я нашел ответ, пока писал вопрос. В любом случае я решил опубликовать это, потому что другие могут найти это проницательным, а затем ответить на него сам; Я надеюсь, что это не осуждается :)
Пользователь Philipp Matthias Hahn из списка рассылки linux-kernel понял это хотя бы частично :
Он не покрывает,
accept_ra
но, по крайней мере, теперь понятно, какall
и какdefault
работают, точнее, как они работают не так, как я ожидал.источник
use_tempaddr
параметр ...Обработчик
accept_ra
вnet/ipv6/addrconf.c
естьproc_dointvec
. Таким образом, общий интерфейсный код ранее генерировал массивall
и специфичные для интерфейса записи, и запись в них с помощьюsysctl
или procfs просто помещает значение, указанное вами в массив.Мы обеспокоены тем, как эти значения затем используются
Из вызывающих
ipv6_accept_ra()
функций вы увидите,include/net/ipv6.h
что каждый вызывающий использует определенный интерфейс для вызова этой функции.net.ipv6.conf.all.accept_ra
Насколько я вижу, в ядре нет нигде, который когда-либо использовался, кроме как для хранения записи procfs.Если вы хотите изменить
accept_ra
каждый интерфейс с помощью одной команды, вы можете сделать это:Я опоздал примерно на 4 года, но это правильный ответ: P
источник