En sysctl, les /proc/sys/net/ipv[46]/conf/
touches ont les sous - clés suivantes: all
, default
et une clé pour chaque interface réseau. Par exemple, sur une machine avec une seule interface réseau eth0, cela ressemblera à ceci:
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/
Tous les paramètres respectifs existent dans chaque touche séparément. Par exemple, si je souhaite désactiver les annonces de routeur IPv6 avec la accept_ra
valeur, cette valeur existe quatre fois:
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
Ma question est la suivante: laquelle de ces valeurs dois-je changer? J'ai pensé all
(pour changer toutes les interfaces existantes) et default
(pour changer toutes les nouvelles interfaces susceptibles d'apparaître plus tard), mais leur modification laisse toujours la valeur à 1 pour lo et 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
Est-ce que la machine acceptera maintenant les annonces de routeur sur eth0 ou non?
Réponses:
J'ai trouvé la réponse tout en écrivant la question. J'ai quand même décidé de le poster car d'autres personnes pourraient trouver cela intéressant, puis y répondre moi-même. J'espère que ce n'est pas mal vu :)
L'utilisateur Philipp Matthias Hahn sur la liste de diffusion linux-kernel l'a compris au moins partiellement :
Il ne couvre pas
accept_ra
mais au moins, il est maintenant clair commentall
et quidefault
fonctionnent, ou plutôt comment ils ne fonctionnent pas comme je l'aurais prévu.la source
use_tempaddr
paramètre ...Le gestionnaire pour
accept_ra
innet/ipv6/addrconf.c
estproc_dointvec
. Ainsi, le code d'interface générique a précédemment généré un tableau d'all
entrées et d'interfaces spécifiques, et l'écriture dans celles-ci avecsysctl
ou procfs place simplement la valeur que vous spécifiez dans le tableau.Nous sommes préoccupés par la façon dont ces valeurs sont ensuite utilisées
Les appelants de
ipv6_accept_ra()
fonction verrontinclude/net/ipv6.h
que chaque appelant utilise une interface spécifique pour appeler cette fonction.Autant
net.ipv6.conf.all.accept_ra
que je sache, le noyau n’est utilisé que pour stocker une entrée procfs.Si vous souhaitez modifier
accept_ra
chaque interface avec une seule commande, vous pouvez procéder comme suit:J'ai environ 4 ans de retard, mais voici la réponse correcte: P
la source