由于NATServer配置错误导致内网用户无法通过域内NAT访问内部服务器公网地址

发布时间:  2014-09-20 浏览次数:  374 下载次数:  0
问题描述
组网结构
防火墙通过nat server映射将公网IP地址映射到内网服务器上.内网用户通过nat outbound上公网.

内网用户无法通过域内NAT的方式访问内网服务器的公网IP地址.
处理过程
客户对外体现有两个域,一个是dx(电信),一个是lt(联通),对内是trust域,所以外网在访问内网服务器的时候,防火墙上配置了基于域的NAT SERVER,举例如下:
nat server 18 zone dx protocol tcp global 117.40.x1.y1  ftp inside 10.72.90.15 ftp 
nat server 19 zone lt protocol tcp global 220.248.x2.y2 ftp inside 10.72.90.15 ftp
所有从dx域过来的访问117.40.x1.y1的ftp业务,可以映射到内网服务器10.72.90.15上,从lt域过来的访问220.248.x2.y2的ftp业务,也可以映射到内网服务器10.72.90.15上.
客户使用域内NAT的功能,想让内网用户也通过公网地址访问内网服务器。
nat address-group 10 1.1.1.1 1.1.1.1
nat-policy zone trust
policy 0
  action source-nat
  address-group 10

但是内网用户一直无法访问.从ftp会话来看,并没有作目的NAT映射.
ftp VPN: public -> public 
  Zone: trust-> dx  TTL: 00:00:05 Left: 00:00:04
  Interface: G0/0/1  Nexthop: 117.40.138.65  MAC: 00-00-00-00-00-00
  <-- packets:0 bytes:0   --> packets:0 bytes:0
  192.168.12.24:3452[1.1.1.1:36847]--> 117.40.x1.y1:23

原因是由于防火墙上配置的是基于域的nat server映射,上面
nat server 18 zone dx protocol tcp global 117.40.x1.y1  ftp inside 10.72.90.15 ftp no_reverse 的配置,只有从dx域过来的报文访问117.40.x1.y1才会进行转化,而内网用户是trust域,所以从trust域过来的用户是不会命中nat server表项的.所以内网用户无法通过公网地址进行访问. 基于域的nat server的含义如下:
1. 从外网访问内网服务器时,如果想要命中基于域的nat server映射,则访问的客户必须属于该域.
2. 从内网访问出去,想要进行源NAT转化,只有出域为该域的时候才会进行转换,如果配置了no-reverse选项,则不进行转换.
从上面两点的分析来看,要想解决内网用户通过公网地址访问内网服务器,可以有如下两个解决办法.
1. 配置基于全局的nat server.
nat server 18 protocol tcp global 117.40.x1.y1  ftp inside 10.72.90.15 ftp
nat server 19 protocol tcp global 220.248.x2.y2 ftp inside 10.72.90.15 ftp 
由于上述两个无法同时配置下去,原因是10.72.90.15在进行源NAT转化时,防火墙无法判断是转换成117.40.x1.y1还是220.248.x2.y2.所以如果要配置下去,则需要增加no-reverse参数,不允许内网服务器主动访问出去的时候,进行NAT转换.配置修改成如下:
nat server 18 protocol tcp global 117.40.x1.y1  ftp inside 10.72.90.15 ftp no-reverse
nat server 19 protocol tcp global 220.248.x2.y2 ftp inside 10.72.90.15 ftp no-reverse

2. 增加基于trust域的nat server配置.
上面已经有了基于dx和lt域的nat server,如果内网用户也想通过公网地址访问内网服务器,则在trust域内也增加一个nat server.配置如下:
nat server 20 zone trust protocol tcp global 117.40.x1.y1  ftp inside 10.72.90.15 ftp
原先两个nat server保留不变.
nat server 18 zone dx protocol tcp global 117.40.x1.y1  ftp inside 10.72.90.15 ftp
nat server 19 zone lt protocol tcp global 220.248.x2.y2 ftp inside 10.72.90.15 ftp
修改后进行ftp测试验证,察看防火墙会话如下:
    ftp VPN: public -> public 
   Zone: trust-> trust TTL: 00:02:00  Left: 00:01:59
    Interface: G0/0/2  Nexthop: 192.168.201.2  MAC: 00-00-00-00-00-00
    <-- packets:11 bytes:2564   --> packets:21 bytes:3564
    192.168.12.24:4236[1.1.1.1:32814]--> 117.40.x1.y1:23[10.72.90.15:23]

根因
没有正确理解基于域的nat server的含义,正确含义如下:
1. 从外网访问内网服务器时,如果想要命中基于域的nat server映射,则访问的客户必须属于该域.
2. 从内网访问出去,想要进行源NAT转化,只有出域为该域的时候才会进行转换,如果配置了no-reverse选项,则不进行转换.
解决方案
1. 配置基于全局的nat server.
nat server 18 protocol tcp global 117.40.x1.y1  ftp inside 10.72.90.15 ftp
nat server 19 protocol tcp global 220.248.x2.y2 ftp inside 10.72.90.15 ftp 
由于上述两个无法同时配置下去,原因是10.72.90.15在进行源NAT转化时,防火墙无法判断是转换成117.40.x1.y1还是220.248.x2.y2.所以如果要配置下去,则需要增加no-reverse参数,不允许内网服务器主动访问出去的时候,进行NAT转换.配置修改成如下:
nat server 18 protocol tcp global 117.40.x1.y1  ftp inside 10.72.90.15 ftp no-reverse
nat server 19 protocol tcp global 220.248.x2.y2 ftp inside 10.72.90.15 ftp no-reverse

2. 增加基于trust域的nat server配置.
上面已经有了基于dx和lt域的nat server,如果内网用户也想通过公网地址访问内网服务器,则在trust域内也增加一个nat server.配置如下:
nat server 20 zone trust protocol tcp global 117.40.x1.y1  ftp inside 10.72.90.15 ftp
原先两个nat server保留不变.
nat server 18 zone dx protocol tcp global 117.40.x1.y1  ftp inside 10.72.90.15 ftp
nat server 19 zone lt protocol tcp global 220.248.x2.y2 ftp inside 10.72.90.15 ftp
修改后进行ftp测试验证,察看防火墙会话如下:
    ftp VPN: public -> public 
   Zone: trust-> trust TTL: 00:02:00  Left: 00:01:59
    Interface: G0/0/2  Nexthop: 192.168.201.2  MAC: 00-00-00-00-00-00
    <-- packets:11 bytes:2564   --> packets:21 bytes:3564
    192.168.12.24:4236[1.1.1.1:32814]--> 117.40.x1.y1:23[10.72.90.15:23]

建议与总结
1. 需要正确理解基于域的nat server的含义.
2. 需要正确理解域内NAT的作用.
3. 域内NAT加上nat server就是典型的双向NAT场景.

END