内网终端通过公网 IP 访问内网服务器(NAT hairpin),时通时不通。
故障发生时【所有内网网段同时不能访问】,过一段时间后自行恢复,有时候是几十分钟,有时候是一天。
同一时刻:外网访问正常、内网直连服务器正常、其他端口映射正常。
【已排查内容】1. hairpin 配置正常。display nat all 输出:
NAT hairpinning:
Totally 1 interfaces enabled with NAT hairpinning.
Interface: GigabitEthernet1/0/2
Config status: Active
NAT mapping behavior:
Mapping mode : Endpoint-Independent
Config status: Active2. ACL 安全策略、ARP 表项均正常
3. 资源正常:内存使用率 83%、CPU 25~30%
型号:H3C SecPath F1010(8GE,内存 1008MB)
版本:Comware 7.1.064, Release 9660P57
外网口 GE1/0/1:x.x.x.x(公网)
内网口 GE1/0/2:192.168.5.1/24
NAT server:公网 x.x.x.x:7071 → 192.168.5.190:8081
(0)
(0)
已做的排除实验:1、同服务器 8181 映射同时段测试 正常 非服务器/服务问题 2、指向 192.168.5.78 的 4 条映射 正常 非整机 NAT 故障 3、新建 7072 → 192.168.5.190:8081 秒通 新端口映射正常 4、删除并重建 7071 规则 仍不通 坏状态跟随端口号,配置层清不掉 5、服务器本机自访 公网IP:7071 / :8181 7071 不通、8181 通 与源地址无关 6、客户端压测 120 并发 / 2140 新建连接每秒 全部通过 无并发/速率限制 7、服务器 netstat -s / conntrack 无 ListenDrops,conntrack 远未满 服务器侧无瓶颈 8、ACL 3011 / 安全策略 / ARP / ping 服务器 全部正常 策略与二层三层正常 9、display nat statistics Total ~13.7k / EIM ~10k,表可增可减 非会话表撑满 我的猜测 1. NAT 引擎针对个别运行时间较长的 nat server 端口映射进入某种坏死状态(疑似僵尸会话残留且无法被删除重建规则清除),属于固件级 bug 2. hairpin 场景下所有内网用户的源地址被折叠为同一公网 IP,长运行时间累积后触发概率升高
配置没问题的话可能得抓包分析了
(0)
客户端侧(内网 21 网段,Wireshark):故障时发往 X.X.X.X:7071 的全部为 SYN 重传,无任何 SYN-ACK 服务器侧(192.168.5.190,tcpdump): - 故障时:零收到任何经 7071 映射进来的 SYN(防火墙侧丢包,未转发) - 正常时:收到源地址为 X.X.X.X(hairpin 源折叠,符合预期)的 SYN,三次握手正常
客户端侧(内网 21 网段,Wireshark):故障时发往 X.X.X.X:7071 的全部为 SYN 重传,无任何 SYN-ACK 服务器侧(192.168.5.190,tcpdump): - 故障时:零收到任何经 7071 映射进来的 SYN(防火墙侧丢包,未转发) - 正常时:收到源地址为 X.X.X.X(hairpin 源折叠,符合预期)的 SYN,三次握手正常
这种应该是安全策略的问题,没有完全放通。
我之前测试过l2tp,电脑链接上后,ping会出现丢包。安全策略全放开之后,丢包也没了,延迟也小了。
后面通过dis 查看会话,把另外的一部分安全策略补上就好了。
(0)
安全策略无针对该流量的限制,1. 故障时只有这一个端口映射不通: - 同一公网 IP 的其他端口映射(如 8181)正常 - 外网用户访问同一端口正常 - 内网直连服务器 IP:8081 正常 2. 有时可自行恢复(观察到约 17 秒的恢复窗口),有时故障持续一天不自愈
你遇到的这个“所有内网网段同时中断,且能自行恢复”的现象,结合你已排查的结果,问题根源很可能不在 hairpin 配置本身,而在于设备的资源状态或配置冲突。你提供的内存使用率 83% 是一个关键突破口。
你设备的内存(1008MB)使用率达到 83%,这是一个危险信号。H3C 官方建议内存使用率不高于 70%,持续高于 70% 就需要高度关注。
在内存资源紧张时,防火墙的会话表(Session Table) 会变得非常脆弱:
新会话无法建立:内存不足时,设备可能无法为新的 hairpin 访问创建必要的 NAT 会话,导致所有内网用户的访问请求被丢弃。
老会话提前老化或表项错乱:已有的会话可能因内存压力被异常清除或处理错误,造成连接中断。而故障的“自行恢复”,很可能是因为某些占用内存的异常会话或进程被系统回收,暂时释放了资源。
下一步行动:
检查会话表状态:在故障发生时(或平时),执行 display session statistics,查看当前会话总数是否接近设备规格上限。
排查异常会话:执行 display session table verbose,检查是否存在大量半连接(状态为SYN_RCVD) 或永不老化的长连接。误配的会话长连接(session persistent aging-time 0)会导致会话永不释放,持续消耗内存直至耗尽。
定位内存消耗进程:执行 display memory 和 display process memory,确认是哪些进程(如 dpid、iked 等)占用了大量内存。如果开启了 DPI(入侵防御、URL过滤等)功能,可以尝试临时关闭以观察内存是否下降,因为低端防火墙在开启DPI后内存容易飙升。
如果内存问题排除后故障依旧,请检查以下配置冲突点。
1. 全局NAT与接口NAT冲突
这是一个已知的、会导致 hairpin 间歇性失效的经典问题。当防火墙同时配置了全局NAT(nat global-policy) 和接口NAT(如 nat hairpin enable) 时,特定功能(如DPI)的开启可能会改变报文标记,导致全局NAT意外生效,从而破坏 hairpin 的处理流程。
核查方法:执行 display current-configuration | include global-policy,确认是否存在全局NAT策略。如果有,建议移除全局NAT,统一使用接口NAT来实现所有NAT功能。
2. 缺少 nat hairpin server 配置
如果内网终端与内网服务器处于同一网段(例如,终端 192.168.5.100 访问服务器 192.168.5.190),仅配置 nat hairpin enable 可能不够。TCP 三次握手的 SYN-ACK 包可能因路由问题无法正确返回,导致连接时好时坏。
核查方法:确认内网接口下是否配置了 nat hairpin server。如果没有,可以尝试添加此配置。
3. 堆叠环境下的跨框NAT问题(如果适用)
如果你的 F1010 是两台设备堆叠部署的,这是一个已知问题。出问题时,如果只开启了标准的会话同步(session synchronization enable),跨框的NAT流量可能无法正确同步,导致部分访问失败。
解决方案:启用非对称会话同步:session synchronization enable asymmetric。
(0)
nat hairpin server怎么配置
nat hairpin server怎么配置
现象特征:全部内网同时无法通过公网 IP 访问服务器;外网访问正常;内网直连服务器正常;过一段时间自动恢复。 关键点:Hairpin 流量在内网口 GE1/0/2 上,同时做目的 NAT(NAT server)+ 源 SNAT;外网访问只做目的 NAT,不走内网口 SNAT。所以SNAT 端口资源耗尽只会影响 hairpin 内网访问,外网不受影响,完全匹配你的现象。 F1010 硬件内存只有 1GB,当前内存占用 83%,会话表、NAT 端口表资源紧张,是重要诱因。 版本:Release9660P57(老版本,存在 NAT 端口块 / 会话老化相关缺陷)
内网终端访问公网 IP:7071,报文到达 GE1/0/2(内网口,nat hairpin enable):
当公网 IP 的 PAT 端口池耗尽,所有内网 hairpin 新建连接全部失败;老会话还在,等待 TCP 会话老化释放端口,一段时间后自动恢复。这就是 “集体中断,自动恢复” 的典型特征。
#查看NAT地址池/公网IP端口占用
display nat address-group
display nat session verbose | include "Global address"
#查看整机会话数量、会话老化时间
display session table summary
display session aging-time
#查看NAT端口块统计(重点!)
display nat port-block
#查看当前安全策略、NAT server
display nat server
display security-policy rule source-zone trust destination-zone trust
故障发生时:
display nat port-block会看到公网 IP 端口耗尽,没有空闲端口。
不要让 hairpin 流量复用外网出口公网 IP做 SNAT。在内网口单独使用一个内网网段做源转换,不再占用公网 PAT 端口池。
192.168.5.200~192.168.5.210(同内网 5 段,不冲突)好处:hairpin 源转换不再消耗公网 IP 端口,公网端口池只给外网上网使用;hairpin 访问永远不会出现端口耗尽。
默认 TCP 会话老化时间较长,大量闲置会话占用端口。缩短空闲老化,加快端口回收。
system-view
#调整TCP空闲会话老化(单位秒,按需调小)
session aging-time tcp idle 300
session aging-time tcp fin 15
注意:不能调太小,避免业务正常长连接被踢。
F1010 R9660P57 默认开启 nat port-block(端口块),该机制下一个内网主机预先占用一批端口,少量主机就能快速耗尽公网 IP 端口,非常容易出现你这种周期性端口耗尽。
关闭端口块,改用传统 PAT,端口按需分配,不会一次性预占用大量端口。
system-view
undo nat port-block enable
save
⚠️关闭端口块需要重启防火墙生效,业务中断。
display security-policy rule source-zone trust destination-zone trust
Endpoint-Independent当前配置没问题,不需要修改。Release9660P57 是 F1010 老版本,存在 NAT 端口块、会话表资源相关已知问题。临时优化完成后,长期建议升级到推荐稳定基线版本,修复底层 NAT 表项回收 BUG。
故障发生时,在外网终端访问 7071 端口:正常。内网全部终端访问公网 IP:7071 失败。 此时在防火墙执行:
display nat session
看不到新创建 hairpin 会话,display nat port-block公网 IP 端口耗尽 → 确认是公网 PAT 端口池耗尽。
故障发生时,可以执行reset session table清空所有会话,立刻释放 NAT 端口,业务马上恢复;但治标不治本,后续还会复现。
重要提醒:reset session table 会清空所有业务会话,所有业务连接断开,仅应急使用。
(0)
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
已做的排除实验:1、同服务器 8181 映射同时段测试 正常 非服务器/服务问题 2、指向 192.168.5.78 的 4 条映射 正常 非整机 NAT 故障 3、新建 7072 → 192.168.5.190:8081 秒通 新端口映射正常 4、删除并重建 7071 规则 仍不通 坏状态跟随端口号,配置层清不掉 5、服务器本机自访 公网IP:7071 / :8181 7071 不通、8181 通 与源地址无关 6、客户端压测 120 并发 / 2140 新建连接每秒 全部通过 无并发/速率限制 7、服务器 netstat -s / conntrack 无 ListenDrops,conntrack 远未满 服务器侧无瓶颈 8、ACL 3011 / 安全策略 / ARP / ping 服务器 全部正常 策略与二层三层正常 9、display nat statistics Total ~13.7k / EIM ~10k,表可增可减 非会话表撑满 我的猜测 1. NAT 引擎针对个别运行时间较长的 nat server 端口映射进入某种坏死状态(疑似僵尸会话残留且无法被删除重建规则清除),属于固件级 bug 2. hairpin 场景下所有内网用户的源地址被折叠为同一公网 IP,长运行时间累积后触发概率升高