Ich habe mehrere Debian Squeeze (6.0.6 aktuell) als Router verwendet.
Wenn ein Link ausgefallen ist, senden sie ICMP-Weiterleitungen an lokale Hosts. Dies ist das Standardverhalten von Debian und mehreren anderen. Sobald der Link wieder zum Leben erweckt wird, können die Hosts ihn bis zum Neustart nicht mehr erreichen.
Ich möchte nicht, dass ICMP-Weiterleitungen von diesen Routern gesendet werden.
Ich habe echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
getestet und sysctl -w net.ipv4.conf.all.send_redirects=0
und Setzen von net.ipv4.conf.all.send_redirects=0
in /etc/sysctl.d/local.conf
Jede dieser Lösungen fügt den richtigen Wert in /proc/sys/net/ipv4/conf/all/send_redirects
ein
Aber…
der Kernel sendet weiterhin ICMP-Umleitungen. Auch nach einem Neustart :
$ 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
Und die Routing-Tabellen lokaler Hosts (Windows-Computer) sind verschmutzt.
Ich kann dies mit netfilter verhindern:iptables -t mangle -A POSTROUTING -p icmp --icmp-type redirect -j DROP
Irgendeine Idee, warum die übliche Methode nicht funktioniert?
Und wie man verhindert, dass eine ICMP-Umleitung gesendet wird, ohne Netfilter zu verwenden?
Akzeptierte Antwort:
Der richtige Befehl lautet:echo 0 | tee /proc/sys/net/ipv4/conf/*/send_redirects
Weil Sie 0 auf „all“ und auf „interface_name“ haben müssen, um es zu deaktivieren.
In /etc/sysctl.conf
oder einer ähnlichen Datei, müssen Sie „all“ + „default“ (oder „all“ + „interface“, aber die Schnittstelle ist möglicherweise noch nicht vorhanden, wenn diese Datei verarbeitet wird).