当Internet技术初兴时,人们不会想到他会发展得如此迅猛,短短二十年已然深入到社会的方方面面。与此同时,很多之前没有考虑到的问题也都暴露出来,比如IP地址资源正在逐渐枯竭。人们在寻求IPv4替代方案的同时,也在积极研究各种技术来减少对IP地址的消耗,其中最出色的技术之一就是NAT技术(人们平时常说的NAT其实就是源NAT)。
源NAT技术通过对报文的源地址进行转换,使大量私网用户可以利用少量公网IP上网,大大减少了对公网IP地址的需求。
下图示意了源NAT转换的过程:当上网流量到达防火墙时,报文的私网源IP将被转换为公网IP;当回程报文到达防火墙时,报文的公网目的IP将被转换为私网IP。整个NAT转换过程对于内、外网主机来说是完全透明的。

NAT篇 一墙当关,万夫上网——源NAT(上篇)_万夫上网——源NAT(上篇)

 

在介绍各种源NAT功能的特点和异同前,先介绍一下“NAT地址池”。NAT地址池是一个虚拟的概念,它形象地把“公网IP地址的集合”比喻成一个“放IP地址的池子或容器”,防火墙在应用源NAT功能时就是从地址池中挑选出一个公网IP,然后对私网IP进行转换。挑选哪个公网IP是随机的,和配置时的顺序、IP大小等因素都没有关系。

例1 创建一个NAT地址池(以eNSP中的USG5500系列为例)
#                                                                               
nat address-group 1  202.169.1.2  202.169.1.5

下面通过一个例子来说明地址池的使用方法。如下图所示,内网用户群(10.10.2.1-10.10.2.10)最初都在一个区域内,有两个公网IP(210.1.1.10和210.1.1.11)可用于做NAT转换,由于无需对这些用户进行区分,所以可将2个公网IP放在同一地址池内。上网流量到达防火墙后,将从地址池中随机选取一个公网IP做NAT转换。
网络运行一段时间后,需要对用户进行区分,使用户群1(10.10.2.1-10.10.2.5)和用户群2(10.10.2.6-10.10.2.10)以不同的公网IP上网。由于NAT转换是随机选取公网IP的,所以2个公网IP在同一地址池内是无法满足此要求的。此时可将2个公网IP分别放在不同的地址池内,并指定用户群1使用地址池1做NAT转换,用户群2使用地址池2做NAT转换。这样,两个用户群做NAT转换后的IP就是不同的了。

NAT篇 一墙当关,万夫上网——源NAT(上篇)_万夫上网——源NAT(上篇)_02

 

华为防火墙支持的源NAT功能如下表所示,且听强叔一一道来他们的特点和异同。

 

NAT类型

私网IP和公网IP的数量对应关系

是否转换端口

NAT No-PAT

一对一

NAPT

多对一

多对多

出接口地址方式(easy-ip

多对一

Smart NAT

(仅高端防火墙USG9000系列支持)

一对一

(预留IP做多对一转换)

(预留IP做端口转换)

三元组NAT

(仅高端防火墙USG9000系列支持)

多对一

多对多

 

 

NAT No-PAT
“No-PAT”表示不进行端口转换,所以NAT No-PAT只转换IP地址,故也称为“一对一IP地址转换”。我们使用如下组网进行演示:

NAT篇 一墙当关,万夫上网——源NAT(上篇)_NAT篇 一墙当关_03

 

在FW上配置源NAT模式,选择为no-pat;将公网IP地址202.30.1.1和202.30.1.2加入NAT地址池1;配置NAT策略,即对流量设置各种要求项,只有完全匹配上这些要求的流量才能利用NAT地址池1中的IP做NAT转换(如果要针对源IP设置NAT策略,那么应该是做源NAT转换前的IP)。

例2 配置NAT No-PAT
#                                                                               
 nat address-group 1 202.30.1.1 202.30.1.2                                            
#                                                                               
nat-policy interzone trust untrust outbound                                           
 policy 1                                                                        
  action source-nat                                                               
  policy source 192.168.0.0  0.0.0.255                                               
  address-group 1 no-pat    //使用地址池1做NAT No-PAT转换                       

 

这里强叔要强调两个配置:安全策略和黑洞路由。

安全策略和NAT策略在字面上长的挺像,但是二者各司其职:安全策略检验是否允许流量通过,NAT策略检验是否对流量进行NAT转换。由于防火墙检验流量是否符合安全策略的操作发生在检查NAT策略之前,所以如果要针对源IP设置安全策略,则该IP应该是做源NAT转换前的IP

例3 配置安全策略
#                                                                                
policy interzone trust untrust outbound                                                 
 policy 1                                                                         
  action permit                                                                    
  policy source 192.168.0.0  0.0.0.255                                                

黑洞路由是一个让路由“有来无回”的路由,它的效果就是让设备丢弃命中该路由的报文。针对地址池中的公网IP必须配置黑洞路由,目的是防止产生路由环路。

例4 配置黑洞路由
#                                                                              
ip route-static 202.30.1.1  255.255.255.255 NULL0                                    
ip route-static 202.30.1.2  255.255.255.255 NULL0                                            

从PC1上ping PC2,在FW上查看会话表和Server-map表。

从会话表中可以看到PC1(192.168.0.2)的IP进行了NAT转换(中括号[]内的是NAT转换后的IP和端口),而端口没有转换。

NAT篇 一墙当关,万夫上网——源NAT(上篇)_NAT篇 一墙当关_04

 

从Server-map表中可以看到NAT类型是No-PAT、NAT转换前后的IP地址,由于端口没有转换,所以并没有显示端口信息。这里可以注意到正、反向Server-map表中的目的IP均为any,也就是说只要Server-map表没有老化,理论上任何外网主机只要知道NAT转换后的IP,都可以主动访问内网主机的公网IP。

NAT篇 一墙当关,万夫上网——源NAT(上篇)_万夫上网——源NAT(上篇)_05

 

我们再从PC1上ping Server 2,在FW再上查看会话表和Server-map表。各位发现了吗?做NAT转换后的公网IP还是202.30.1.1,而不是202.30.1.2。这说明:做源NAT时,虽然选择哪个公网IP是随机的,但是这个公网IP由私网源IP决定,和目的IP无关。只要私网源IP不变、地址池相关配置不变,同一个私网源IP就会固定的转换为同一个公网IP。

NAT篇 一墙当关,万夫上网——源NAT(上篇)_NAT篇 一墙当关_06

NAT篇 一墙当关,万夫上网——源NAT(上篇)_NAT篇 一墙当关_07

 

NAPT
NAPT表示网络地址端口转换,即同时对IP地址和端口号进行转换,也可称为PAT(PAT不是只转换端口号的意思,而是IP、端口号同时转换)。NAPT是最常用的源NAT技术之一,他可以实现用少量公网IP满足大量私网用户上网的需求。
NAPT和NAT No-PAT在配置上的区别仅在于选择不同的源NAT模式:NAPT的nat-policy在指定NAT地址池时,不配置命令关键字“no-pat”,其他配置都是类似的。

例5 NAPT和NAT No-PAT配置上的差异点
#                                                                               
nat-policy interzone trust untrust outbound                                             
 policy 1                                                                        
  address-group 1       //不配置no-pat                                                        

从PC1上ping PC2,在FW上查看会话表。可以看到源IP和源端口都做了NAT转换,而且端口号是顺序转换的。

NAT篇 一墙当关,万夫上网——源NAT(上篇)_NAT篇 一墙当关_08

 

再看Server-map表,没有显示信息?没错,NAPT就是没有Server-map表!原因其实很好理解,NAPT主要用于让大量用户上网,如果每个连接都建立Server-map表,则会占用大量的设备资源。

NAT篇 一墙当关,万夫上网——源NAT(上篇)_万夫上网——源NAT(上篇)_09 

 

从PC1上ping Server 2,在FW上查看会话表。我们发现NAPT也是由源IP决定转换后的公网IP,且端口顺序转换。端口从2048开始转换的现象说明:对于不同的连接来说, NAT处理过程是彼此独立的。只要五元组不完全相同,就不用担心NAT转换冲突的问题(对于现在的网络通信来说,五元组完全一致的情况发生概率非常小)。

NAT篇 一墙当关,万夫上网——源NAT(上篇)_万夫上网——源NAT(上篇)_10

 

出接口地址方式(easy-ip)
出接口地址方式是利用出接口的公网IP做源NAT转换,适用于公网IP非常少或接口动态获取IP的场景(仅中低端防火墙支持接口动态获取IP)。

easy-ip的NAT转换方式和NAPT一样,都是同时转换IP和端口。但是在具体配置上,高端防火墙和中低端防火墙是不一样的:

  • 高端防火墙需要配置NAT地址池,并将出接口IP配置在地址池中。实际上就是配置NAPT功能,只不过出接口IP和NAT地址池中的IP一样了。

  • 中低端防火墙不需要配置NAT地址池,而是在NAT策略中指定做easy-ip转换。

我们使用如下组网进行演示。easy-ip无需配置NAT地址池,只需在NAT策略中指定利用哪个接口做easy-ip。安全策略的配置可以参考上面的NAT No-PAT,easy-ip不用配置黑洞路由。

NAT篇 一墙当关,万夫上网——源NAT(上篇)_万夫上网——源NAT(上篇)_11

 

例6 配置easy-ip
#                                                                               
nat-policy interzone trust untrust outbound                                           
  policy 1                                                                       
   action source-nat                                                              
   source-address 192.168.0.0 0.0.0.255                                              
   easy-ip GigabitEthernet0/0/3     //源NAT转换后的公网IP为接口GE0/0/3的IP        

分别从PC1和PC2上ping Server,查看到会话表如下所示(部分PC1的会话已老化,GE0/0/3的IP是210.10.2.1/24)。可以看到源IP和端口都做了NAT转换,且转换后的端口是顺序增大的。这说明:虽然源IP不同,但是NAT转换都走同一个流程,所以端口号顺序增大。此外,和NAPT一样,easy-ip也是没有Server-map表的。

NAT篇 一墙当关,万夫上网——源NAT(上篇)_NAT篇 一墙当关_12