Linux 使用无法访问的机器 IP 来缓存路由

Linux 使用无法访问的机器 IP 来缓存路由

我有一个带网关的 VPN 和一个应用服务器。应用服务器只知道 VPN 的网关。VPN 的网关知道虚拟机所托管的物理网络的网关。

问题:我无法从应用服务器访问 api.twitter.com。观察:缓存中充满了显示以下内容的条目物理网关IP 地址。以下是摘录:

ip -s route show cache 199.16.156.40
199.16.156.40 via 37.59.245.62 dev eth0  src 10.1.4.20 
    cache <redirected>  used 170 age 22sec ipid 0x9e49
199.16.156.40 from 10.1.4.20 via 37.59.245.62 dev eth0 
    cache <redirected>  age 25sec ipid 0x9e49

以 199 开头的 IP 是 Twitter IP。37.59.245.62是物理网关的 IP。10.1.4.20是 VPN 网关的 VPN IP。

物理网关的 IP 仅出现在处理 Twitter 服务器的条目中。

为什么这台机器会缓存它无法直接访问的 IP 的路由?

上一个问题表明刷新缓存可以暂时解决问题

答案1

为什么要缓存?在任何其他情况下使用缓存的原因相同,以防止路由查找的开销。您看到“外部”网关的原因很可能是 ICMP 消息返回,通知您该 IP 不可用。

答案2

我问过这个别的地方,事实证明解决方案是关闭 ICMP 重定向。

相关内容