资讯动态

华为防火墙双向NAT配置实战:解决复杂网络访问故障

发布时间:2026/8/26 8:03:08 来源:尧图企业网站定制
1. 从一次“诡异”的访问故障说起最近在帮一个朋友的公司排查一个网络问题场景挺典型的他们有一台部署在内网的Web服务器对外提供业务服务。为了安全服务器前端部署了一台华为防火墙。常规操作是做了个源NAT把内网服务器的地址映射成一个公网IP的某个端口这样外网用户就能访问了。一开始运行得好好的但后来他们内部有个应用需要从另一个公网地址比如某个云服务器主动发起连接访问这台内网服务器。问题就来了从云服务器发起的访问时通时不通日志里还经常看到连接超时或者直接被防火墙拒绝。当时第一反应是检查安全策略是不是没放行这个云服务器的IP。查了一圈策略是有的。然后又怀疑是不是NAT没做对检查了NAT Server也就是目的NAT的配置将公网IP的80端口映射到内网服务器的80端口配置看起来也没毛病。这就有点让人挠头了配置“看起来”都对但业务就是不通。后来我们把流量抓包分析再结合防火墙的会话表session table一看才恍然大悟——问题出在“来回路径不一致”上而解决这个问题的钥匙就是双向NAT。这个经历让我觉得很多网络工程师对NAT的理解可能还停留在“单向转换”的层面比如只做源NAT公司内网PC上网或者只做目的NAT发布内网服务器。但当网络拓扑变得稍微复杂一点特别是存在多出口、或者需要外部主动访问经过NAT转换的内部服务时单向NAT的局限性就暴露出来了。今天我就结合华为防火墙的配置把“双向NAT”这个听起来有点高级但实际上非常实用的功能掰开揉碎了讲清楚。无论你是正在备考华为认证还是在实际运维中遇到了类似我朋友公司的难题这篇文章都能给你一套清晰的解决思路和可落地的配置方案。2. 单向NAT的“阿喀琉斯之踵”为什么来回路径必须一致在深入双向NAT之前我们必须先理解传统NAT我们姑且称之为单向NAT的一个核心工作原理也是它最大的限制基于会话的五元组一致性。防火墙包括华为防火墙在处理经过它的流量时会严格跟踪每一个连接会话。一个会话由五元组唯一标识源IP、源端口、目的IP、目的端口、协议如TCP/UDP。NAT操作本质上是对这个五元组中的IP地址有时包括端口进行改写。场景复现问题是如何产生的让我们用开头那个案例来具体说明外部访问内部初始连接云服务器IP: 202.96.1.100访问公司公网IP203.0.113.80的80端口。流量到达防火墙外网口。防火墙处理目的NAT防火墙上配置了NAT Server策略203.0.113.80:80-192.168.1.100:80。防火墙收到包后修改目的IP和端口将数据包转发给内网服务器。同时防火墙会创建一条会话表项。这条表项记录了两个关键信息原始五元组外部视角: 源 202.96.1.100:12345, 目的 203.0.113.80:80, 协议 TCP。转换后五元组内部视角: 源 202.96.1.100:12345, 目的 192.168.1.100:80, 协议 TCP。更重要的是会话表会记住这个连接的方向和NAT映射关系。内部服务器回应内网服务器192.168.1.100处理请求后发送回应包。回包的源是192.168.1.100:80目的是202.96.1.100:12345。防火墙的逆向查表关键步骤回包到达防火墙内网口。防火墙会以回包的五元组源 192.168.1.100:80 目的 202.96.1.100:12345为“键”去反向查找会话表。它需要找到之前创建的那条会话记录。找到后它知道需要把源地址192.168.1.100:80逆向转换回203.0.113.80:80然后从外网口发送给云服务器。这一切在“外部访问内部”这个单一方向上完美运行。但是如果此时内网服务器192.168.1.100主动向云服务器202.96.1.100发起一个新连接例如内网服务器上的程序需要回调云服务器的API麻烦就来了。内部主动访问外部新连接内网服务器192.168.1.100:55555主动发送一个包到云服务器202.96.1.100:8080。防火墙的困惑这个包到达防火墙。对于防火墙来说这是一个全新的会话因为它无法匹配到任何现有的会话表源目IP/端口对完全不同。防火墙会根据安全策略和路由决定是否放行以及是否对其做NAT。假设我们配置了出向的源NAT策略将内网192.168.1.0/24的地址转换为出口公网IP203.0.113.79。那么防火墙会创建一条新会话原始源 192.168.1.100:55555 目的 202.96.1.100:8080。转换后源 203.0.113.79:55555 目的 202.96.1.100:8080。路径分裂与连接失败现在云服务器202.96.1.100收到了一个来自203.0.113.79:55555的包。在它看来这个连接和之前它访问203.0.113.80:80的那个连接毫无关系。即使它回应了回包也是发给203.0.113.79的。这就导致了严重的“来回路径不一致”请求路径1云 -203.0.113.80- (防火墙DNAT) - 内网服务器。回应路径1内网服务器 - (防火墙反向DNAT) -203.0.113.80- 云。(此路正常)请求路径2内网服务器 - (防火墙SNAT) -203.0.113.79- 云。回应路径2云 -203.0.113.79- (防火墙反向SNAT) - 内网服务器。(此路也正常但这是两个独立的连接)问题的核心在于当内网服务器需要主动访问那个曾经访问过它的外部主机时它发出的包被SNAT成了另一个公网IP (203.0.113.79)。而对于外部主机来说它只知道它之前是和203.0.113.80通信的。许多应用程序尤其是那些有状态、需要保持会话或进行认证回调的应用无法处理这种“源地址突变”的情况从而导致连接失败或逻辑错误。注意有些情况下即使通信能建立也会带来管理上的混乱比如在云服务器的日志里你会看到同一个内网服务竟然从两个不同的公网IP发起连接这会给安全审计和故障排查带来很大困扰。3. 双向NAT一把解决“身份认知”问题的钥匙双向NAT顾名思义就是在同一个流量的来回两个方向上都施加网络地址转换。但它不是简单地在接口上同时启用SNAT和DNAT而是有选择、有条件、基于策略的精确转换其核心目标是确保从特定源到特定目的流量无论发起方向如何其经过NAT转换后的源/目的地址对始终保持一致或者符合预期。在上面的案例中我们的预期是所有涉及内网服务器192.168.1.100与外部云服务器202.96.1.100之间的互访流量在经过防火墙时其公网层面的地址都统一为203.0.113.80。当云服务器访问内网服务时目的203.0.113.80:80被转换为192.168.1.100:80。这是传统的NAT Server即目的NAT当内网服务器主动访问云服务器时源192.168.1.100也需要被转换为203.0.113.80而不是其他出口IP。这是我们需要补充的源NAT这样在云服务器看来无论通信由谁发起对方始终是那个固定的IP203.0.113.80。这就解决了“身份认知”问题使得双向有状态的通信成为可能。华为防火墙实现双向NAT通常不是通过一个独立的“双向NAT”命令而是通过NAT策略的精细组合来实现的。主要会用到两种NAT方式NAT Server服务器映射和NAT Policy策略NAT并通过安全策略来控制哪些流量触发这些NAT动作。3.1 核心组件拆解NAT Server、NAT策略与安全策略在华为防火墙上理解这三者的关系和分工是配置成功的关键。NAT Server这是“由外到内”访问的基石。它静态地绑定一个公网IP和端口到一个内网IP和端口。它的匹配条件相对简单命中目的IP和端口。只要数据包的目的IP/端口匹配了NAT Server的配置就会触发目的地址转换。它通常用于发布内网服务器。配置本质destination-ip original-ip - translated-ipNAT策略NAT Policy这是实现灵活NAT包括我们需要的“由内到外”的特殊源NAT的核心工具。它比NAT Server更强大因为它的匹配条件可以非常精细包括源/目的安全区域、IP地址、服务端口等。当流量匹配了NAT策略的条件并且该策略的动作为“源NAT”或“目的NAT”时转换才会发生。配置本质If (packet matches 条件) then perform NAT (source/destination)对于我们的双向NAT场景我们需要一条NAT策略来匹配“从内网服务器到特定外部服务器”的流量并对其做源NAT。安全策略Security Policy这是流量的总开关和审计点。任何流量必须先被安全策略允许Permit然后防火墙才会去查询并执行NAT相关操作包括NAT Server和NAT策略。如果安全策略拒绝Deny了流量那么后续的NAT查询根本不会发生。在双向NAT配置中你必须确保来回方向的安全策略都已正确放行。常见踩坑点只配置了外部访问内部的安全策略忘记了配置内部访问外部的安全策略导致内网服务器主动发起的包在安全策略检查阶段就被丢弃根本走不到NAT策略那一步。它们三者的处理顺序可以简化为入接口接收包 - 查找路由 - 匹配安全策略Permit- 匹配NAT Server - 匹配NAT策略 - 执行NAT转换 - 查找路由转换后- 出接口发送包。回包过程类似只是方向相反。4. 实战配置一步步构建华为防火墙双向NAT理论说得再多不如动手配一遍。我们沿用开头的案例假设网络拓扑如下防火墙内网口G1/0/1属于trust区域 IP192.168.1.1/24。防火墙外网口G1/0/2属于untrust区域 IP203.0.113.79/29。我们拥有公网IP地址块203.0.113.78-85其中203.0.113.80专门用于映射内网服务器。内网服务器192.168.1.100。外部云服务器202.96.1.100。我们的目标实现192.168.1.100与202.96.1.100之间通过公网IP203.0.113.80进行双向互通。4.1 第一步配置基础网络与路由这是所有操作的前提确保防火墙接口IP、区域划分、到内网和外网的路由都正确配置。# 配置接口IP和区域 system-view interface GigabitEthernet 1/0/1 description to-LAN ip address 192.168.1.1 255.255.255.0 firewall zone trust add interface GigabitEthernet 1/0/1 quit interface GigabitEthernet 1/0/2 description to-Internet ip address 203.0.113.79 255.255.255.248 firewall zone untrust add interface GigabitEthernet 1/0/2 quit # 配置默认路由指向互联网下一跳假设为203.0.113.78 ip route-static 0.0.0.0 0.0.0.0 203.0.113.78 # 如果有更精细的路由也需要配置4.2 第二步配置NAT Server目的NAT这是实现外部访问内部的标准操作将公网IP203.0.113.80的80端口映射到内网服务器。# 进入外网口视图配置NAT Server interface GigabitEthernet 1/0/2 nat server protocol tcp global 203.0.113.80 80 inside 192.168.1.100 80 # 如果需要映射多个端口或范围可以使用类似 global 203.0.113.80 8080 8090 inside 192.168.1.100 8080 8090 的格式 quit这条命令的意思是在接口G1/0/2上对所有目的IP为203.0.113.80、目的端口为80的TCP流量将其目的地址转换为192.168.1.100:80。实操心得1关于NAT Server的绑定接口。nat server命令通常配置在接收外部流量的接口上这里是untrust区域的接口。有些版本也支持在全局配置。我个人的习惯是配置在接口上这样逻辑更清晰也便于后续排查。如果服务器有多个公网IP需要映射在对应接口上重复此命令即可。4.3 第三步配置NAT策略源NAT这是实现双向NAT的关键一步。我们需要创建一条策略专门匹配“从内网服务器到特定外部服务器”的流量并将其源地址转换为固定的公网IP203.0.113.80。# 创建高级ACL用于精确匹配流量 acl number 3000 rule 5 permit ip source 192.168.1.100 0 destination 202.96.1.100 0 # 这条ACL匹配源为内网服务器目的为外部云服务器的所有IP流量包括TCP/UDP/ICMP等 quit # 创建NAT地址池如果只有一个IP也可以直接用接口地址但地址池更规范 nat address-group BIDIRECTIONAL-NAT section 0 203.0.113.80 203.0.113.80 quit # 创建NAT策略 nat-policy rule name FROM-SERVER-TO-CLOUD source-zone trust destination-zone untrust source-address 192.168.1.100 32 destination-address 202.96.1.100 32 # 注意这里我们同时使用了ACL和源目地址来匹配ACL更灵活可以定义协议和端口。 # 如果只需要基于IP用上面的source-address和destination-address即可。 action source-nat address-group BIDIRECTIONAL-NAT # 关键点动作是 source-nat并使用我们创建的固定IP地址池 quit为什么这么做这条NAT策略的作用是当流量从trust区域发往untrust区域且源IP是192.168.1.100目的IP是202.96.1.100时将其源IP地址转换为地址池BIDIRECTIONAL-NAT中的地址也就是203.0.113.80。这样内网服务器主动访问云服务器时发出的包源地址就是203.0.113.80与云服务器访问它时看到的目的地址完全一致。实操心得2NAT策略的匹配顺序与优先级。华为防火墙的NAT策略是按照规则ID或配置顺序从上到下匹配的第一条匹配的规则生效。务必确保这条精细的“双向NAT”策略放在通用出向NAT策略例如将整个192.168.1.0/24网段转换为出口IP203.0.113.79的策略之前。否则流量会先被通用策略匹配并转换我们的特殊策略就失效了。一个良好的习惯是越精确的匹配规则配置顺序越靠前。4.4 第四步配置安全策略放行双向流量防火墙默认是拒绝所有流量的。我们必须显式地创建安全策略允许双向流量通过。# 创建安全策略允许外部访问内部服务器对应NAT Server流量 security-policy rule name PERMIT-EXT-TO-WEB source-zone untrust destination-zone trust source-address 202.96.1.100 32 # 建议限制源IP更安全 destination-address 192.168.1.100 32 service http # 或更精确的 tcp destination-port 80 action permit quit # 创建安全策略允许内部服务器访问外部特定主机对应NAT策略流量 security-policy rule name PERMIT-WEB-TO-EXT source-zone trust destination-zone untrust source-address 192.168.1.100 32 destination-address 202.96.1.100 32 # 服务可以根据需要定义例如 service httpstcp 443或者 any service any # 如果内网服务器需要访问云服务器的多个端口可以用any但生产环境建议细化 action permit quit为什么需要两条策略因为这是两个不同方向的会话。防火墙是状态检测防火墙虽然有些厂商可以配置“一条策略允许双向”通过状态检测但华为防火墙的安全策略规则本身是有方向性的。从untrust到trust的初始连接匹配第一条规则从trust到untrust的回应包或由内网服务器发起的新连接匹配第二条规则。两条都配置是最稳妥的做法。4.5 第五步验证与排查配置完成后不要想当然认为它一定能通。必须进行验证。从外部云服务器访问203.0.113.80:80。这应该能正常打开网页。同时在防火墙上检查会话表display firewall session table verbose destination 192.168.1.100你应该能看到一条会话其中Source是202.96.1.100:xxxxDestination是203.0.113.80:80 状态为NAT Server 转换后的目的地址为192.168.1.100:80。从内网服务器192.168.1.100上主动访问云服务器202.96.1.100的某个端口如22或443。在访问前可以在防火墙上开启调试或直接访问后查看会话表display firewall session table verbose source 192.168.1.100 destination 202.96.1.100这是验证双向NAT是否生效的关键你应该能看到一条新的会话其Source显示为203.0.113.80:xxxx 而不是192.168.1.100:xxxx或其他地址如出口IP203.0.113.79。这证明我们的NAT策略生效了成功将源地址转换为了203.0.113.80。在云服务器上查看连接。使用netstat或ss命令查看来自203.0.113.80的连接。你应该能看到来自这个IP的连接而不是来自203.0.113.79或其他地址。5. 进阶场景与避坑指南双向NAT的配置逻辑虽然清晰但在复杂的生产环境中还是会遇到各种“坑”。下面分享几个常见问题和我的处理经验。5.1 场景服务器需要访问多个不同的外部服务且对方要求固定源IP假设内网服务器192.168.1.100不仅需要访问云服务器A (202.96.1.100)还需要访问云服务器B (202.96.1.200)并且两者都要求访问源IP固定为203.0.113.80。解决方案扩展NAT策略的匹配条件。有两种方式方式一使用ACL。创建一个更复杂的ACL包含多条rule。acl number 3000 rule 5 permit ip source 192.168.1.100 0 destination 202.96.1.100 0 rule 10 permit ip source 192.168.1.100 0 destination 202.96.1.200 0 quit # 然后在NAT策略中引用这个ACL nat-policy rule name FROM-SERVER-TO-MULTI-CLOUD source-zone trust destination-zone untrust acl 3000 # 使用ACL作为匹配条件 action source-nat address-group BIDIRECTIONAL-NAT方式二使用地址组。如果外部服务器很多可以创建一个地址组。ip address-set EXT-SERVERS type object address 0 202.96.1.100 32 address 1 202.96.1.200 32 quit nat-policy rule name FROM-SERVER-TO-ADDR-GROUP source-zone trust destination-zone untrust source-address 192.168.1.100 32 destination-address-set EXT-SERVERS action source-nat address-group BIDIRECTIONAL-NAT避坑提示1NAT策略的匹配条件冲突。如果内网服务器也需要访问其他普通互联网资源如更新软件包你还需要一条通用的出向NAT策略例如将192.168.1.0/24转换为203.0.113.79。务必确保这条通用策略的匹配条件不会覆盖到我们精心配置的双向NAT策略的流量。通常的做法是将双向NAT策略匹配条件更精确放在通用策略前面。防火墙按顺序匹配匹配到第一条符合条件的规则后就会执行动作并停止继续匹配。5.2 场景防火墙存在多个出口多ISP链路这是更复杂的情况。假设防火墙有两个外网口分别连接电信IP:203.0.113.79和联通IP:60.1.1.1线路。内网服务器192.168.1.100需要被电信和联通的用户都能访问并且它主动访问外部时也希望能“从哪里进从哪里出”或者固定从某条线路出。问题A外部访问的入口选择。这通常通过DNS解析来实现为同一个域名配置电信和联通的两个A记录203.0.113.80和60.1.1.2用户会自动访问最快的IP。在防火墙上你需要在两个外网口上都配置NAT Server将各自的公网IP映射到内网服务器。问题B内部服务器主动访问外部时的源IP选择双向NAT的核心。这变得棘手。如果电信用户访问203.0.113.80会话建立在电信链路上。此时内网服务器主动发起访问如果路由默认走联通那么源IP就会变成60.1.1.1导致路径不一致。解决方案1策略路由PBR。这是最彻底的解决方案。配置策略路由使得“源IP为192.168.1.100目的IP为特定外部服务器”的流量强制从指定的出口如电信出口发出。这样NAT策略配合策略路由可以确保源地址被转换为电信出口的固定IP。解决方案2更精细的NAT策略路由。为每个出口创建独立的NAT地址池和NAT策略。例如创建ACL 3001匹配需要走电信的外部IPNAT策略1使用电信地址池创建ACL 3002匹配需要走联通的外部IPNAT策略2使用联通地址池。同时确保路由表能让这些流量到达正确的出口。这需要对网络路由有很好的规划。5.3 常见故障排查命令与思路当双向NAT配置后业务不通可以按照以下顺序排查检查安全策略是否放行这是最常见的原因。使用display security-policy statistics查看策略命中计数或者开启策略的日志功能看流量是否被拒绝。检查会话表display firewall session table verbose是神器。关注关键字段Zone 流量经过的区域是否正确。Src/Dst 转换前和转换后的地址是否正确。重点看内网服务器主动发起的会话其源地址是否被正确转换成了我们期望的公网IP。NAT 是否显示了Server或Policy字样表明NAT类型。检查NAT策略命中使用display nat-policy statistics查看配置的NAT策略是否有命中计数。检查NAT Server状态display nat server查看配置的映射关系是否存在且生效。路由检查display ip routing-table确认转换后的数据包是否有正确的路由出口。抓包分析在防火墙的入口和出口接口分别抓包对比地址转换前后是否一致。命令如capture-packet interface GigabitEthernet 1/0/2。这是最终极的定位手段。5.4 一个隐蔽的“坑”NAT与应用层协议有些应用层协议如FTP主动模式、SIP、H.323等会在协议的控制信道中携带IP地址信息。标准的NAT我们称之为网络层NAT无法修改这些嵌入在应用层数据包内的地址会导致对端无法正确建立数据连接。问题内网FTP客户端通过双向NAT访问外部FTP服务器主动模式。客户端告诉服务器“请连接我的192.168.1.100:20端口来传输数据”。但服务器收到的是经过NAT转换后的包它看到的客户端IP是公网IP但端口号信息里却是内网IP导致服务器无法连接。解决方案NAT ALG应用层网关。华为防火墙默认对常见协议如FTP、SIP等启用了ALG功能。ALG能深度检测这些协议的数据包并动态修改其中嵌入的IP地址和端口信息使其与NAT转换后的地址一致。在大多数情况下你不需要额外配置。但如果遇到某些特殊协议不通可以检查ALG功能是否开启display firewall alg status。如果需要为特定协议启用或禁用可以使用firewall alg相关命令。个人经验总结双向NAT的配置本质上是一种“精细化流量管理”。它要求网络工程师对流量路径有非常清晰的认识。我的建议是在配置前最好能画一张简单的流量图标明“原始包”和“转换后包”的源目地址这样在配置策略和排查问题时思路会清晰很多。另外华为防火墙的配置逻辑非常严谨任何一步的疏漏尤其是安全策略都可能导致整个流程失败。养成“配置一点验证一点”的习惯能极大提升排错效率。最后会话表 (display firewall session table) 是你最好的朋友任何NAT问题先看会话表十有八九能找到线索。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价