惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Vercel News
Vercel News
月光博客
月光博客
S
SegmentFault 最新的问题
A
About on SuperTechFans
Microsoft Security Blog
Microsoft Security Blog
U
Unit 42
Google DeepMind News
Google DeepMind News
Engineering at Meta
Engineering at Meta
B
Blog RSS Feed
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
小众软件
小众软件
WordPress大学
WordPress大学
G
Google Developers Blog
Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
F
Fortinet All Blogs
博客园 - 【当耐特】
I
InfoQ

lololowe的博客

M-LAG跨设备链路聚合组 mDNS简介与配置 PVE通过 Cloud-init 部署 Cloud Images 教程 给 VSCode 添加网络设备配置的语法高亮 给 VSCode 添加网络设备配置的语法高亮 iStack 堆叠原理及配置 单板级可靠性与设备级可靠性 Eth-Trunk 原理及配置 《防火墙项目化实战 (基于华为eNSP)》笔记 华为VLAN高级特性与协议详解 DNS 跨平台托管 CVE-2026-0073 安卓调试桥漏洞复现 使用 Bettercap 进行 HTTPS 中间人攻击:SSL 剥离和 HSTS 绕过 Yakit测试PortSwigger靶场-未授权访问 visio导入Mermaid流程图(SVG格式) 什么是 TiT (TLS in TLS) 特征以及如何消除特征 部署 Wireguard VPN 实现异地组网 Redis未授权访问漏洞复现 实现防御ARP劫持与主动反击 华为VRP系统基本操作 mrs文件转换与查看 电脑垃圾清理技巧分享 QQ音乐 2015-2025 年度听歌报告链接汇总 基于DevStack快速部署OpenStack
NAT 回流解决方案
lololowe · 2026-09-15 · via lololowe的博客
计算机网络网络设备配置计算机网络eNSPNAT

之前在 防火墙项目化实战的项目6:双向 NAT 中就已经讨论并实验过NAT回流(NAT Hairpin)问题:内网用户访问服务器的公网IP时,原有的上网规则(域间源 NAT)不会生效,原因在于防火墙内部的 NAT Server 匹配顺序在源 NAT 规则之前,NAT Server 提前将报文的目的 IP 转换为了内网 IP,导致其目的安全域变为了与源端相同的 DMZ 域,因此报文无法再命中原本去往 Untrust 域的源 NAT 规则

但和这次不同的是,这次实验用AR2220路由器作为网关,其NAT Server只能应用在特定接口(本例为WAN口),这导致内网用户通过服务器的公网IP来访问服务器时,由于入接口是路由器的LAN口,因此不会触发NAT Server规则,最终通信失败。下面介绍4种解决方案。

1. 基础拓扑

基础拓扑如下:

alt text

PC1和Server在同一个内网192.168.0.0/24中,网关为路由器AR1的g0/0/1接口(192.168.0.254),内网设备通过AR1上面的源NAT(Easy-IP)实现内网到外网的访问。也通过NAT Server将公网IP的80端口映射到服务器的内网IP的80端口,使外网用户可以访问内网Server。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    sysname GW


    acl number 2000
    rule 5 permit source 192.168.0.0 0.0.0.255


    interface GigabitEthernet0/0/1
    ip address 192.168.0.254 255.255.255.0


    interface GigabitEthernet0/0/2
    ip address 202.1.1.1 255.255.255.0
    nat server protocol tcp global current-interface www inside 192.168.0.2 www
    nat outbound 2000
    内网PC1可以通过AR1的源NAT来ping通外网PC2
    外网PC2可以通过AR1的NAT Server来访问内网Server的HTTP服务
    PC1可以正常访问同内网的Server的HTTP服务(二层通信)

    alt text

    PC1无法通过内网服务器的公网IP来访问HTTP服务:
    alt text

    原因就是最上面说的,NAT Server只在AR1的WAN口触发,而LAN口收到PC1访问202.1.1.1:80的报文时,没有转换目的IP地址为服务器的192.168.0.2,而AR1又没有监听在80端口的服务,因此该请报文被AR1丢弃,不会再触发源NAT(NAT Server匹配顺序在源NAT之前)。

    在AR1的LAN口上抓包,可以看到TCP连接没有建立,重传4次后也没有响应:

    alt text

    2. 解决方案

    2.1. 方案1: 内网DNS

    如果服务器支持用域名(1.cn)访问,那么最简单的方案就是在内网DNS服务器上添加域名映射的内网IP。内网用户使用内网DNS解析服务器域名时,就会得到服务器的内网IP地址,从而直接实现内网2层通信,不用再修改AR1。

    DNS服务器同样使用内网的Server启动,并添加解析记录1.cn↔️192.168.0.2:

    alt text

    PC1把DNS服务器设为192.168.0.2即可:

    alt text

    通过域名即可访问:

    alt text

    如果使用AR1作为DNS服务器,则需要以下配置:

    1
    2
    3
    4
    dns proxy enable  
    dns resolve
    ip host 1.cn 192.168.0.2
    dns server 8.8.8.8

    alt text

    AR路由器(包括AR2200)不支持自身作为DNS服务器。AR路由器仅支持作为DNS客户端或DNS Proxy/Relay。

    2.2. 方案2: NAT ALG + DNS Mapping

    如果服务器支持用域名(1.cn)访问,但是内网没有DNS服务器,那么可以在AR1路由器上配置NAT ALGDNS Mapping来实现将域名解析成服务器内网IP。

    内网用户通过域名访问内网服务器时,发送域名请求到DNS Server,DNS Server将此域名对应的公网IP地址封装在回应报文中。在配置了DNS Mapping和ALG功能的情况下,路由器向内网用户转发DNS响应报文时,会通过查找NAT Server(dis nat server)规则,将其中封装的公网IP地址(202.1.1.1)转换为内网IP地址(192.168.0.2)。

    AR1关键配置如下:

    1
    2
    nat alg dns enable  
    nat dns-map 1.cn 202.1.1.1 80 tcp

    PC1将DNS服务器设置为公网的202.1.1.3:

    alt text

    公网DNS服务器202.1.1.3添加域名1.cn的解析记录:

    alt text

    PC1可以通过1.cn访问服务器:

    alt text

    alt text

    DNS Mapping规则如下:

    alt text

    2.3. 方案3: 双向NAT

    开启DNS的NAT ALG后,所有的DNS报文都会上送到CPU处理,大量DNS报文容易拖慢设备性能

    并且如果服务器没有域名,那就只能通过双向NAT来解决内网用户访问服务器公网IP的问题了。

    通过在路由器AR1的LAN口上同时配置源NAT和NAT Server,可以实现双向NAT。其中源NAT负责将PC1发出的报文的源IP地址(192.168.0.1)替换成和LAN口地址(192.168.0.254),NAT Server负责将报文的目的IP地址(202.1.1.1)替换成服务器的内网IP地址(192.168.0.2)。

    不要再问为什么基础拓扑中已经有NAT Server和源NAT规则了还要再配一对,原因是他们只应用生效在WAN口,LAN口的报文不会触发NAT Server(LAN也不监听80端口)和源NAT规则(NAT Server直接丢弃了,按顺序匹配不到源NAT)。

    关键配置如下:

    1
    2
    3
    4
    5
    6
    7
    acl number 3000  
    rule 5 permit ip source 192.168.0.0 0.0.0.255 destination 202.1.1.1 0

    interface GigabitEthernet0/0/1
    ip address 192.168.0.254 255.255.255.0
    nat outbound 3000
    nat server protocol tcp global 202.1.1.1 www inside 192.168.0.2 www

    注意,路由器的软件版本如果小于等于V200R003C00,将无法在LAN口配置NAT Server的目的地址为WAN口地址,会提示地址冲突

    alt text

    在eNSP模拟器中,解决方案是使用下一节将介绍的策略路由

    这里再演示用eNSP Pro模拟器的AR6700路由器(软件版本为V600R025C10SPC100)进行测试,AR6700的NAT Server默认对所有开启了NAT功能的接口生效,源NAT规则也能根据源IP地址进行匹配,因此只需要在LAN口启用NAT功能,生效双向NAT。

      alt text

      PC1

      alt text

      Server
      PC2

      alt text

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      sysname GW

      vlan 10


      interface Vlanif10
      ip address 192.168.0.254 255.255.255.0
      nat enable


      interface GE0/0/1
      portswitch
      port link-type access
      port default vlan 10


      interface GE0/0/2
      portswitch
      port link-type access
      port default vlan 10


      interface GE0/0/9
      ip address 202.1.1.1 255.255.255.0
      nat enable


      nat server www protocol tcp global 202.1.1.1 www inside 192.168.0.2 www


      nat-policy
      rule name snat
      source-address 192.168.0.0 mask 255.255.255.0
      action source-nat easy-ip
      pc1可以通过ar的snat访问外网的pc2

      alt text
      alt text
      Easy-IP模式的源NAT,会匹配完路由表后使用该条流量最终的出接口的IP地址作为最终的源IP地址,因此源地址转成了202.1.1.1:
      alt text

      外网pc2可以通过ar的nat Server来访问内网Server的HTTP服务
      pc1可以通过服务器的公网IP访问内网服务器

      alt text
      PC1发出报文的的源地址192.168.0.1被转换为192.168.0.254,目的地址202.1.1.1被转换为192.168.0.2:
      alt text
      转换规则为:最初发出的报文的IP头为192.168.0.1➡️202.1.1.1,到了路由器后首先触发NAT Server规则,此时为192.168.0.1➡️192.168.0.2,接着匹配源NAT(规则名为snat),源NAT为Easy-IP模式,Easy-IP会使用该条流量最终的出接口的IP地址作为源IP地址,对于该路由器,路由表中如下:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      [GW]dis ip routing-table 
      Proto: Protocol Pre: Preference
      Route Flags: R - relay, D - download to fib, T - to vpn-instance, B - black hole route
      ------------------------------------------------------------------------------
      Routing Table : _public_
      Destinations : 10 Routes : 10

      Destination/Mask Proto Pre Cost Flags NextHop Interface

      127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
      127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
      127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
      192.168.0.0/24 Direct 0 0 D 192.168.0.254 Vlanif10
      192.168.0.254/32 Direct 0 0 D 127.0.0.1 Vlanif10
      192.168.0.255/32 Direct 0 0 D 127.0.0.1 Vlanif10
      202.1.1.0/24 Direct 0 0 D 202.1.1.1 GE0/0/9
      202.1.1.1/32 Direct 0 0 D 127.0.0.1 GE0/0/9
      202.1.1.255/32 Direct 0 0 D 127.0.0.1 GE0/0/9
      255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0

      目的地址 192.168.0.2 匹配直连路由 192.168.0.0/24,出接口为 Vlanif10,下一跳为 192.168.0.254,因此Easy-IP转换源地址后为192.168.0.254➡️192.168.0.2,至此完成了去程的NAT双向转换。回程路由同理。
      具体过程推荐阅读官方文档:https://support.huawei.com/hedex/hdx.do?docid=EDOC1100594114&id=ZH-CN_TOPIC_0000002640960496

      注意,如果直接是192.168.0.1➡️192.168.0.2,是不会触发源NAT转换的:
      alt text
      原因是二者属于同一网段,在没有触发NAT Server规则的前提下,不会触发源NAT规则。

      2.4. 方案4: 策略路由

      当服务器只支持用IP访问,并且路由器软件版本小于等于V200R003C00时(不支持配置该接口下的NAT Server的目的地址为其他接口已有的地址),只能通过流策略重定向网络的方式来实现内网PC通过内网服务器的公网IP地址访问。

      PC源地址通过源NAT转换为公网IP发给外网的AR2,AR2再将数据流量发回到网关路由器AR1(源目的IP都为AR1,因此会转发会去)。数据流达到AR1后,NAT Server生效,目的地址转换为WEB服务器私网地址。WEB服务器回应报文达到AR1后,根据NAT Server表项将数据流的源地址转换为WEB服务器的公网地址,外网AR2会再将数据流发回到AR1,AR1根据之前的源NAT表项将数据流的目的地址转换为私网IP,再将数据流发送给内网用户PC:

      alt text

      具体分析如下:

      alt text

      🔴 去程流量(PC1 访问 Server 公网 IP):

      1. PC1 ➡️ AR1
      • 源地址:192.168.0.1:4392
      • 目的地址:202.1.1.1:80
      1. AR1 ➡️ AR2(匹配 ACL 3000 触发 PBR 重定向,从 GE0/0/2 发出触发 nat outbound 2000 转换源 IP)
      • 源地址:202.1.1.1:4392
      • 目的地址:202.1.1.1:80
      1. AR2 ➡️ AR1(AR2 查路由表发回网关 AR1)
      • 源地址:202.1.1.1:4392
      • 目的地址:202.1.1.1:80
      1. AR1 ➡️ Server(从外网口重新进入 AR1,触发 nat server 转换目的 IP)
      • 源地址:202.1.1.1:4392
      • 目的地址:192.168.0.2:80

      🔵 回程流量(Server 回应 PC1):

      1. Server ➡️ AR1
      • 源地址:192.168.0.2:80
      • 目的地址:202.1.1.1:4392
      1. AR1 ➡️ AR2(目的地址为 202.1.1.1,再次匹配 ACL 3000 触发 PBR 重定向到 AR2)
      • 源地址:192.168.0.2:80
      • 目的地址:202.1.1.4392
      1. AR2 ➡️ AR1(AR2 查路由表发回网关 AR1)
      • 源地址:192.168.0.2:80
      • 目的地址:202.1.1.1:4392
      1. AR1 ➡️ PC1(重新进入 AR1 外网口,查找 NAT 会话表还原源与目的 IP)
      • 源地址:202.1.1.1:80
      • 目的地址:192.168.0.1:4392

      关键配置如下:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28

      nqa test-instance admin icmp
      test-type icmp
      destination-address ipv4 202.1.1.4
      frequency 2
      probe-count 1
      timeout 2
      start now


      acl number 3000
      rule 5 permit ip source 192.168.0.0 0.0.0.255 destination 202.1.1.1 0


      traffic classifier c1
      if-match acl 3000


      traffic behavior b1
      redirect ip-nexthop 202.1.1.4 track nqa admin icmp


      traffic policy p1
      classifier c1 behavior b1


      interface GigabitEthernet0/0/1
      traffic-policy p1 inbound

      alt text

      1. ACL 3000 不能指定目的端口80,因为流策略p1应用在LAN口的入方向上,限定目的端口为 80,会导致服务器发出的随机目的端口回应报文无法匹配策略路由重定向给 202.1.1.4,进而打断了反向 NAT 转换。
      2. 重定向的下一跳设备必须用真实路由器(如 AR2),不能填写 PC 等无三层转发功能的终端设备(例如PC2)。
      3. 流行为之所以关联了NQA,是为了通过NQA的ICMP请求发起的ARP请求来获取202.1.1.4的MAC地址,因为经过测试,AR1由于没有202.1.1.4的MAC地址,最终无法路由重定向到202.1.1.4。

      完成配置后即可正常访问:

      alt text

      在AR1和AR2之间抓包可以看到相同的源目的IP地址的三次握手,http连接,四次挥手:

      alt text

      3. 参考

      https://support.huawei.com/enterprise/zh/knowledge/KB1000021808
      https://support.huawei.com/enterprise/zh/knowledge/EKB1000064011