In sysctl, il /proc/sys/net/ipv[46]/conf/
keys hanno le seguenti sottochiavi:all
, default
e una chiave per ciascuna interfaccia di rete. Ad esempio, su una macchina con una singola interfaccia di rete eth0, apparirà così:
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/
Tutte le rispettive impostazioni esistono in ogni chiave separatamente. Ad esempio, se voglio disabilitare gli annunci del router IPv6 con accept_ra
value, questo valore esiste quattro volte:
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
La mia domanda ora è:quale di questi valori devo cambiare? Ho calcolato all
(per modificare tutte le interfacce esistenti) e default
(per modificare tutte le nuove interfacce che potrebbero apparire in seguito), ma la modifica di queste lascia comunque il valore a 1 per lo ed 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 macchina ora accetterà annunci router su eth0 o no?
Risposta accettata:
Ho trovato la risposta mentre scrivevo ancora la domanda. Ho deciso di pubblicarlo comunque perché altri potrebbero trovarlo perspicace e quindi rispondere da solo; Spero che questo non sia disapprovato 🙂
L'utente Philipp Matthias Hahn sulla mailing list del kernel linux l'ha capito almeno in parte:
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.
Non copre accept_ra
ma almeno ora è chiaro come all
e default
funzionano, o meglio, come non funzionano come mi sarei aspettato.