我想查看在收到 ICMP 重定向时 Linux 系统上的路由表如何变化。为此,我使用
icmpush -v red -sp current-gateway -gw new-gateway -dest google.com -c host -prot tcp my-eth1-ip-address
(返回成功),但结果
route -n
保持不变。当然,我已经检查了
cat /proc/sys/net/ipv4/conf/eth1/accept_redirects
即1.这是一台Ubuntu 12机器,具有最新的稳定版本内核,没有安装防火墙。
那么问题是:可能出了什么问题?
答案1
根据文档/网络/ip-sysctl.txt,默认情况下,仅接受路由表中已列出的网关的重定向。
secure_redirects - 布尔值 仅接受网关的 ICMP 重定向消息, 列在默认网关列表中。 如果至少有一个 conf/{all,interface}/secure_redirects 设置为 TRUE, 否则将被禁用 默认 TRUE
答案2
假设: 的调用icmpush
不使用外部接口eth1
,而是使用本地主机接口lo
,因此内核无法识别它是来自网关的正确重定向。此外,在非常老版本的 Linux 内核中,这些路由未显示在 的响应中route -n
。正如我所指出的, 的响应route -nC
可能是包含临时重定向路由的正确方法。
@grawity,关于接受回复另一个数据包而发送的重定向:你在某处读过这个吗?因为我对此真的很感兴趣。