En sysctl, las /proc/sys/net/ipv[46]/conf/
teclas tienen las siguientes subclaves: all
, default
, y una clave para cada interfaz de red. Por ejemplo, en una máquina con una única interfaz de red eth0, se verá así:
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/
Todas las configuraciones respectivas existen en cada tecla por separado. Por ejemplo, si deseo deshabilitar los anuncios de enrutador IPv6 con el accept_ra
valor, este valor existe cuatro veces:
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
Mi pregunta ahora es: ¿cuál de estos valores necesito cambiar? Imaginé all
(para cambiar todas las interfaces existentes) y default
(para cambiar todas las nuevas interfaces que puedan aparecer más adelante), pero al cambiarlas aún queda el valor en 1 para lo y 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
¿La máquina ahora aceptará anuncios de enrutador en eth0, o no?
Respuestas:
Encontré la respuesta mientras aún escribía la pregunta. He decidido publicarlo de todos modos porque otros pueden encontrar esto perspicaz y luego responderlo yo mismo; Espero que esto no esté mal visto :)
El usuario Philipp Matthias Hahn en la lista de correo del kernel de Linux lo ha descubierto al menos parcialmente :
Él no cubre,
accept_ra
pero al menos ahora está claro cómoall
y cómodefault
funcionan, o más bien, cómo no funcionan como esperaba.fuente
use_tempaddr
parámetro ...El controlador para
accept_ra
ennet/ipv6/addrconf.c
esproc_dointvec
. Entonces, el código genérico de la interfaz ha generado previamente una matriz deall
entradas específicas de la interfaz, y escribir en ellas consysctl
o procfs simplemente coloca el valor que especifique en la matriz.Nos preocupa cómo se usan esos valores
Verá por las personas que llaman la
ipv6_accept_ra()
funcióninclude/net/ipv6.h
que cada persona que llama utiliza una interfaz específica para llamar a esa función.Por lo tanto
net.ipv6.conf.all.accept_ra
, hasta donde puedo ver, no hay ningún lugar en el núcleo que se use, excepto para almacenar una entrada procfs.Si desea cambiar
accept_ra
cada interfaz con un comando, puede hacer esto:Llego unos 4 años tarde pero esta es la respuesta correcta: P
fuente