我有几个 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
或类似文件中,您必须设置“全部”+“默认”(或“全部”+“接口”,但处理此文件时接口可能不存在)。