Fortigate“记住”坏路线

网络工程 虚拟专用网 网络安全 加强 堡垒
2021-07-31 06:56:07

我是 Fortinet 设备的新手,所以如果我犯了新手错误,请告诉我。

我有一个 FortiGate 90D (v5.2.5,build701),它有一个 IPSec 站点到站点 VPN 连接到另一个防火墙,我可以通过 VPN 访问节点。我有一个静态路由,可以通过 VPN 转发 VPN 另一端的子网流量。我可以执行 traceroute 并查看流量先到达 FortiGate,然后再通过 VPN。

如果 VPN 出现故障,FortiGate 开始通过其公共 IP 将流量路由到互联网,并在那里停止(如预期的那样)。

但是,一旦 VPN 恢复正常,任何最近尝试通过 VPN 发送流量的主机将继续将其流量发送到 Internet,而其他主机(在同一子网中)的流量将通过 VPN 路由。就好像 FortiGate 记得某些主机以前是通过 Internet 路由的,而任何新流量都通过 VPN 正确路由。这种情况一直存在,直到我重新启动通过 Internet 路由其流量的主机。

有人可以告诉我这是怎么回事吗?

1个回答

首先,这种行为符合预期。

Fortigate(作为状态防火墙)将根据第一个到达的数据包的信息创建一个会话。它将确定要应用的路由以及是否允许转发。在这些决定之后,属于同一会话的后续流量将被转发,而无需做出任何进一步的决定。(顺便说一句,在 Fortinet 防火墙中,此时建立的会话确实从 CPU 卸载到网络处理 ASIC - 这无法查找路由或策略。即使流量没有卸载,该原则也适用。)

现在,当隧道关闭时,经过的路由会从路由表中删除,VPN 会话也会被删除。通往专用网络的下一个最佳路由通常是默认路由,因此对于目的地为隧道后面网络的到达流量,将创建新会话并将其路由出 WAN 接口(希望它们在下一个路由器处被丢弃)。

当隧道再次出现时,新会话会正确路由并跨隧道转发,因为它们的第一个数据包触发了我上面提到的决策。现有会话不受影响——这意味着每次更改路由表时,如果有比以前更好的路由,FGT 将不得不重新评估每个会话。这至少是行不通的。流量将遵循“错误”的路线,直到会话超时。

这种情况有一个简单的解决方法:在 FGT 上为您可能在 VPN 隧道后面使用的所有私有 RFC1918 网络创建静态黑洞路由,其中​​ 192.168.xx/24、172.16.xy/16 和 10.xyz/8 是最受欢迎。您需要将这些黑洞路由的距离参数设置为 254,以在其他预期路由存在时使它们保持不活动状态。诀窍是对于黑洞路由,FGT 不会创建会话。所以当隧道关闭并且隧道路由被丢弃时,使用黑洞路由——数据包将被立即丢弃。每个到达的数据包都会触发会话建立和路由决策,并最终在它再次出现后立即通过隧道转发。

在 Fortinet 支持论坛中,您会找到几个解释这一点的主题。这篇文章提供了一个准备好导入所有 RFC1918 黑洞路由的批量命令文件:https : //forum.fortinet.com/FindPost/120872