• 问题描述
  • 原因分析
  • 解决办法
    • nat hairpin
    • 双向NAT
  • 总结说明

出口路由器nat server端口映射NAT回流问题

一、问题描述

我们在配置nat server(端口映射)的时候会出现外网访问正常,而内网主机访问外网IP的端口不能访问的情况,这就是因为NAT回流造成的。

如下图1 所示,公网主机通过12.1.1.1 8023端口可以访问内网192.168.1.100 23端口的Telnet服务,但是内网主机无法通过公网IP12.1.1.1 8023访问Telnet服务

出口路由器nat server端口映射NAT回流问题-下一朵云
图1 实验拓扑图

二、原因分析

(1)内网主机访问公网IP12.1.1.1:8023,会把流量送到出口设备G0/0接口(出口)。

(2)出口设备的G0/0接口配置了nat server(端口映射),数据包会被修改目的地址和目的端口号(192.168.1.100:23),并不对源地址进行修改。

(3)数据包从出口设备发到服务器,因为发过来的数据包源地址是192.168.1.2(内网主机)

(4)服务器对出口设备的数据包回复。源目地址对调,导致数据包直接通过交换机发送到了内网主机。

源地址:192.168.1.100 目的地址:192.168.1.2

(5)内网主机解封装服务器回复的数据包,因为(源目)地址不匹配,则进行丢弃,导致访问失败。

主机发送的包:源地址:192.168.1.2 目的地址:12.1.1.1
期望接收的包:源地址:12.1.1.1 目的地址:192.168.1.2
实际接收的包:源地址:192.168.1.100 目的地址:192.168.1.2,所以进行丢弃!

三、解决办法

(1)通过nat hairpin解决问题

H3C V7版本可以在内网接口侧(图1中为G0/1)配置 nat hairpin 解决NAT回流的问题。

通过在内网侧接口上使能 NAT hairpin 功能,可以实现内网用户使用NAT公网地址访问内网服务器或内网其它用户。

配置命令:

<R1>sys
[R1]int g0/1
[R1-GigabitEthernet0/1]nat hairpin enable

(2)通过双向NAT解决问题

如果出口设备可能不支持 nat hairpin,我们可以使用双向NAT的方式进行解决。

  • 在内网口配置与公网口相同的nat server条目
  • 配置基于acl的nat outbound
[R1]acl adv 3000
[R1-acl-ipv4-adv-3000]rule permit tcp destination 192.168.1.100 0
# 匹配任意源IP到目标192.168.1.100的包
[R1-acl-ipv4-adv-3000]qu
[R1]int g0/1
[R1-GigabitEthernet0/1]nat outbound 3000
# 源IP转换
[R1-GigabitEthernet0/1]nat server protocol tcp global 12.1.1.1 8023 inside 192.168.1.100 23 
# 目的IP转换

此时,就内网主机就可以通过映射的公网IP访问内网的服务器了,如下图2

出口路由器nat server端口映射NAT回流问题-下一朵云
图2 内网主机通过公网IP访问内网服务器

四、总结说明

使用双向NAT因为映射的数据包需要在出口设备内部进行多次转换,这样会增大设备压力,如果设备支持nat hairpin的话建议使用nat hairpin

具体原理参考工程文件和草稿

下载地址:https://cloud.orcy.net.cn:5002/s/nfxJ9cnnG4fi4XF (密码:2022)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。