防火墙来回路径不一致导致的业务异常
案例拓扑:
拓扑描述:
服务器有2块网卡,内网网卡2.2.2.1/24 网关2.2.254 提供内网用户访问;
外网网卡1.1.1.1/24,外网网关1.1.1.254 80端口映射到公网
这个时候服务器有2条默认路由,分布是0.0.0.0 0.0.0.0 1.1.1254 以及 0.0.0.0 0.0.0.0 2.2.2.254 走负载均衡
用户通过1.1.1.1 公网地址访问服务器,服务器有一定的几率通过2.2.2.254这条默认路由回复,这个时候就导致了流量来回路径在同一台设备上不一致。
此次设备是一台奇安信防火墙,给出如下提示:未命中会话丢包数显著增加
会话是绑定接口的,那么很显然来回路径不一致会导致匹配不到接口下观察到的会话,导致随机的丢包。
当服务器将内网网卡的默认网关删除,并采用明细路由后故障解除。
其他厂家也有一些说法比如:
- 问题定义与表现
来回路径不一致:指数据包进入和离开防火墙时经过不同路径(如流量从接口1出、接口2回),导致防火墙无法正确匹配会话状态。
半会话问题:当路径不一致时,防火墙仅记录单向会话(如仅记录请求方向),回程数据因未匹配会话表被丢弃,表现为TCP连接异常(如第三次握手失败)、ICMP部分丢包或应用访问缓慢。
半会话问题一般常见于2台防火墙,分别串联在2条二层聚合链路上做HA的情况。 - 主要原因
路由规划不合理:网络中存在多路径但未配置对称路由,导致往返路径分离。
防火墙严格模式限制:默认状态下,防火墙要求会话状态严格匹配(如华为需检查会话链路状态,华三默认严格模式),非对称路径触发丢包。
安全策略缺陷:回程方向未配置匹配策略(防火墙优先依赖会话表,但半会话无法生成完整会话记录)。 - 解决方案
调整防火墙模式:
华为设备:关闭会话状态检测(undo firewall session link-state check)。
华三设备:切换为宽松模式(session state-machine mode loose),允许非对称路径通过。
注意:宽松模式可能降低安全性,建议优先优化组网。
临时策略调整:手动放行回程方向的安全策略,确保数据包不被阻断。
原进原出功能:若使用接口地址做SNAT或DNAT,需在接口启用原进原出(华为设备)。 - 诊断方法
基础测试:通过ping和traceroute检查路径对称性,但需注意ICMP可能被放行而掩盖问题。
高级工具:抓包分析TCP握手过程,或通过telnet测试应用端口连通性,结合防火墙会话表排查半会话记录。 - 长期优化建议
规范组网设计:避免多路径冗余导致非对称路由,确保往返路径一致。
会话持久化配置:部分设备支持会话绑定(如固定下一跳),减少路径波动影响。
关键总结:半会话问题本质是防火墙状态检测机制与路径不对称的冲突,需权衡安全性与可用性选择解决方案。优先通过路由优化根治,次选防火墙模式调整。