Di sysctl, yang /proc/sys/net/ipv[46]/conf/
kunci memiliki subkunci berikut: all
, default
, dan kunci untuk setiap antarmuka jaringan. Misalnya, pada mesin dengan antarmuka jaringan tunggal eth0, akan terlihat seperti ini:
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/
Semua pengaturan masing-masing ada di setiap tombol secara terpisah. Sebagai contoh, jika saya ingin menonaktifkan Iklan Router IPv6 denganaccept_ra
nilai, nilai ini ada empat kali:
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
Pertanyaan saya sekarang adalah: nilai-nilai manakah yang perlu saya ubah? Saya pikir all
(untuk mengubah semua antarmuka yang ada) dan default
(untuk mengubah semua antarmuka baru yang mungkin muncul kemudian), tetapi mengubah ini masih meninggalkan nilai pada 1 untuk lo dan 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
Akankah mesin sekarang menerima Iklan Router pada eth0, atau tidak?
Jawaban:
Saya telah menemukan jawabannya ketika masih menulis pertanyaan. Saya tetap memutuskan untuk mempostingnya karena orang lain mungkin menemukan wawasan ini, dan kemudian menjawabnya sendiri; Saya harap ini tidak disukai :)
Pengguna Philipp Matthias Hahn di milis linux-kernel telah menemukan jawabannya setidaknya sebagian :
Dia tidak membahas
accept_ra
tetapi setidaknya sekarang jelas bagaimanaall
dandefault
bekerja, atau lebih tepatnya, bagaimana mereka tidak bekerja seperti yang saya harapkan.sumber
use_tempaddr
parameter ...Pawang untuk
accept_ra
masuknet/ipv6/addrconf.c
adalahproc_dointvec
. Jadi kode antarmuka generik sebelumnya telah menghasilkan sebuah array dariall
dan entri khusus antarmuka, dan menulis kesysctl
dalamnya dengan atau procfs hanya menempatkan nilai yang Anda tentukan dalam array.Kami prihatin dengan bagaimana nilai-nilai itu kemudian digunakan
Anda akan melihat dari penelepon
ipv6_accept_ra()
fungsiinclude/net/ipv6.h
bahwa setiap penelepon menggunakan antarmuka spesifik untuk memanggil fungsi itu.Jadi tidak ada tempat di kernel yang
net.ipv6.conf.all.accept_ra
pernah digunakan kecuali untuk menyimpan entri procfs, sejauh yang saya bisa lihat.Jika Anda ingin mengubah
accept_ra
setiap antarmuka dengan satu perintah, Anda dapat melakukan ini:Saya terlambat sekitar 4 tahun tetapi ini adalah jawaban yang benar: P
sumber