hello,我是网工小陈。
在不少网络架构中,防火墙和路由器都会提供 NAT(网络地址转换)功能。

很多人以为——“反正都能 NAT,多做一层没事”。
实际上,这种“双 NAT”配置在某些场景下会引发一系列让人抓狂的网络问题,尤其是排障时经常被忽视。
今天我们就来彻底分析一下:
当防火墙和路由器同时做 NAT,会出现哪些坑?为什么会出坑?怎么避免?
文章目录
2. 场景设定
假设一个常见的中小企业出口架构:
内网 → 防火墙(NAT) → 路由器(NAT) → 运营商 → 互联网
内网地址:192.168.0.0/24 防火墙外网口地址:10.10.10.2(私网) 路由器内网口地址:10.10.10.1 路由器外网口地址:203.1.1.2(公网)
在这个架构下:
防火墙把内网 192.168.0.x 转成 10.10.10.2 路由器再把 10.10.10.2 转成 203.1.1.2
3. NAT 基本原理回顾
3.1 源地址转换(SNAT)
将数据包的源地址转换为另一个地址,常用于内网访问外网。
3.2 目的地址转换(DNAT)
将数据包的目的地址转换为另一个地址,常用于外网访问内网服务器。
3.3 NAT 表的匹配
NAT 设备会维护一个转换表(会话表),记录内网 IP:端口 ↔ 外网 IP:端口的对应关系。 会话一旦超时或重置,映射关系就消失。
4. 双 NAT 常见坑
4.1 回包路径不一致(Asymmetric Routing)
当外网设备回包时,如果绕过了其中一个 NAT 设备(例如有另一条链路),会导致 NAT 表找不到映射,包直接被丢弃。
典型场景:
路由器多出口策略路由 防火墙多条上行链路
4.2 端口映射冲突
如果防火墙和路由器都做了 DNAT:
防火墙:203.1.1.2:80 → 192.168.0.100:80 路由器:也有端口映射规则 这可能导致路由器和防火墙的 NAT 规则冲突,外部请求根本到不了内网主机。
4.3 会话超时不同步
防火墙 NAT 会话表超时时间可能比路由器短(或长)。
如果防火墙 NAT 会话先消失,而路由器 NAT 还保留,回包就无法匹配,连接断开。 反之亦然。
4.4 抓包定位困难
双 NAT 后抓包时看到的 IP 并不是真实源 IP,需要倒推两层才能还原真实通信双方。
内网抓到是内网 IP → 防火墙外网 IP 路由器外网抓到是路由器外网 IP → 互联网 IP排障时会让运维迷路。
4.5 应用层协议问题
某些应用协议(如 FTP、SIP、H.323、IPSec)会在数据包里嵌入 IP 地址。
如果经过两层 NAT,没有正确开启 ALG(Application Layer Gateway)功能,协议会解析失败。
5. 案例分析
案例 1:双 NAT 导致 VPN 频繁断线
某公司部署了 SSL VPN,服务器在内网,公网用户通过防火墙映射访问。
架构:
内网 VPN Server (192.168.0.10)
→ 防火墙(SNAT/DNAT)
→ 路由器(SNAT)
→ 互联网现象: 公网用户可以连接 VPN,但每隔 10 分钟就断一次,需要重新连接。
排查过程:
VPN 日志显示“Peer disconnected”。 防火墙 NAT 表超时时间 600 秒,而路由器 NAT 表超时时间是 1800 秒。 当防火墙 NAT 映射消失后,VPN 数据包回到防火墙时无法匹配 NAT 表,被直接丢弃。
解决方案:
调整防火墙 NAT 会话超时时间 ≥ 路由器超时时间,保持同步,或将 VPN 端口直接透传到路由器,减少一层 NAT。
案例 2:双 NAT 导致公网访问 Web 服务失败
客户内部有一台 Web 服务器,需要公网访问。
架构:
Web Server (192.168.0.20:80)
→ 防火墙(DNAT: 203.1.1.2:80 → 192.168.0.20:80)
→ 路由器(SNAT 10.10.10.2 → 203.1.1.2)现象: 内网访问正常,公网访问不通。
排查过程:
外部抓包发现能到路由器,但回包丢失。 路由器没有做 DNAT,只是将 203.1.1.2 转成 10.10.10.2,但回包没有正确返回外网。 由于两层 NAT 对应关系不一致,回包路径中断。
解决方案:
让路由器直接做 DNAT(公网→内网服务器),防火墙仅做安全策略,不做 NAT。
6. 规避方案
减少 NAT 层数
能在一台设备完成的 NAT,就不要两台设备重复做。 如果防火墙和路由器同时存在,建议只保留一处 NAT 功能。
统一 NAT 会话超时时间
如果不得不双 NAT,确保两台设备的 NAT 超时时间一致或路由器 ≥ 防火墙。
端口映射集中管理
所有 DNAT 规则最好集中在出口设备管理,减少配置冲突。
为特殊协议启用 ALG
FTP、SIP、H.323、IPSec 等需确保两台设备的 ALG 功能配置正确,否则会话建立失败。
抓包时定位 NAT 位置
分别在内网、防火墙外网口、路由器外网口抓包对比,找出丢包的 NAT 节点。
7. 总结
防火墙和路由器同时做 NAT,看似只是多一步地址转换,实际上会引入会话不同步、路径不一致、端口冲突等问题,尤其在公网访问、VPN、语音视频等业务中风险更高。
在设计网络时,应优先考虑:
最少 NAT 原则:减少不必要的地址转换环节。 出口一致性:确保回包路径与 NAT 会话匹配。 配置集中化:统一管理 NAT 策略,降低出错概率。
否则,即使网络表面 Ping 得通,业务依然可能“断断续续”甚至完全不可用。

发表回复