Linux总是发送ICMP重定向


14

我有几个Debian Squeeze(最新版本6.0.6)用作路由器。
当链接断开时,它们将ICMP重定向发送到本地主机。这是Debian和其他几种的默认行为。因此,一旦链接恢复正常,主机必须重新启动才能访问它。

我不希望从这些路由器发送任何ICMP重定向。

我测试echo 0 > /proc/sys/net/ipv4/conf/all/send_redirectssysctl -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重定向?

Answers:


14

正确的命令是:echo 0 | tee /proc/sys/net/ipv4/conf/*/send_redirects
因为您必须在'all'和'interface_name'上将其禁用为0。

/etc/sysctl.conf文件或类似文件中,您必须设置“全部” +“默认”(或“全部” +“接口”,但是处理此文件时该接口可能不存在)。


5
那么“所有”目录的意义是什么?我有一个模糊的印象,它会覆盖所有其他条目的值吗?
Elrond 2015年

@Elrond,all不覆盖,它按位进行操作。参见有关allvs的答案defaultsend_redirectsOR参数,因此设置all.send_redirects为0将被接口的设置胜过。
Leif Arne Storset
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.