Linux sendet immer eine ICMP-Umleitung

14

Ich habe mehrere Debian Squeeze (6.0.6 auf dem neuesten Stand) als Router verwendet.
Wenn eine Verbindung unterbrochen ist, senden sie ICMP-Weiterleitungen an lokale Hosts. Dies ist das Standardverhalten von Debian und einigen anderen. Sobald die Verbindung wieder hergestellt ist, können die Hosts sie erst nach einem Neustart erreichen.

Ich möchte nicht, dass ICMP-Umleitungen von diesen Routern gesendet werden.

Ich habe getestet echo 0 > /proc/sys/net/ipv4/conf/all/send_redirectsund sysctl -w net.ipv4.conf.all.send_redirects=0und net.ipv4.conf.all.send_redirects=0in /etc/sysctl.d/local.conf
jede dieser Lösungen den richtigen Wert gelegt/proc/sys/net/ipv4/conf/all/send_redirects

Aber ...
der Kernel sendet weiterhin ICMP-Weiterleitungen. 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-Tabelle lokaler Hosts (Windows-Computer) ist verschmutzt.

Das kann ich 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 kann man verhindern, dass ICMP-Umleitungen gesendet werden, ohne Netfilter zu verwenden?

Gregory MOUSSAT
quelle

Antworten:

14

Der richtige Befehl lautet: echo 0 | tee /proc/sys/net/ipv4/conf/*/send_redirects
Weil Sie 0 für 'all' und für 'interface_name' haben müssen, um ihn zu deaktivieren.

In eine /etc/sysctl.confoder eine ähnliche Datei müssen Sie 'all' + 'default' (oder 'all' + 'interface') setzen, aber die Schnittstelle existiert möglicherweise noch nicht, wenn diese Datei verarbeitet wird.

Bertrand SCHITS
quelle
5
Wozu dient dann das Verzeichnis "all"? Ich hatte den vagen Eindruck, es würden die Werte aller anderen Einträge überschrieben?
Elrond,
@Elrond, allüberschreibt nicht, führt bitweise Operationen aus. Sehen Sie diese Antwort über allvs.default . send_redirectsIst ein ORParameter, so wird das Setzen all.send_redirectsauf 0 durch die Einstellung der Schnittstelle übertroffen.
Leif Arne Storset