故障现象公网用户访问内网WEB服务器正常内网的普通用户通过内网地址访问正常但无法通过公网IP进行正常访问网络环境介绍环境地址端口号内网用户IP192.168.10.10/24随机web服务器192.168.100.100/2480公网IP地址100.100.100.100/24内网网关192.168.10.254/24基础配置网络缺省路由ip route-static 0.0.0.0 0.0.0.0 172.16.10.10防火墙源SNAT (进行上网)内网所有地址 any -------SNAT----- 100.100.100.100防火墙目的DNAT(公网 IP 映射内网服务器)内网web服务器192.168.100.100:80 ---------DNAT-----100.100.100.100:80原因分析假如是192.168.10.10通过申请的域名访问192.168.100.100的web服务。这里假设访问的源端口是10000目标端口是80数据包分析如下1、C2主机发起web请求.因为通过域名访问的DNS解析服务正常那么访问目标就是100.100.100.100:80流量方向 192.168.10.10:10000-----100.100.100.100:802、数据包最终会被路由到防火墙上防火墙检查访问的目的地址匹配到它的端口映射策略将目标地址改为对192.168.100.100的访问建立起一个针对目标ip地址转换的NAT会话表流量方向192.168.10.10:10000------192.168.100.100:803、然后数据包到会被转发到192.168.100.100服务器上并会响应192.168.10.10主机的请求将上述访问的源目ip地址及端口进行倒转并将数据包交给它的网关处理图中就是R1路由器流量方向192.168.100.100:80------192.168.10.10:100004、R1路由器检查访问者的源ip和目标ip地址发现目标ip地址是192.168.10.10是R1路由器一个可路由的内网ip地址就会将数据包直接路由到C2主机上流量来回路径不一致C2主机接收到数据包检查数据包的源ip和端口是192.168.100.100:80发现其本身并没有这样一个http会话与之相匹配就是说C2主机并没有主动发起对192.168.100.100:80的访问发起的是对100.100.100.100:80的访问那么C2主机就会丢弃这个数据包导致内网用户通过域名或者公网ip地址访问自己的内网服务器不通的现象。流量方向192.168.100.100:80------192.168.10.10:10000该问题的根本原因R1 路由器收到响应报文后发现报文目的 IP 为内网可直路由网段会直接在内网二层 / 三层转发不会将报文上送防火墙做 NAT 及转发处理。此现象并非设备 BUG而是TCP/IP 协议栈的固有工作机制所有开启端口映射的网络设备均存在该逻辑无法规避除非重构网络协议体系。在现有 TCP/IP 框架下该问题具备成熟可行的解决方案。部分家用或轻量化设备无需手动配置端口回流本质是设备在配置端口映射时后台自动兜底处理了回流场景。但企业级专业设备极少默认自带该机制多需人工手动配置适配这也正是企业设备高定制性、高扩展性的设计体现。问题解决方案192.168.10.10访问192.168.100.100:80的时候不走内网路由再做一次回流的NAT映射即可。此处以华为防火墙USG6000系列展示配置 NAT Server端口映射首先配置基础的服务器映射并指定no-reverse或允许任意区域访问# 进入系统视图 system-view # 配置 NAT Server将公网 IP 映射到私网 Web 服务器 # 假设映射 Web 服务 (端口 80) firewall zone trust nat server protocol tcp global 100.100.100.100 80 inside 192.168.100.100 80配置 NAT 回流策略在华为防火墙上通常需要在 Trust 区域内网区域的接口出方向或入方向应用 NAT 策略。最简单的方法是使用nat hairpin enable部分旧版本或通过配置 NAT 策略实现。推荐方法基于 NAT 策略需要配置一条策略当流量从 Trust 区域进入且目的是公网 IP 时同时做源转换和目的转换。# 1. 定义一个地址集可选但推荐包含服务器的公网IP ip address-set WEB_PUBLIC type object address 0 100.100.100.100 mask 32 # 2. 定义一个地址集包含内网客户端 ip address-set LAN_CLIENT type object address 0 192.168.10.0 mask 24 # 3. 配置 NAT 策略 nat-policy rule name Hairpin_Web # 匹配条件源区域是 Trust目的区域也是 Trust因为流量不出去 source-zone trust destination-zone trust # 源地址是内网客户端 source-address address-set LAN_CLIENT # 目的地址是服务器的公网 IP destination-address address-set WEB_PUBLIC # 动作进行源地址转换Easy-IP转换为出接口IP # 注意NAT Server 会自动处理目的地址转换 action source-nat easy-ip配置安全策略必须允许 Trust 到 Trust 的流量通过防火墙。security-policy rule name Permit_Hairpin source-zone trust destination-zone trust source-address 192.168.10.0 mask 24 # 注意这里的目的地址必须填写服务器的真实内网 IP因为 NAT 策略先于或同时于路由查找 destination-address 192.168.100.100 mask 32 service http # 或你需要的服务 action permit会话表验证NAT生效可看到内网 IP如 192.168.10.10转换为100.100.100.100: 80总体逻辑参考https://mp.weixin.qq.com/s/wR2Tg0bW0l3hDFNDdglEUQ
NAT映射回流解决内网通过公网映射访问内部服务器
发布时间:2026/5/30 20:54:39
故障现象公网用户访问内网WEB服务器正常内网的普通用户通过内网地址访问正常但无法通过公网IP进行正常访问网络环境介绍环境地址端口号内网用户IP192.168.10.10/24随机web服务器192.168.100.100/2480公网IP地址100.100.100.100/24内网网关192.168.10.254/24基础配置网络缺省路由ip route-static 0.0.0.0 0.0.0.0 172.16.10.10防火墙源SNAT (进行上网)内网所有地址 any -------SNAT----- 100.100.100.100防火墙目的DNAT(公网 IP 映射内网服务器)内网web服务器192.168.100.100:80 ---------DNAT-----100.100.100.100:80原因分析假如是192.168.10.10通过申请的域名访问192.168.100.100的web服务。这里假设访问的源端口是10000目标端口是80数据包分析如下1、C2主机发起web请求.因为通过域名访问的DNS解析服务正常那么访问目标就是100.100.100.100:80流量方向 192.168.10.10:10000-----100.100.100.100:802、数据包最终会被路由到防火墙上防火墙检查访问的目的地址匹配到它的端口映射策略将目标地址改为对192.168.100.100的访问建立起一个针对目标ip地址转换的NAT会话表流量方向192.168.10.10:10000------192.168.100.100:803、然后数据包到会被转发到192.168.100.100服务器上并会响应192.168.10.10主机的请求将上述访问的源目ip地址及端口进行倒转并将数据包交给它的网关处理图中就是R1路由器流量方向192.168.100.100:80------192.168.10.10:100004、R1路由器检查访问者的源ip和目标ip地址发现目标ip地址是192.168.10.10是R1路由器一个可路由的内网ip地址就会将数据包直接路由到C2主机上流量来回路径不一致C2主机接收到数据包检查数据包的源ip和端口是192.168.100.100:80发现其本身并没有这样一个http会话与之相匹配就是说C2主机并没有主动发起对192.168.100.100:80的访问发起的是对100.100.100.100:80的访问那么C2主机就会丢弃这个数据包导致内网用户通过域名或者公网ip地址访问自己的内网服务器不通的现象。流量方向192.168.100.100:80------192.168.10.10:10000该问题的根本原因R1 路由器收到响应报文后发现报文目的 IP 为内网可直路由网段会直接在内网二层 / 三层转发不会将报文上送防火墙做 NAT 及转发处理。此现象并非设备 BUG而是TCP/IP 协议栈的固有工作机制所有开启端口映射的网络设备均存在该逻辑无法规避除非重构网络协议体系。在现有 TCP/IP 框架下该问题具备成熟可行的解决方案。部分家用或轻量化设备无需手动配置端口回流本质是设备在配置端口映射时后台自动兜底处理了回流场景。但企业级专业设备极少默认自带该机制多需人工手动配置适配这也正是企业设备高定制性、高扩展性的设计体现。问题解决方案192.168.10.10访问192.168.100.100:80的时候不走内网路由再做一次回流的NAT映射即可。此处以华为防火墙USG6000系列展示配置 NAT Server端口映射首先配置基础的服务器映射并指定no-reverse或允许任意区域访问# 进入系统视图 system-view # 配置 NAT Server将公网 IP 映射到私网 Web 服务器 # 假设映射 Web 服务 (端口 80) firewall zone trust nat server protocol tcp global 100.100.100.100 80 inside 192.168.100.100 80配置 NAT 回流策略在华为防火墙上通常需要在 Trust 区域内网区域的接口出方向或入方向应用 NAT 策略。最简单的方法是使用nat hairpin enable部分旧版本或通过配置 NAT 策略实现。推荐方法基于 NAT 策略需要配置一条策略当流量从 Trust 区域进入且目的是公网 IP 时同时做源转换和目的转换。# 1. 定义一个地址集可选但推荐包含服务器的公网IP ip address-set WEB_PUBLIC type object address 0 100.100.100.100 mask 32 # 2. 定义一个地址集包含内网客户端 ip address-set LAN_CLIENT type object address 0 192.168.10.0 mask 24 # 3. 配置 NAT 策略 nat-policy rule name Hairpin_Web # 匹配条件源区域是 Trust目的区域也是 Trust因为流量不出去 source-zone trust destination-zone trust # 源地址是内网客户端 source-address address-set LAN_CLIENT # 目的地址是服务器的公网 IP destination-address address-set WEB_PUBLIC # 动作进行源地址转换Easy-IP转换为出接口IP # 注意NAT Server 会自动处理目的地址转换 action source-nat easy-ip配置安全策略必须允许 Trust 到 Trust 的流量通过防火墙。security-policy rule name Permit_Hairpin source-zone trust destination-zone trust source-address 192.168.10.0 mask 24 # 注意这里的目的地址必须填写服务器的真实内网 IP因为 NAT 策略先于或同时于路由查找 destination-address 192.168.100.100 mask 32 service http # 或你需要的服务 action permit会话表验证NAT生效可看到内网 IP如 192.168.10.10转换为100.100.100.100: 80总体逻辑参考https://mp.weixin.qq.com/s/wR2Tg0bW0l3hDFNDdglEUQ