In Sysctl, die /proc/sys/net/ipv[46]/conf/
haben Schlüssel die folgenden Unterschlüssel: all
, default
und ein Schlüssel für jede Netzwerk - Schnittstelle. Auf einem Computer mit einer einzelnen Netzwerkschnittstelle eth0 sieht dies beispielsweise folgendermaßen aus:
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/
Alle entsprechenden Einstellungen sind in jeder Taste separat vorhanden. Wenn ich beispielsweise IPv6-Routerankündigungen mit dem accept_ra
Wert deaktivieren möchte , ist dieser Wert viermal vorhanden:
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
Meine Frage ist nun: Welche dieser Werte muss ich ändern? Ich dachte all
(um alle vorhandenen Schnittstellen zu ändern) und default
(um alle neuen Schnittstellen zu ändern, die später erscheinen könnten), aber wenn ich diese ändere, bleibt der Wert für lo und eth0 weiterhin bei 1:
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
Akzeptiert das Gerät jetzt Router Advertisements auf eth0 oder nicht?
Antworten:
Ich habe die Antwort gefunden, während ich die Frage schreibe. Ich habe beschlossen, es trotzdem zu posten, weil andere dies vielleicht aufschlussreich finden und es dann selbst beantworten. Ich hoffe das ist nicht verpönt :)
Der Benutzer Philipp Matthias Hahn auf der Mailingliste des Linux-Kernels hat es zumindest teilweise herausgefunden :
Er deckt nicht ab,
accept_ra
aber es ist zumindest jetzt klar, wieall
unddefault
besser gesagt, wie sie nicht so funktionieren, wie ich es erwartet hätte.quelle
use_tempaddr
Parameter ...Der Handler für
accept_ra
innet/ipv6/addrconf.c
istproc_dointvec
. Aus diesem Grund hat generischer Schnittstellencode zuvor ein Array mitall
und schnittstellenspezifischen Einträgen generiert.sysctl
Wenn Sie mit oder procfs in diese Einträge schreiben, wird nur der von Ihnen im Array angegebene Wert eingefügt.Es geht uns darum, wie diese Werte dann verwendet werden
Sie werden von
ipv6_accept_ra()
Funktionsaufrufern feststellen,include/net/ipv6.h
dass jeder Aufrufer eine bestimmte Schnittstelle verwendet, um diese Funktion aufzurufen.Es gibt also nirgendwo im Kernel, der
net.ipv6.conf.all.accept_ra
jemals verwendet wird, außer um einen procfs-Eintrag zu speichern, soweit ich das sehe.Wenn Sie
accept_ra
jede Schnittstelle mit einem Befehl ändern möchten , können Sie dies tun:Ich bin ungefähr 4 Jahre zu spät, aber das ist die richtige Antwort: P
quelle