V sysctl, /proc/sys/net/ipv[46]/conf/
klíče mají následující podklíče:all
, default
a klíč pro každé síťové rozhraní. Například na počítači s jediným síťovým rozhraním eth0 to bude vypadat takto:
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/
Všechna příslušná nastavení existují v každé klávese samostatně. Pokud například chci zakázat reklamy směrovače IPv6 pomocí accept_ra
hodnota, tato hodnota existuje čtyřikrát:
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
Moje otázka nyní zní:kterou z těchto hodnot musím změnit? Myslel jsem, že all
(pro změnu všech existujících rozhraní) a default
(chcete-li změnit všechna nová rozhraní, která se mohou objevit později), ale změna těchto rozhraní stále ponechává hodnotu 1 pro lo a 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
Bude nyní stroj přijímat reklamy směrovače na eth0, nebo ne?
Přijatá odpověď:
Odpověď jsem našel při psaní otázky. Rozhodl jsem se to přesto zveřejnit, protože to ostatní mohou považovat za poučné a pak na to odpovím sám; Doufám, že to nebude odsuzováno 🙂
Uživatel Philipp Matthias Hahn z mailing listu linux-kernel na to alespoň částečně přišel:
As far as I researched for IPv4 some time ago, the "default" value gets
copied to newly created interfaces only once.
"all" on the other hand allways gets applied in addition to the current
setting, but it depends on the exact setting, if its ORed, ANDed, or
whatevered:
log_martians OR
accept_redirects AND
forwarding ?
mc_forwarding AND
medium_id
proxy_arp OR
shared_media OR
secure_redirects OR
send_redirects OR
bootp_relay AND
accept_source_route AND
rp_filter AND
arp_filter OR
arp_announce MAX
arp_ignore MAX
arp_accept
app_solicit
disable_policy
disable_xfrm
tag
(see include/linux/inetdevice.h:83 for IN_DEV_{AND,OR,MAX}CONF)
Putting a new value in "all" doesn't change the value you read from
"$interface", but it only gets computed and used internally.
Nezahrnuje accept_ra
ale aspoň je teď jasné, jak all
a default
fungují, nebo spíše, jak nefungují tak, jak bych očekával.