- 问题描述
- 原因分析
- 解决办法
- 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服务
二、原因分析
(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因为映射的数据包需要在出口设备内部进行多次转换,这样会增大设备压力,如果设备支持nat hairpin的话建议使用nat hairpin。
具体原理参考工程文件和草稿
下载地址:https://cloud.orcy.net.cn:5002/s/nfxJ9cnnG4fi4XF (密码:2022)
评论(0)