第204篇:NAT 在防火墙上的实现差异

关键词:NAT、SNAT、DNAT、Easy-IP、NAPT、地址复用、防火墙NAT、端口复用、NAT Server

一、引言

网络地址转换(NAT)最初的设计目标是缓解 IPv4 地址短缺问题,将私有地址映射为公网地址以实现内网主机访问互联网。但随着技术的发展,NAT 在防火墙上已演变为一项综合的地址转换工具,承载了远超"地址节省"的安全和业务功能。

在路由器上,NAT 通常仅做简单的地址替换;而在防火墙上,NAT 与安全策略、会话跟踪、ALG、地址对象等模块深度耦合,形成了更为复杂的处理逻辑。理解 NAT 在防火墙上的实现差异,是正确配置防火墙和排查 NAT 相关故障的前提。

二、核心概念

2.1 NAT 的基本分类

NAT 类型 方向 作用 典型场景
SNAT(源地址转换) 内→外 将内网源地址替换为防火墙外网地址 内网访问互联网
DNAT(目的地址转换) 外→内 将外网目的地址替换为内网服务器地址 对外发布服务器
Easy-IP 内→外 使用出接口 IP 作为转换地址(无需地址池) PPPoE/动态IP拨号
NAPT(端口复用) 内→外 IP+端口双重复用,支持大量内网主机共享一个公网IP 最常用的NAT方式

2.2 防火墙 NAT 与普通路由器的关键差异

防火墙上的 NAT 实现与普通路由器有本质不同:

差异一:NAT 与安全策略的联动

在防火墙上,NAT 发生在安全策略匹配之后、会话创建之前。NAT 转换后的地址会更新五元组,进而影响会话表项的记录。这意味着:

  • 安全策略中配置的地址对象需要与 NAT 的转换顺序匹配
  • 策略匹配使用的是 NAT 转换前的原始地址还是转换后的地址,取决于 NAT 策略的应用阶段

差异二:NAT 会话与业务会话的关系

防火墙为 NAT 创建了独立的 NAT 会话表项,与业务会话表项相关联: - NAT 会话记录地址转换映射关系(内网IP:端口 ↔ 外网IP:端口) - 业务会话记录连接状态(五元组+TCP状态) - 两者通过内部指针关联,形成完整的转发决策链

差异三:地址池管理

防火墙的地址池支持更精细的管理: - 按接口/地址段划分地址池 - 地址池命中策略(轮询/源IP哈希/端口哈希) - 地址池使用率监控和告警

2.3 NAT 在防火墙数据流中的位置

NAT 在防火墙数据流中的位置 - 图示

三、技术细节

3.1 防火墙 NAT 处理阶段

华为防火墙的 NAT 处理分为两个阶段:

出方向(Inbound → Outbound): 1. 数据包到达入接口 2. 安全策略匹配(使用原始五元组) 3. NAT 策略匹配(出方向 SNAT/Easy-IP) 4. 地址转换,更新源 IP 和端口 5. 更新后的五元组用于路由查找和会话创建

入方向(Outbound → Inbound): 1. 响应数据包到达出接口 2. NAT 反向匹配(根据 NAT 会话表恢复原始地址) 3. 安全策略匹配(使用还原后的五元组) 4. 转发到内网

3.2 地址复用算法

当多个内网主机共享一个公网 IP 时,防火墙需要为每个连接分配唯一的公网端口。华为防火墙支持以下端口复用算法:

算法 原理 优点 缺点
轮询分配 按顺序分配端口号 分布均匀 并发高时端口耗尽快
源 IP 哈希 根据源 IP 哈希选择端口范围 同IP连接端口集中 可能分布不均
源端口哈希 根据源端口哈希分配 保持源端口一致性 冲突概率高

3.3 NAT Server(端口映射)的原理

NAT Server 是实现对外发布服务器的核心功能,它的工作流程:

  1. 管理员配置将公网地址的特定端口映射到内网服务器的私有地址和端口
  2. 外部用户访问公网地址的映射端口时,防火墙自动将目的 IP 和端口替换为内网服务器地址
  3. 返回流量通过 NAT 会话表自动还原

NAT Server 的配置优先级高于普通的地址池 NAT,确保对外发布的流量优先命中端口映射规则。

四、实战配置/案例分析

4.1 内网访问互联网(Easy-IP + NAPT)

# 场景:内网 10.1.0.0/16 通过防火墙访问互联网
# 防火墙外网口为 PPPoE 拨号,获取动态公网IP

# ============================================
# 步骤1:PPPoE 拨号接口
# ============================================
interface Dialer 1
 link-protocol ppp
 ppp auth-mode chap
 ppp chap password cipher Huawei@123
 ip address negotiated
 dialer bundle 1
 quit

interface GigabitEthernet 0/0/0
 description WAN-PPPoE
 pppoe-client dialer-bundle number 1
 quit

# ============================================
# 步骤2:配置NAT outbound(Easy-IP)
# ============================================
nat-policy
 rule name NAT_Outbound
  source-zone trust
  destination-zone untrust
  source-address 10.1.0.0/16
  action source-nat easy-ip
 quit

4.2 对外发布 Web 服务器(NAT Server)

# 场景:将公网IP 203.0.113.2 的80/443端口映射到内网Web服务器 10.1.100.50

# ============================================
# NAT Server 配置
# ============================================
# TCP 80 端口映射
nat server protocol tcp global 203.0.113.2 80 inside 10.1.100.50 80
# TCP 443 端口映射
nat server protocol tcp global 203.0.113.2 443 inside 10.1.100.50 443

# ============================================
# 对应的安全策略(允许外网访问DMZ)
# ============================================
security-policy
 rule name Allow_Web_Server
  source-zone untrust
  destination-zone dmz
  destination-address 10.1.100.50
  action permit
  service http https
  log-action enable
 quit

4.3 多地址池 NAT 配置

# 场景:企业有多个公网IP段,按部门分配不同地址池

# ============================================
# 地址池定义
# ============================================
nat address-group Sales_Pool
 section 0 203.0.113.10 203.0.113.20
 quit

nat address-group Finance_Pool
 section 0 203.0.113.30 203.0.113.40
 quit

# ============================================
# NAT策略
# ============================================
nat-policy
 # 销售部使用Sales地址池
 rule name NAT_Sales
  source-zone trust
  destination-zone untrust
  source-address 10.1.10.0/24
  action source-nat address-group Sales_Pool
 quit

 # 财务部使用Finance地址池
 rule name NAT_Finance
  source-zone trust
  destination-zone untrust
  source-address 10.1.20.0/24
  action source-nat address-group Finance_Pool
 quit

 # 其他部门使用Easy-IP
 rule name NAT_Others
  source-zone trust
  destination-zone untrust
  source-address 10.1.0.0/16
  action source-nat easy-ip
 quit

4.4 故障案例:NAT 转换后策略不匹配

故障现象:配置了 NAT 地址池后,内网主机能 ping 通公网地址,但 Web 浏览异常,页面无法加载。

排查过程:

  1. 检查 NAT 会话:
display nat session all
# 输出显示SNAT转换正常,内网IP正确映射到地址池IP
# 10.1.1.50:52341 -> 203.0.113.15:52341
  1. 检查安全策略:
display security-policy
# 发现只配置了"Trust→Untrust 允许全部"策略
# 但缺少"Untrust→Trust 允许响应报文"的策略
# 在状态防火墙中,响应报文应通过会话表自动放行
# 确认问题不在策略
  1. 检查 DNS 解析:
# 在内网主机上执行 nslookup www.example.com
# DNS返回正常
# 但发现DNS查询的响应包目的IP是NAT转换后的地址
# 而非原始内网地址
  1. 根因分析:DNS 服务使用了 UDP 协议,防火墙的 UDP NAT 会话超时时间过短(默认 30 秒)。在某些 DNS 服务器响应较慢的情况下,查询包发出后建立了 NAT 会话,但响应返回时由于网络延迟超过 30 秒,NAT 会话已超时清除,导致响应包无法反向匹配 NAT 会话而被丢弃。

  2. 修复措施:

# 调整UDP NAT会话超时
nat session udp timeout 300

# 或调整防火墙全局UDP超时
firewall session udp timeout 300
  1. 经验总结:NAT 会话超时与业务超时必须匹配。对于 DNS、SMTP 等可能产生较长交互延迟的应用,需要适当延长 UDP 会话超时时间。

五、总结

知识点 核心要点
SNAT 内网→外网地址转换,隐藏内网拓扑
DNAT/NAT Server 外网→内网地址映射,发布内部服务
Easy-IP 使用出接口IP做转换,适合动态IP场景
NAPT IP+端口双重复用,支持海量连接
防火墙NAT特性 NAT与安全策略联动、NAT会话独立管理
地址复用算法 轮询/源IP哈希/源端口哈希
地址池优先级 NAT Server > 地址池NAT > Easy-IP
常见故障 NAT超时不匹配、策略不匹配、端口耗尽

思考

  1. 当同一台防火墙同时配置了 SNAT 和 DNAT 时,NAT 的处理顺序是怎样的?如果一条报文同时命中 SNAT 和 DNAT 规则,会发生什么?
  2. Easy-IP 和地址池 NAT 都能实现内网访问外网的功能,在什么场景下必须使用地址池而不能使用 Easy-IP?
  3. NAT Server 发布 Web 服务器时,为什么需要在安全策略中允许 Untrust→DMZ 的流量?NAT Server 的端口映射和安全策略之间是什么关系?

下篇预告:第205篇:防火墙双机热备:主备与负载分担