/ Proc / sys / net / ipv [46] / conf / içindeki “tümü”, “varsayılan” ve “eth *” arasındaki fark nedir?


37

Sysctl olarak, /proc/sys/net/ipv[46]/conf/: tuşlar aşağıdaki alt anahtarı vardır all, defaultve her ağ arabirimi için bir anahtar. Örneğin, eth0 olan tek bir ağ arayüzüne sahip bir makinede şöyle görünecektir:

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/

Tüm ilgili ayarlar her tuşta ayrı olarak bulunur. Örneğin, accept_radeğeri olan IPv6 Yönlendirici Reklamlarını devre dışı bırakmak istersem , bu değer dört kez bulunur:

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

Şimdi sorum şu: bu değerlerden hangisini değiştirmem gerekiyor? all(Tüm mevcut arayüzleri değiştirmek için) ve default(daha sonra görünebilecek tüm yeni arayüzleri değiştirmek için ) düşündüm , ancak bunları değiştirmek hala lo ve eth0 için 1 değerini bırakıyor:

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

Makine artık eth0'da Yönlendirici Reklamları kabul edecek mi, kabul etmeyecek mi?


Oh, cevabı hala soruyu yazarken buldum. 7 saat içinde kendime cevap vereceğim (site daha erken yapmama izin vermiyor). O zamana kadar işte bağlantı: marc.info/?l=linux-kernel&m=123606366021995&w=2
Martin von Wittich

Github.com/torvalds/linux/commit/… ' e göre rp_filter mantığı 9 yıl önce değiştirildi. Daha önce ANDed ve MAX olarak değiştirildi.
odivlad

Yanıtlar:


37

Ben hala soruyu yazarken cevabı buldum. Yine de göndermeye karar verdim çünkü diğerleri bunu anlayışlı bulabilir ve sonra kendime cevap verebilir; Umarım bu kaşlarını çatmış değildir :)

Linux-çekirdek e-posta listesindeki Philipp Matthias Hahn kullanıcısı, en azından kısmen :

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.

O kapsamaz accept_raama en azından şimdi nasıl allve defaultçalıştığı ya da daha doğrusu beklediğim gibi nasıl çalışmadıkları açıktır .


3
ve IPv6 şeyler için? örneğin ben use_tempaddrparametre arıyorum ...
mattia.b89

1
rp_filter mantığı 9 yıl önce değiştirildi. Daha önce ANDed ve MAX olarak değiştirildi. Bkz. "{İnterface} 'de kaynak doğrulama yapılırken conf / {all, interface} / rp_filter öğesinden maksimum değer kullanılıyor." içinde git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/... ve github.com/torvalds/linux/commit/... (yoluyla unix.stackexchange.com/a/427455/ 18568 )
Gaia

@Gia Harika bir yorum!
Mvorisek

5

İçin işleyici accept_rain net/ipv6/addrconf.colduğunu proc_dointvec. Yani genel arayüz kodu daha önce bir dizi allve arayüze özgü girdiler sysctlüretti ve bunlara veya procfs ile yazmak sadece dizide belirttiğiniz değeri koyar.

Bu değerlerin daha sonra nasıl kullanıldığı ile ilgileniyoruz

Sen arayanlar göreceksiniz ipv6_accept_ra()işlev include/net/ipv6.hher arayanın o işlevi çağırmak için belirli bir arayüz kullanır.

Bu yüzden, çekirdeğin, net.ipv6.conf.all.accept_rabir procfs girişini depolayabildiğim kadar, görebildiğim kadarıyla hiçbir yerde kullanamadım.

accept_raHer bir arayüzü tek bir komutla değiştirmek isterseniz , bunu yapabilirsiniz:

for TUNABLE in $(sysctl -aN --pattern "accept_ra$")
do
    sysctl -w "$TUNABLE=0"
done

Yaklaşık 4 yıl geciktim ama bu doğru cevap: P


sysctl (procps 3.2.8 sürümü): hata: Bilinmeyen parametre "-aN"
qin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.