Linuxは常にICMPリダイレクトを送信します。

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リダイレクトが送信されるのを防ぐ方法は何ですか?

ベストアンサー1

正しいコマンドは次のとおりです。echo 0 | tee /proc/sys/net/ipv4/conf/*/send_redirects
無効にするには、「all」と「interface_name」に0が必要です。

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

おすすめ記事