大家好,强叔接着上回书继续和大家聊聊源NAT。除了NAT No-PAT、NAPT和easy-ip,华为防火墙还支持两种源NAT功能,如下所示:
Smart NAT(仅高端防火墙USG9000系列支持)
三元组NAT(仅高端防火墙USG9000系列支持)
Smart NAT
Smart NAT为何称为“聪明的NAT”?这要从他和NAT No-PAT、NAPT的关联性说起:
我们假设Smart NAT使用的地址池中包含N个IP,其中一个IP被指定为预留地址,另外N-1个地址构成地址段1(section 1)。进行NAT转换时,Smart NAT会先使用section 1做NAT No-PAT类型的转换,当section 1中的IP都被占用后,才使用预留IP做NAPT类型的转换。
其实Smart NAT可以理解为是对NAT No-PAT功能的增强,他防止了用户数量激增导致大量用户不能上网的情况,即克服了NAT No-PAT的缺点――只能让有限的用户上网,当用户数量大于地址池中IP数量时,后面的用户将无法上网,只能等待公网IP被释放(会话老化)。Smart NAT预留一个公网IP做NAPT后,无论有多少新增用户需要上网,都能满足其需求。
由于eNSP不支持高端防火墙,所以我们通过一个实际的组网来看下Smart NAT的实现过程。
Smart NAT的配置和NAT No-PAT的配置几乎完全一致,区别只是在地址池中指定了一个IP作为预留IP,下面给出关键配置:
例1 配置Smart NAT
#
nat address-group 1
mode no-pat //模式要选择no-pat
smart-nopat 30.1.1.21 //预留一个IP做NAPT
section 1 30.1.1.20 30.1.1.20 //section中不能包含预留IP!
#
policy interzone trust untrust outbound
policy 1
action permit
policy source 10.1.1.0 0.0.0.255
policy source 20.1.1.0 0.0.0.255
#
nat-policy interzone trust untrust outbound
policy 1
action source-nat
address-group 1
policy source 10.1.1.0 0.0.0.255
policy source 20.1.1.0 0.0.0.255
先从PC2上ping PC3,再从PC1上ping PC3(请注意这个顺序),在USG9000上查看会话表(中括号[]内的是NAT转换后的IP和端口)。可以看到PC2(20.1.1.11)只转换了IP,没有转换端口,也就是说做了NAT No-PAT转换。而PC1(10.1.1.11)的IP和端口都进行了转换,且转换后的IP就是预留IP(30.1.1.21),所以说他做了NAPT转换。
我们再看Server-map表,结果也符合NAT No-PAT和NAPT功能的特点:只有NAT No-PAT类型的表项,NAPT转换没有Server-map表。
三元组NAT
三元组NAT中的“三元”是指:源IP、源port和协议类型。
三元组NAT功能的产生基于这样一个事实:现今大部分网络主机都处在NAT设备后,而P2P应用(如QQ、BT)是人们最常用的软件之一。当NAT遇到P2P的时候,产生的不是完美的“NAT-P2P”,而是……你可能下载不了BT资源、无法和女神聊QQ了。T_T
事实上,当有NAT设备存在时,如果要保证内网用户正常使用P2P软件,往往还需要其他网络设备来配合。而华为高端防火墙USG9000系列可以完美地解决这个问题:通过使用三元组NAT功能,防火墙可以在做NAT网关的同时,支持P2P业务的正常交互,完全不需要其他设备!
为了引出三元组NAT的特点,我们先通过下图来看看P2P业务的一般交互流程。PC1和PC2是两台运行P2P业务的客户端,他们运行P2P应用时首先会和P2P服务器进行交互(登录、认证等操作),服务器会记录客户端的地址和端口。当PC2需要下载文件时,服务器会将拥有该文件的客户端的地址和端口发送给PC2(例如PC1的地址和端口),然后PC2会向PC1发送请求,并从PC1上下载文件。
如果PC1是内网主机,在防火墙上做NAT转换,此时P2P服务器记录的就是PC1做NAT转换后的地址和端口。也许有人会问:PC1做NAT转换后的地址和端口不会变化吗?答案是会变化,但是PC1会定期向服务器发送报文(用于认证等),服务器也就记录了最新的NAT后地址和端口,所以可以保证PC2能够成功访问PC1。
上述过程看起来似乎没有问题,但是对于防火墙来说,这里有两个问题:
1、PC1没有主动访问过PC2,一般来说,防火墙不会允许PC2主动访问PC1。
2、PC1访问服务器时,NAT后的地址和端口只能被服务器用来访问PC1,其他主机(例如PC2)不能利用这个地址和端口访问PC1,请求报文在防火墙上将被丢弃。
三元组NAT可以完美地解决上述两个问题,依靠的正是以下两个特点:
1、支持外网主动访问
无论内网主机是否主动访问过某个外网主机,只要外网主机知道内网主机NAT转换后的地址和端口,就可以主动向该内网主机发起访问。
2、动态对外端口一致性
内网主机做NAT转换后的地址和端口将在一段时间内保持不变,在此时间内段,内网主机固定地使用此NAT后地址和端口访问任意外网主机,任意外网主机也可以通过此NAT后地址和端口访问内网主机。
从实现原理角度讲,三元组NAT是通过Server-map表使外网主机可以主动访问内网主机,并保证NAT转换关系在一段时间内保持不变。下面通过一个例子来说明会更容易理解(我们还是用实际设备来组网)。
三元组NAT和NAT No-PAT在配置上的区别仅在于选择不同的源NAT模式,下面给出关键配置:
例2 配置三元组NAT
#
nat address-group 1
mode full-cone global //做三元组NAT转换,global表示Server-map表不限制域间关系
section 1 30.1.1.20 30.1.1.20
#
nat-policy interzone trust untrust outbound
policy 1
action source-nat
address-group 1
policy source 20.1.1.0 0.0.0.255
从PC1上ping PC2,在会话表中可以看到源IP和端口都做了NAT转换。
再看Server-map表,可以看到类型是FullCone(全圆锥),即三元组NAT的Serverv-map表(关于FullCone的内容,请见下面的附录内容)。在Server-map表没有老化前,三元组的源Server-map表项(FullCone Src)作用是:内网主机访问任意外网主机(ANY)时,NAT转换后的地址和端口都是30.1.1.20:3536。目的Server-map表项(FullCone Dst)的作用是:任意外网主机(ANY)都可以通过30.1.1.20:3536来访问内网主机20.1.1.11。通过这两条Server-map表项即实现了“外网主机可以主动访问内网主机,并保证NAT转换关系在一段时间内保持不变”的要求。
由于实验室环境限制,此处无法通过P2P应用来验证三元组NAT的另一个特点:PC1没有访问过的主机可以通过30.1.1.20:3536主动访问PC1。实际上,如果有一台P2P客户端PC3,他是可以通过30.1.1.20:3536成功访问PC1的。
至此,华为防火墙支持的源NAT功能都介绍完了,下次我们将介绍目的NAT相关内容,敬请期待!
强叔提问:
1、小伙伴们,你们还记得有哪几类源NAT功能会生成Server-map表吗?
2、各种源NAT功能都应用在什么场景下?
大家对源NAT还有什么疑问?欢迎留言~
附录:
根据RFC3489中的内容,Full Cone(全圆锥)是4种NAT端口映射方式中的一种,其他3种分别为:Restricted Cone(受限圆锥)、Port Restricted Cone(端口受限圆锥)和Symmetric(对称型)。
全圆锥NAT的模型是:内网主机做NAT转换后的地址和端口在一段时间内保持不变,不会因为目的地址不同而不同,所以内网主机可以使用相同的NAT后三元组(源IP、源端口、协议)访问不同外网主机。当NAT后三元组确定后,外网主机也都可以通过该三元组访问内网用户。(题外话:之所以叫“全圆锥”,应该就是根据“一对多”的模型命名的吧。)
对称型NAT的模型是:内网主机会根据不同的目的地址做NAT转换,NAT转换后的地址和端口一般是不相同的。由于对不同外网主机呈现不同的三元组(源IP、源端口、协议),所以外网主机只能通过访问对应的NAT后三元组才能进入内网,即需要限定目标用户和端口,因此对称型NAT也称为五元组NAT(源IP、源端口、目的IP、目的端口、协议)。
华为防火墙除了支持全圆锥NAT,也支持对称型NAT,NAPT功能即为五元组NAT。