Linux selalu mengirim pengalihan ICMP

14

Saya memiliki beberapa Debian Squeeze (6.0.6 yang terkini) yang digunakan sebagai router.
Ketika sebuah tautan sedang down, mereka mengirim pengalihan ICMP ke host lokal. Ini adalah perilaku default Debian dan beberapa lainnya. Jadi, sekali tautan hidup kembali, tuan rumah tidak dapat mencapainya sampai reboot.

Saya tidak ingin ada pengalihan ICMP untuk dikirim dari router tersebut.

Saya menguji echo 0 > /proc/sys/net/ipv4/conf/all/send_redirectsdan sysctl -w net.ipv4.conf.all.send_redirects=0dan memasukkan net.ipv4.conf.all.send_redirects=0ke dalam /etc/sysctl.d/local.conf
Setiap solusi tersebut memberikan nilai yang benar/proc/sys/net/ipv4/conf/all/send_redirects

Tapi ...
kernel terus mengirim pengalihan ICMP. Bahkan setelah reboot:

$ tcpdump -n -i eth0
00:56:17.186995 IP 192.168.0.254 > 192.168.0.100: ICMP redirect 10.10.13.102 to host 192.168.0.1, length 68

Dan tabel routing host lokal (komputer Windows) tercemar.

Saya dapat mencegah ini dengan netfilter:
iptables -t mangle -A POSTROUTING -p icmp --icmp-type redirect -j DROP

Adakah yang tahu mengapa metode yang biasa tidak berhasil?
Dan bagaimana mencegah pengalihan ICMP untuk dikirim, tanpa menggunakan netfilter?

Gregory MOUSSAT
sumber

Jawaban:

14

Perintah yang benar adalah: echo 0 | tee /proc/sys/net/ipv4/conf/*/send_redirects
Karena Anda harus memiliki 0 pada 'semua' dan 'interface_name' untuk menonaktifkannya.

Ke dalam /etc/sysctl.confatau file serupa, Anda harus mengatur 'semua' + 'default' (atau 'semua' + 'antarmuka' tetapi antarmuka mungkin belum ada saat file ini diproses).

SCHITS Bertrand
sumber
5
Apa gunanya direktori "semua" itu? Saya memiliki kesan yang kabur, itu akan menimpa nilai dari semua entri lainnya?
Elrond
@ Elond, alltidak menimpa, ia melakukan operasi bitwise. Lihat jawaban ini sekitar allvsdefault . send_redirectsadalah ORparameter, jadi pengaturan all.send_redirectske 0 akan dikalahkan oleh pengaturan antarmuka.
Leif Arne Storset