防火墙和路由器同时做 NAT,会有哪些坑?

小陈 的头像

0 评论

16 阅读

2,461 字,阅读时间 12 分。

hello,我是网工小陈。

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

防火墙和路由器同时做 NAT,会有哪些坑?_img_1

很多人以为——“反正都能 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 分钟就断一次,需要重新连接。

  • 排查过程:

  1. VPN 日志显示“Peer disconnected”。
  2. 防火墙 NAT 表超时时间 600 秒,而路由器 NAT 表超时时间是 1800 秒。
  3. 当防火墙 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)
    • 现象: 内网访问正常,公网访问不通。

    • 排查过程:

    1. 外部抓包发现能到路由器,但回包丢失。
    2. 路由器没有做 DNAT,只是将 203.1.1.2 转成 10.10.10.2,但回包没有正确返回外网。
    3. 由于两层 NAT 对应关系不一致,回包路径中断。
  • 解决方案:

    让路由器直接做 DNAT(公网→内网服务器),防火墙仅做安全策略,不做 NAT。


  • 6. 规避方案

    1. 减少 NAT 层数

    • 能在一台设备完成的 NAT,就不要两台设备重复做。
    • 如果防火墙和路由器同时存在,建议只保留一处 NAT 功能。
  • 统一 NAT 会话超时时间

    • 如果不得不双 NAT,确保两台设备的 NAT 超时时间一致或路由器 ≥ 防火墙。
  • 端口映射集中管理

    • 所有 DNAT 规则最好集中在出口设备管理,减少配置冲突。
  • 为特殊协议启用 ALG

    • FTP、SIP、H.323、IPSec 等需确保两台设备的 ALG 功能配置正确,否则会话建立失败。
  • 抓包时定位 NAT 位置

    • 分别在内网、防火墙外网口、路由器外网口抓包对比,找出丢包的 NAT 节点。

    7. 总结

    防火墙和路由器同时做 NAT,看似只是多一步地址转换,实际上会引入会话不同步、路径不一致、端口冲突等问题,尤其在公网访问、VPN、语音视频等业务中风险更高。

    在设计网络时,应优先考虑:

    • 最少 NAT 原则:减少不必要的地址转换环节。
    • 出口一致性:确保回包路径与 NAT 会话匹配。
    • 配置集中化:统一管理 NAT 策略,降低出错概率。

    否则,即使网络表面 Ping 得通,业务依然可能“断断续续”甚至完全不可用。

    防火墙和路由器同时做 NAT,会有哪些坑?_img_2

    网络工程师必备资料领取

    防火墙和路由器同时做 NAT,会有哪些坑?_img_3
    添加小陈,无偿分享资料
    (回复稍慢请见谅,在当牛马)


    免责声明:本文内容来源于:

    微信公众号

    网络工程师小陈

    ,原文链接:

    http://mp.weixin.qq.com/s?__biz=Mzk0OTc0MzYxNA==&mid=2247485912&idx=1&sn=2b271973ebc78bec9737b8c01ac8c35e&chksm=c352f349f4257a5f449e54466ae7d472aa4e306ce94be5dfa9d87fcc9c1c2720c894089d291e#rd

    本站为个人站点,相关文章均为网络公开资料,仅出于个人学习、研究及资料整理之用途转载收集,所有版权均归原作者及原发布平台所有。文末作者信息仅用于进行本站文章的分类信息使用,不代表原作者授权或者原作者入驻等依据。
    本站不保证内容的完整性与准确性,亦不对内容承担任何法律责任。 如本文涉及版权问题,请原作者及时与我们联系,我们将在第一时间内进行删除处理。 本站尊重并遵守相关版权法规,倡导合法使用网络资源。 联系方式:[email protected]

    小陈 的头像

    60篇作品

    934总阅读量

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注

    更多文章

    网工通信弱电的宝藏知识网站