1. 需求分析
- 在日常服务器或相关地址、端口映射中经常会遇到NAT数据访问异常、业务不通等情况,为方便大家在相关问题分析、排查及定位处理上能够更加高效快速,本文将详细展示各场景下所遇到的问题和解决办法,后续也将保持此类问题处理的案例汇总与更新。
2. 解决方案
2.1 软硬件信息
软件版本 | SG-6000-M-3-5.5R8P6-v6.bin |
硬件平台 | SG-6000-E1600 |
2.2 DNAT基础配置
(1)登录Web页面,策略–NAT–目的NAT–新建–高级配置,填写相关信息,如下图1所示:
- 源地址:指定目的NAT规则中流量的源IP地址。
- 目的地址:指定流量的目的IP地址或接口,一般为公网的IP或接口。
- 服务:指定流量的服务类型,即公网的端口。
- 转换为IP:指定真实服务器的IP。
- 转换端口:指定真实服务器的服务端口。
图1
(2)DNAT配置完成之后需要针对该DNAT放行相关策略:
- 源安全域:公网接口的安全域,即DNAT配置中目的地址所在接口的安全域。
- 源地址:DNAT配置中的源地址。
- 目的安全域:真实服务器所在内网口的接口安全域,即DNAT配置中的转换为IP的IP地址所在的安全域。
- 目的地址:DNAT配置的目的地址,一般为公网地址。
- 服务:DNAT配置的服务,而不是内网服务器的真实端口。
图2
2.3 常见问题排错
2.3.1 基础配置错误
- 源地址:确认访问的地址是否在该地址范围中。
- 目的地址:确认目的地址是否在接口的掩码范围内。
- 服务:一般只写目的端口,源端口不写,5.5R8之前的版本目的地址只需要写最小即可,5.5R8版本需要同时填写最小端口和最大端口,不然默认最大端口是65535。
- 转换为IP :确认防火墙到该地址是否可达,一般可以连同内网端口一起探测,是否可达。
- 转换端口:确认真实服务器的端口是否开通。
2.3.2 网络不可达
(1)可以使用DNAT配置界面的更多配置的TCP跟踪进行测试。
- TCP端口为内网服务器的真实端口,填写正确之后点击确认。
- 在策略–NAT–SLB服务器状态,查看TCP跟踪的结果,若状态不为OK,即当状态是Failed或者Unknown,都代表防火墙到内网真实服务器的端口不通。
- TCP跟踪配置及查看如下图3和图4所示。
图3
图4
(2)当SLB服务器的状态为Unknown或者Failed之后,可能有以下两个问题:
- 防火墙和服务器之间是路由不可达。
- 防火墙和服务器之间路由可达,但是端口不通。
(3)使用系统–诊断工具–测试工具中的ping进行测试(服务器未禁ping的情况下),如下图5所示:
- 如果ping测试能通,建议排查下层设备,是否对端口有相关限制,确认服务器端是否开放了该端口。
- 如果ping测试不通,那就是防火墙和服务器路由不可达,需要确认防火墙端路由的配置。
(4)可以在防火墙ping的时候,通过命令行抓包进行确认(请在设备CPU较低情况下进行debug操作,抓包完毕请及时关闭debug):
进入防火墙命令行,定义过滤条件:
定义过滤条件:
SG-6000# debug dp filter dst-ip 192.168.0.1 protocal icmp
开启抓包命令:
SG-6000# debug dp basic
SG-6000[DBG]# debug dp snoop
SG-6000[DBG]# debug dp drop
SG-6000[DBG]# debug self
查看抓包结果:
SG-6000[DBG]# show logg debug
观察报文的最后:确认下面192.168.0.254位置显示的地址址是否是防火墙的接口地址,L3 forward, out if is ethernet0/5是否是防火墙的和服务器的互联接口,如果是的话,建议排查下层设备是否正常转发;如果不是,检查防火墙路由配置。
L3 forward, out if is ethernet0/5, mtu 1500, pkt_size 98fragment_and_xmt_stats: l3 len 84, bufs 1, buf_data_size 84, mtu 1500, next pak (nil)1198182: (o) len=98 001c.545f.34dd->001c.5456.96a0/800192.168.0.254->192.168.0.1/1vhl=45, tos=00, id=0, frag=0000, ttl=128, tlen=84icmp:type=8, code=0
2.3.3 内网用户访问DNAT不通
2.3.3.1 策略未放行
内网终端访问DNAT映射后的地址,需要访问源目安全域均为内网接口的安全域,即当内网终端用户上网和服务器上网进入防火墙的接口为同一个时,源目安全域相同,需要放行如trust->trust的内网安全策略,其他的参数配置请参考上面的3.2DNAT基础配置。
2.3.3.2 网络环境导致没回包
终端用户访问DNAT流量如下图红色箭头,但是服务器回包流量路径如下图黑色箭头,所以导致防火墙没有收到回包,无法访问DNAT映射。如下图6拓扑所示:
图6
规避办法:
可以在防火墙上配置SNAT,将访问流量的源地址转换成防火墙的内网口去访问,这样服务器回数据包就会回给防火墙,能够正常访问,SNAT规避的配置如下图7所示:
- 源地址:DNAT配置中的源地址。
- 目的地址:DNAT配置的目的地址,一般为公网/出口地址。
- 出接口:防火墙的内网口。
- 服务:DNAT配置的服务,而不是内网服务器的真实端口
图7
2.3.3.3 高级路由导致数据包发错接口
在某些用户场景下,有使用源路由或者策略路由规定内网的某些IP地址段走指定的下一跳的情况,如下图8所示,内网的终端用户被源路由指到了电信的出口,这个时候,该终端用户访问DNAT的数据包,就会匹配源路由,指到电信的下一跳地址,导致DNAT访问不通。
图8
规避办法:
配置策略路由将流量引流回来,如下图9和图10所示:
- 源地址:内网终端用户的地址
- 目的地址:内网服务器的真实地址!!!
- 服务: 内网服务器的真实服务端口!!!
- 下一跳:指向真实服务器的下一跳网关地址。
图9
图10