Print

某局点用nat global-policy实现内网用户通过公网地址访问内网服务器(内访问)不通

23小时前 发表

组网及说明

组网如下:

服务器对外提供8089和1188端口的服务,本案例以8089实现为准,1188端口完全一样。


现在要实现内网PC  192.168.10.64  访问电信口公网地址1.1.1.1 ,在防火墙上做源目地址转换,访问内网服务器 172.16.0.2。

这个流量来回都走G1/0/2内网口。


告警信息

不涉及

问题描述

现网配置如下,发现配置完毕后报文被服务器RST了,三次握手建立失败。

 #
nat global-policy
 rule name test
 description NAT
 service 8089
 source-zone trust
 destination-ip 1.1.1.1
 action snat easy-ip
 action dnat ip-address 172.16.0.2 local-port 8089
#

# policy-based-route PBR permit node 5

 if-match acl 3007

 apply next-hop 192.168.250.1 


#

 policy-based-route PBR permit node 20

 if-match acl 3001

 apply output-interface GigabitEthernet1/0/1 


#

acl advanced 3007

 rule 0 permit tcp destination 172.16.0.2 0 destination-port eq 8089


acl advanced 3001

 rule 5 permit ip source 192.168.3.0 0.0.0.255 

 rule 10 permit ip source 192.168.4.0 0.0.0.255

 rule 15 permit ip source 172.16.0.0 0.0.255.255

 rule 20 permit ip source 192.168.100.0 0.0.0.255

 rule 25 permit ip source 192.168.5.0 0.0.0.255

 rule 30 permit ip source 192.168.12.0 0.0.0.255

 rule 35 permit ip source 192.168.6.0 0.0.0.255

 rule 40 permit ip source 192.168.7.0 0.0.0.255

 rule 50 permit ip source 192.168.15.0 0.0.0.255

 rule 55 permit ip source 172.18.0.0 0.0.255.255


抓包如下(ACL写nat转换前后的,然后web界面全局抓包):



过程分析

分析抓包,发现我们防火墙转发了syn_ack,但是PC没有收到,所以又重传了两次,最终被服务器RST了。

查看syn_ack报文的目的MAC不是G1/0/2对端直连交换机接口的MAC,说明墙转发的时候没有按照我们设想的转发到1/0/2口发出。

debug看确实如此:







如上可以看到,NAT转换都是正常的,没有问题,说明我们配置的全局NAT是正确的。

但是如上红框,发现回包源目都转换完毕后的流量走了错误的接口出去了。


上述debug可以看到,设备处理回程syn_ack报文的时候,先根据会话,将流量的目的地址转换了,随后立即查设备的路由表,然后再根据会话转源地址。


所以,上述syn_ack报文  s= 172.16.0.2, d= 192.168.10.64,会匹配上我们配置的policy-based-route PBR permit node 20,走G1/0/1出去。

解决方法

在ACL 3007中添加回程的  s= 172.16.0.2, d= 192.168.10.64  :

#
nat global-policy
 rule name test
 description NAT
 service 8089
 source-zone trust
 destination-ip 1.1.1.1
 action snat easy-ip
 action dnat ip-address 172.16.0.2 local-port 8089
#

# policy-based-route PBR permit node 5

 if-match acl 3007

 apply next-hop 192.168.250.1 


#

 policy-based-route PBR permit node 20

 if-match acl 3001

 apply output-interface GigabitEthernet1/0/1 


#

acl advanced 3007

 rule 0 permit tcp destination 172.16.0.2 0 destination-port eq 8089

 rule 5 permit tcp destination 172.16.0.2 0 destination-port eq 1188    //添加这个配置


acl advanced 3001

 rule 5 permit ip source 192.168.3.0 0.0.0.255 

 rule 10 permit ip source 192.168.4.0 0.0.0.255

 rule 15 permit ip source 172.16.0.0 0.0.255.255

 rule 20 permit ip source 192.168.100.0 0.0.0.255

 rule 25 permit ip source 192.168.5.0 0.0.0.255

 rule 30 permit ip source 192.168.12.0 0.0.0.255

 rule 35 permit ip source 192.168.6.0 0.0.0.255

 rule 40 permit ip source 192.168.7.0 0.0.0.255

 rule 50 permit ip source 192.168.15.0 0.0.0.255

 rule 55 permit ip source 172.18.0.0 0.0.255.255


总结,转源转目的的全局NAT的处理流程如下:

1. 正向: 转目的-->查路由-->找到出接口后转源


2. 反向:匹配会话转目的-->查路由-->匹配会话转源


尤其要注意,反向查路由在转目的之后,转源之前。