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。
  • 转换端口:指定真实服务器的服务端口。

 

山石防火墙配置vlan 山石防火墙配置上网_运维

图1 

(2)DNAT配置完成之后需要针对该DNAT放行相关策略:

  • 源安全域:公网接口的安全域,即DNAT配置中目的地址所在接口的安全域。
  • 源地址:DNAT配置中的源地址。
  • 目的安全域:真实服务器所在内网口的接口安全域,即DNAT配置中的转换为IP的IP地址所在的安全域。
  • 目的地址:DNAT配置的目的地址,一般为公网地址。
  • 服务:DNAT配置的服务,而不是内网服务器的真实端口。

山石防火墙配置vlan 山石防火墙配置上网_内网_02

图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所示。

山石防火墙配置vlan 山石防火墙配置上网_服务器_03

图3

山石防火墙配置vlan 山石防火墙配置上网_网络_04

图4

(2)当SLB服务器的状态为Unknown或者Failed之后,可能有以下两个问题:

  1. 防火墙和服务器之间是路由不可达。
  2. 防火墙和服务器之间路由可达,但是端口不通。

(3)使用系统--诊断工具--测试工具中的ping进行测试(服务器未禁ping的情况下),如下图5所示:

山石防火墙配置vlan 山石防火墙配置上网_山石防火墙配置vlan_05

 

  • 如果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 98

fragment_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/800

192.168.0.254->192.168.0.1/1

vhl=45, tos=00, id=0, frag=0000, ttl=128, tlen=84

icmp:type=8, code=0

2.3.3 内网用户访问DNAT不通

2.3.3.1 策略未放行

内网终端访问DNAT映射后的地址,需要访问源目安全域均为内网接口的安全域,即当内网终端用户上网和服务器上网进入防火墙的接口为同一个时,源目安全域相同,需要放行如trust->trust的内网安全策略,其他的参数配置请参考上面的3.2DNAT基础配置。

2.3.3.2 网络环境导致没回包

终端用户访问DNAT流量如下图红色箭头,但是服务器回包流量路径如下图黑色箭头,所以导致防火墙没有收到回包,无法访问DNAT映射。如下图6拓扑所示:

山石防火墙配置vlan 山石防火墙配置上网_运维_06

图6

规避办法:

可以在防火墙上配置SNAT,将访问流量的源地址转换成防火墙的内网口去访问,这样服务器回数据包就会回给防火墙,能够正常访问,SNAT规避的配置如下图7所示:

  • 源地址:DNAT配置中的源地址。
  • 目的地址:DNAT配置的目的地址,一般为公网/出口地址。
  • 出接口:防火墙的内网口。
  • 服务:DNAT配置的服务,而不是内网服务器的真实端口

山石防火墙配置vlan 山石防火墙配置上网_山石防火墙配置vlan_07

 图7

2.3.3.3 高级路由导致数据包发错接口

在某些用户场景下,有使用源路由或者策略路由规定内网的某些IP地址段走指定的下一跳的情况,如下图8所示,内网的终端用户被源路由指到了电信的出口,这个时候,该终端用户访问DNAT的数据包,就会匹配源路由,指到电信的下一跳地址,导致DNAT访问不通。

山石防火墙配置vlan 山石防火墙配置上网_运维_08

 图8

规避办法:

配置策略路由将流量引流回来,如下图9和图10所示:

  • 源地址:内网终端用户的地址
  • 目的地址:内网服务器的真实地址!!!
  • 服务: 内网服务器的真实服务端口!!!
  • 下一跳:指向真实服务器的下一跳网关地址。

山石防火墙配置vlan 山石防火墙配置上网_内网_09

图9

山石防火墙配置vlan 山石防火墙配置上网_服务器_10

图10