NAT Server主要用于公网用户访问私网内部服务器, 可以提供一对一的地址转换,通过将公网IP与私网服务器IP一对一映射,也可以提供端口转换。
一、实验拓扑
实验拓扑图-1要求实现Untrust HTTP Client访问Trust区域HTTP Server,在FW1部署NAT Server实现。
1.1 基本配置
表1是拓扑中接口、IP地址、安全区域规划:

1.2 实验步骤
步骤1、在FW1上将各接口划入相应安全区域
system-view //进入system-view
Enter system view, return user view with Ctrl+Z.
[FW1]firewall zone trust
[FW1-zone-trust]add interface GigabitEthernet 1/0/1//将FW1的内网接口G1/0/1划入Trust区域
[FW1-zone-trust]quit
[FW1]firewall zone untrust
[FW1-zone-untrust]add interface GigabitEthernet 1/0/2 //将FW1的外网接口G1/0/2划入Utrust区域
[FW1-zone-untrust]quit
步骤2、在FW1上定义NAT Server
[FW1]nat server protocol tcp global 202.100.1.1 8080 inside 172.16.1.1 80
//将内网HTTP Server的私网IP映射到公网IP、将HTTP知名端口80映射成8080端口
步骤3、在FW1配置安全策略
[FW1]security-policy
[FW1-policy-security]rule name A
[FW1-policy-security-rule-A]source-address 100.1.1.1 32
[FW1-policy-security-rule-A]destination -address 172.16.1.1 32 //匹配NAT Server转换后的私网IP地址,外网Client访问内网Server的报文流首先会被Server-map表处理,下文看实验分析
[FW1-policy-security-rule-A]source-zone untrust
[FW1-policy-security-rule-A]destination-zone trust
[FW1-policy-security-rule-A]service http//允许HTTP业务通过
[FW1-policy-security-rule-A]action permit
步骤4、在FW1、R1与R2上配置路由
[FW1]ip route-static 0.0.0.0 0.0.0.0 202.100.1.2 //在FW1配置默认路由指向公网下一跳
[R1]ip route-static 0.0.0.0 0.0.0.0 10.1.11.2 //在R1配置默认路由指向FW1边界
[FW1]ip route-static 172.16.1.0 255.255.255.0 10.1.11.1 //在FW1配置去往私网主机的路由
二、实验分析
A、NAT Server会生成Server-map表项,这个表项记录着公网IP、端口与私网HTTP Server私网IP、端口的映射:
B、公网HTTP Client访问私网HTTP Server,注意访问的是NAT Server映射的公网IP、端口:
我们去分析一下转发流程,HTTP Client 源IP 100.1.1.1去往HTTP Server 目的IP 202.100.1.1:8080的TCP报文流抵达FW1,第一步FW1首先查询NAT Server生成的Server-map表项,基于正向条目ANY -> 202.100.1.1:8080 [172.16.1.1:80]将公网目的IP、端口映射成私网HTTP Server的IP 172.16.1.1、端口80,其实NAT Server就是把私网服务器的IP、端口以公网IP、端口方式放在外网,外网主机只要访问这个公网IP、端口,相当于就是访问内网服务器。第二步需要通过安全策略检查,基于源IP 100.1.1.1查路由表判断源zone是Untrsut,基于目的IP 172.16.1.1查询路由表判断目的zone是Trust,安全策略检查之后,FW1创建会话:
后续私网HTTP Server的响应报文源IP 172.16.1.1:80 -> 100.1.1.1命中FW1会话表项将172.16.1.1:80映射回202.100.1.1:8080转发。了解NAT Server正向条目之后,我们发现还有一条反向条目172.16.1.1[202.100.1.1] -> ANY,它的作用用于私网HTTP Server主动公网主机,当HTTP Server源IP 172.16.1.1访问公网主机,源IP会通过反向条目转换为公网IP 202.100.1.1,无需在FW1配置源NAT,只要安全策略放通即可。注意NAT Server生成的Server-map表项是没有老化时间的,当NAT Server配置被删掉,Server-map表也就老化了。
三、NAT Server场景的环路
图1和上文NAT Server没什么太大区别,只是FW1 NAT Server定义的Global地址是202.100.1.100与G1/0/2公网接口不在一个网段,配置与上文一样,做以下修改:
[FW1]nat server protocol tcp global 202.100.1.100 8080 inside 172.16.1.1 80
//将内网HTTP Server的私网IP映射到公网IP、将HTTP知名端口80映射成8080端口
[R2]ip route-static 202.100.1.100 32 202.100.1.2
//在R2配置到达FW1上NAT Server中Global公网IP的路由
图2通过NAT Server生成的Server-map表项是为TCP协议生成的,只有符合特征的TCP报文流命中此表项才会执行转换。HTTP Client访问202.100.1.100:8080的TCP流量到达FW1,命中Server-map表项中的正向条目将目的IP转换成内网HTPP Server的IP 172.16.1.1、目的端口转换成80,好像没环路问题啊。考虑在R2直接ping 202.100.1.100呢?分析R2是有去往202.100.1.100的路由的,所以R2产生的ICMP报文源IP 202.100.1.2 ->
目的IP 202.100.1.100被会FW1接收到,FW1收到这个ICMP报文,无法命中Server-map表项,所以只能查路由表转发,命中默认路由转发回R2(FW1从G1/0/2接口收到这个ICMP报文又从这个接口送出,因为G1/0/2接口划入Untrust区域,所以这个ICMP报文始终在Untrust区域流动,如果报文在同一个安全区域内流动默认不受安全策略控制),最终这个ICMP报文会FW1、R2之间互相踢来踢去,环路就产生了:
这个ICMP报文IP TTL减为1环路才会消失,大量的ICMP报文再R2、FW1之间流动,这可不是什么好事。NAT Server给我们提供了解决方法,可以通过配置NAT Server Global地址的Unr路由解决:nat server protocol tcp global 202.100.1.100 8080 inside 172.16.1.1 80 unr-route:
追加unr-route参数,FW1会为NAT Server Global地址自动生成一条防环的Unr主机路由存入路由表。这样的话FW1接收到去往200.100.1.100的ICMP报文匹配最精确的Unr主机路由,FW1就不会转发回R2,从而规避掉环路。
下期继续讨论NAT Server!!验证NAT Server所生成的反向条目,以及公网环境下通过NAT Server Telnet内网设备、防火墙。
网友评论