链路1
Sending, interface = Vlan-interface4011
version = 4, headlen = 20, tos = 0
pktlen = 60, pktid = 61409, offset = 0, ttl = 58, protocol = 6
checksum = 55995, s = 102.106.126.226, d = 54.151.158.30
channelID = 0, vpn-InstanceIn = 0, vpn-InstanceOut = 0.
prompt: Sending IP packet received from interface Route-Aggregation1 at interface Vlan-interface2011.
Payload: TCP
source port = 58612, destination port = 443
sequence num = 0xf1447b01, acknowledgement num = 0x00000000, flags = 0x2
window size = 65535, checksum = 0xe5e1, header length = 40.
链路2
PACKET: (Vlan-interface2021-out-config) Protocol: TCP
102.106.126.226:57943 - 54.151.158.30:10354(VPN: 0) ------>
111.205.49.147:33573 - 54.151.158.30:10354(VPN: 0)
正常的数据匹配源后应该匹配链路1出去,为什么debug的时候能看到在其他接口上做的NAT转换。
54.151.158.30:443),然后抓包或查看会话表(使用 display session table 或类似命令),应该会发现该连接的所有数据包都稳定地从同一个接口(如 Vlan-interface2011)出去。简单来说,您的负载均衡功能工作正常。Debug信息显示了经过不同链路的多个独立网络会话的处理情况,并非同一份数据被复制到了两个接口。
华三 SecPath FW/LB 多出口链路负载均衡,同一五元组 debug 出现两条出口接口完整官方原理 + 故障根因
核心前置结论(官方研发标准逻辑)
正常业务稳定 TCP 会话只会固定走一条链路;你 debug 同时看到两条接口做 NAT 转发,分4 类场景,其中首包预探测复制报文、会话未建立是 90% 现场复现原因,不是业务真的双路同时发数据。
一、场景 1:出站链路负载均衡首包多链路预探测(最高发,匹配你的抓包现象)
底层原理(V7 防火墙链路负载均衡内置机制)
内网 TCP SYN 首包到达防火墙,无对应五元组会话表;
链路负载均衡(LLB)会复制首包 SYN 报文,向所有可用健康链路同时做 NAT 转换、转发探测;
设备同步探测每条链路的时延、丢包、连通性,根据选路算法(带宽比例 / 最小流量 / 最小时延)选出最优链路;
收到任意一条链路的服务器回包 SYN+ACK 后,立即基于该链路创建硬件会话表;
后续所有 TCP 报文只走选中的那条链路,其他链路复制的探测报文直接丢弃,不会转发后续载荷。
对应你日志现象解读
Vlan-interface4011(链路 1):SYN 首包复制探测报文;
Vlan-interface2021(链路 2):同一份 SYN 复制后的另一条探测报文,两条都做了 NAT 转换打印 debug;
真正建立会话后,只有链路 1 持续传输业务数据,链路 2 不会再出现同流报文。
关键区分:探测报文≠业务数据流
复制仅针对TCP 握手首包,数据传输阶段不会复制;debug 看到双出口只是首包探测行为,不会造成业务乱序、断流。
二、场景 2:负载均衡算法配置为per-packet逐包负载(不推荐,会出现持续双路转发)
机制
如果链路负载均衡选路策略配置为按报文分担(per-packet),而非默认按流分担(per-flow):
同一个五元组 TCP 流,每一个报文都会重新哈希选路;
报文交替从两条链路出口,每条报文独立 NAT 转换;
后果:TCP 报文跨链路乱序,服务器大量重传、业务卡顿。
查看 & 修复命令
plaintext
# 查看链路负载均衡选路模式
display load-balance outbound policy
# 修改为标准按流分担(推荐,同流固定一条链路)
load-balance outbound policy LB-OUT
mode per-flow
三、场景 3:会话老化 / 会话表异常,会话断裂重建,两条链路分别承载新旧会话
原有 TCP 会话老化超时、CPU 过高会话表被冲刷、链路健康状态切换;
旧会话走链路 2,会话失效后客户端重新发起 SYN,新会话匹配策略走链路 1;
debug 同时捕获旧会话残留报文 + 新建首包探测报文,看起来同流双出口;
验证:查看会话表,会存在两条同源目五元组、不同出接口的会话(一条老化待删除,一条新建)。
四、场景 4:策略路由 / 静态默认路由与链路负载均衡叠加冲突(路由优先级混乱)
同时配置了:出站链路负载均衡 + 普通策略路由 / 多静态默认路由;
路由优先级冲突:首包匹配 LLB 复制探测,部分报文匹配静态路由从第二条链路转发;
双重选路逻辑叠加,同一流量出现两个出口 NAT。
五、配套验证命令(区分是探测复制还是真的双路转发)
查看当前五元组会话,确认出接口唯一
plaintext
display session table source 102.106.126.226 destination 54.151.158.30
正常只会出现一条会话,出接口为 Vlan-interface4011;若出现两条会话则是会话重建 / 路由冲突。
2. 查看链路负载均衡选路模式
plaintext
display load-balance outbound policy
确认 mode 为per-flow(按流),不是 per-packet。
3. 关闭首包多链路探测(测试验证,业务不推荐长期关闭)
plaintext
load-balance outbound policy LB-OUT
disable multi-link-probe
关闭后再 debug,只会出现一条出口报文,即可验证是首包复制探测导致。
六、极简总结
你当前现象绝大多数是LLB 首包多链路复制探测:仅 SYN 握手首包复制到所有链路做 NAT 探测,建会话后所有业务报文固定走最优链路(链路 1),属于设备正常机制,无需处理;
若业务传输阶段持续出现双出口报文,排查两点:①选路模式为 per-packet 逐包分担;②路由 / 策略路由与 LLB 叠加冲突;
会话老化重建也会短暂出现新旧会话分走两条链路,可缩短会话空闲超时缓解。
暂无评论
根据你提供的 Debug 信息,数据包“走两个接口”的现象,很可能不是同一个数据流被同时复制到了两条链路上,而更像是“异步路由”问题:即去程和回程的数据包走了不同的路径。
Debug 信息也证实了这一点:左侧是链路1(Vlan-interface4011)的原始报文,右侧是链路2(Vlan-interface2021)上经过 NAT 转换后的报文。这说明一个方向的流量走了链路1,而另一个方向的流量(很可能是回程)走了链路2。
这通常是由以下几个原因共同导致的:
当你配置了出方向链路负载均衡后,设备会创建一个特殊的“全0虚服务”(0.0.0.0/0)。它的作用是匹配所有从内到外的流量,并按照负载均衡算法将其分发到不同的外线链路。
这个策略本身没问题,但关键在于它会“一视同仁”地处理所有流量。当外部主动发起的访问(比如你 Debug 中看到的 54.151.158.30 这个外网 IP 访问内网)到达设备时,也会错误地匹配到这个“全0虚服务”,导致设备试图将它也进行负载均衡,从而可能将其从非预期的链路转发出去。
与上述原因相伴的是,出方向负载均衡默认只关心流量从哪个接口出去,不保证这个流量是从哪个接口进来的。这就导致了“来回路径不一致”(即“异步路由”)。
要解决这个问题,关键是在设备上启用“源进源出”(也叫“保持上一跳”)功能。这个功能会强制要求:数据包从哪个接口进来,它的响应数据包就必须从同一个接口出去。
配置方法如下(以 Comware V7 系统为例):
在系统视图下,开启全局“保持上一跳”功能:
(可选)在接口下单独开启:
如果全局命令不生效,或只想对特定接口生效,可以进入相应的外网接口视图:
如果配置了“源进源出”后问题依旧,还可以检查以下几点:
暂无评论
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
暂无评论