web-dev-qa-db-ja.com

Linuxは常にICMPリダイレクトを送信する

いくつかのDebian Squeeze(最新の6.0.6)をルーターとして使用しています。
リンクがダウンすると、ローカルホストにICMPリダイレクトを送信します。これは、Debianおよびその他のいくつかのデフォルトの動作です。したがって、リンクが復旧すると、ホストは再起動するまでリンクに到達できません。

これらのルーターからICMPリダイレクトを送信したくありません。

私はテストしたecho 0 > /proc/sys/net/ipv4/conf/all/send_redirectsおよびsysctl -w net.ipv4.conf.all.send_redirects=0と入れてnet.ipv4.conf.all.send_redirects=0から/etc/sysctl.d/local.conf
これらのソリューションのすべてが正しい値を/proc/sys/net/ipv4/conf/all/send_redirects

だが...
カーネルはICMPリダイレクトを送信し続けます。再起動後でも:

$ 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

また、ローカルホスト(Windowsコンピューター)のルーティングテーブルが汚染されています。

これをnetfilterで防ぐことができます:
iptables -t mangle -A POSTROUTING -p icmp --icmp-type redirect -j DROP

通常の方法が機能しない理由について何か考えはありますか?
そして、netfilterを使用せずに、ICMPリダイレクトが送信されるのを防ぐ方法は?

14
Gregory MOUSSAT

正しいコマンドは:echo 0 | tee /proc/sys/net/ipv4/conf/*/send_redirects
無効にするには、「all」と「interface_name」に0が必要なため。

/etc/sysctl.confまたは同様のファイルでは、「すべて」+「デフォルト」(または「すべて」+「インターフェース」を設定する必要がありますが、このファイルを処理するときにインターフェースがまだ存在していない可能性があります)。

14
Bertrand SCHITS