1.源NAT
源NAT技术对IP报文的源地址进行转换,将私网IP地址转换成公网IP地址
,使大量私网用户可以利用少量公网IP地址访问Internet,大大减少了对公网IP地址的消耗。
源NAT转换的过程如下图所示,当私网用户访问Internet的报文到达防火墙时,防火墙将报文的源IP地址由私网地址转换为公网地址;当回程报文返回至防火墙时,防火墙再将报文的目的地址由公网IP地转换为私网地址。整个NAT转换过程对于内部网络中的用户和Internet上的主机来说是完全透明的。
NAT地址池是一个虚拟的概念,它形象地把“公网IP地址的集合”比喻成一个“放IP地址的池子或容器”,防火墙在进行地址转换时就是从NAT地址池中挑选出一个公网IP地址,然后对私网IP地址进行转换。挑选哪个公网IP地址是随机的,和配置时的顺序、IP地址大小等因素都没有关系。
配置NAT地址池的命令如下:
[FW] nat address-group 1 202.1.1.2 202.1.1.5 //配置包含4个公网地址的地址池
NAT地址池配置完成后,会被NAT策略所引用。NAT策略与安全策略相似,也是由条件和动作组成。不同的是,NAT策略中的动作是“源NAT转换”和“不进行NAT转换”,当动作是“源NAT转换”时必须引用NAT地址池,如下图所示:
多条NAT策略之间存在匹配顺序,如果报文命中了某一条NAT策略,就会按照该NAT策略中引用的地址池来进行地址转换;如果报文没有命中某条NAT策略,则会向下继续查找。
NAT No-PAT
“No-PAT
”表示不进行端口转换
,所以NAT No-PAT方式只转换IP地址
,故也称为“一对一地址转换
”。
下面以图4-3所示的组网环境为例介绍No-PAT方式的配置过程,假设防火墙和Web服务器之间路由可达。
NAT No-PAT方式的配置过程如下:
①配置NAT地址池
[FW] nat address-group 1 202.1.1.2 202.1.1.3 ∥地址池中配置两个公网IP地址
②配置NAT策略
[FW] nat-policy interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] policy 1
[FW-nat-policy-interzone-trust-untrust-outbound-1] policy souree 192.168.0.0 0.0.0.255 ∥匹配条件
[FW-nat-policy-interzone-trust-untrust-outbound-1] action source-nat //动作为进行源NAT转换
[FW-nat-policy-interzone-trust-untrust-outbound-1]address-group 1 no-pat //弓用NAT 地址池并指定转换方式为No-PAT
[FW-nat-policy-interzone-trust-untrust-outbound-1] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quit
③配置安全策略
- 安全策略的作用是控制报文能否通过防火墙;
- NAT策略的作用是对报文进行地址转换;
配置NAT的时候也需要配置安全策略允许报文通过。由于防火墙对报文进行安全策略处理发生在进行NAT策略处理之前
,所以安全策略的源地址应该是进行NAT转换之前的私网地址
。
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] policy 1
[FW-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-1] action permit
[FW-policy-interzone-trust-untrust-outbound-1] quit
[FW-policy-interzone-trust-untrust-outbound] quit
④配置黑洞路由
黑洞路由是一个让报文“有去无回”的路由,它的效果就是让防火墙丢弃命中黑洞路由的报文。为了避免产生路由环路,在防火墙上必须针对地址池中的公网IP地址配置黑洞路由。
[FW] ip route-static 202.1.1.2 32 NULL0
[FW] ip route-static 202.1.1.3 32 NULL 0
NAT No-PAT方式会生成Server-map表,而且生成了正向和反向两条表项。
在NAT No-PAT的转换方式中,一个公网IP地址不能同时被多个私网用户使用,其实并没有起到节省公网IP地址的效果
。
NAPT
NAPT(Network Address and Port Translation)表示网络地址和端口转换,即同时对IP地址和端口进行转换
,也可称为PAT(PAT不是只转换端口的意思,而是IP地址和端口同时转换)。NAPT是
一种应用最广泛的地址转换方式
,可以利用少量的公网IP地址来满足大量私网用户访问Internet的需求
。
NAPT方式和NATNo-PAT方式在配置上的区别仅在于:NAPT方式的NAT策略在引用NAT 地址池时,不配置关键字“no-pat”
,其他的配置都是一样的。
### ①配置NAT地址池
[FW] nat address-group 1 202.1.1.2 202.1.1.3 ∥地址池中配置两个公网IP地址
### ②配置NAT策略
[FW] nat-policy interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] policy 1
[FW-nat-policy-interzone-trust-untrust-outbound-1] policy souree 192.168.0.0 0.0.0.255 ∥匹配条件
[FW-nat-policy-interzone-trust-untrust-outbound-1] action source-nat //动作为进行源NAT转换
[FW-nat-policy-interzone-trust-untrust-outbound-1]address-group 1 //弓用NAT 地址池
[FW-nat-policy-interzone-trust-untrust-outbound-1] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quit
### ③配置安全策略
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] policy 1
[FW-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-1] action permit
[FW-policy-interzone-trust-untrust-outbound-1] quit
[FW-policy-interzone-trust-untrust-outbound] quit
### ④配置黑洞路由
[FW] ip route-static 202.1.1.2 32 NULL0
[FW] ip route-static 202.1.1.3 32 NULL 0
NAPT方式不会生成Server-map表。
出接口地址方式
出接口地址方式(Easy-IP) 指的是利用出接口的公网IP地址作为NAT转换后的地址,也同时转换地址和端口
,一个公网IP地址可以同时被多个私网用户使用,可以看成是NAPT方式的一种“变体”
。
出接口地址方式(Easy-IP)在公网IP是动态变化的情况下使用。
Easy-IP方式无需配置NAT地址池,也不用配置黑洞路由,只需在NAT策略中指定出接口即可,下面以图4-4所示的组网环境为例介绍Easy-IP方式的配置过程。
(1)配置NAT策略
[FW] nat-policy interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] poliey 1
[FW-nat-policy-interzone-trust-untrust-outbound-1] policy souree 192.168.0.0 0.0.0.255
[FW-nat-policy-interzone-trust-untrust-outbound-1] action souree-nat
[FW-nat-policy-interzone-trust-untrust-outbound-1]easy-ip GigabitEthernetl/0/2 //指定出接口
[FW-nat-policy-interzone-trust-untrust-outbound-1] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quit
(2)配置安全策略
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] policy 1
[FW-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-1] action permit
[FW-policy-interzone-trust-untrust-outbound-1] quit
[FW-policy-interzone-trust-untrust-outbound] quit
和NAPT一样,Easy-IP方式也不会生成Server-map表。
Smart NAT
Smart NAT方式也叫作“聪明的NAT”,这是因为它融合了NAT No-PAT方式和
NAPT方式的特点。
假设SmartNAT方式使用的地址池中包含N个IP,其中一个IP被指定为预留地址,另外N-1个地址构成地址段1(sectionl)。进行NAT地址转换时,Smart NAT会先使用section1进行NAT No-PAT方式的转换,即一对一的地址转换。当section1中的IP都被占用后,SmartNAT才使用预留地址进行NAPT方式的转换,即多对一的地址转换。
上图组网环境,Smart NAT方式的配置过程如下:
(1)配置NAT地址池
[FW] nat address-group 1
[FW-address-group-1] mode no-pat local
[FW-address-group-1] smart-nopat 202.1.1.3 //预留地址
[FW-address-group-1] section 1 202.1.1.2 202.1.1.2 //section中不能包含预留地址
[FW-address-group-]] quit
(2)配置NAT策略
[FW] nat-poliey interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] policy 1
[FW-nat-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-nat-policy-interzone-trust-untrust-outbound-1] action souree-nat
[FW-nat-policy-interzone-trust-untrust-outbound-1] address-group 1 /∥弓用NAT地址池
[FW-nat-policy-interzone-trust-untrust-outbound-1] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quít
(3)配置安全策略
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] policy 1
[FW-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-1] action permit
[FW-policy-interzone-trust-untrust-outbound-1] quit
[FW-policy-interzone-trust-untrust-outbound] quit
(4)配置黑洞路由
[FW] ip route-static 202.1.1.2 32 NULL0
[FW] ip route-static 202.1.1.3 32 NULL 0
三元组 NAT
为了解决P2P业务和NAT共存的问题,需要用到一种新的地址转换方式:三元组 NAT
三元组 NAT在进行转换时,仅和源IP地址、源端口和协议类型这3个元素有关,这也正是“三元组”NAT名字的由来。
三元组 NAT的两个特点:
- 对外呈现端口一致性
- 支持外网主动访问
目前华为USG9500系列防火墙V300R001版本支持三元组NAT方式,对于USG2000/5000/6000系列防火墙来说,可以通过配置User-defined协议的ASPF来保证P2P业务的正常运行。下面结合下图所示的组网环境,给出三元组NAT的配置过程,三元组NAT不能配置黑洞路由,否则会影响业务。
(1)配置NAT地址池
[FW] nat address-group 1 //指定模式为三元组NAT方式
[FW-address-group-]] mode full-cone local
[FW-address-group-1] section 1 202.1.1.2 202.1.1.3
[FW-address-group-1] quit
(2)配置NAT策略
[FW] nat-policy interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] policy 1
[FW-nat-policy-interzone-trust-untrust-outbound-1] policy souree 192.168.0.0 0.0.0.255
[FW-nat-policy-interzone-trust-untrust-outbound-1] aetion souree-nat //引用NAT地址:池
[FW-nat-policy-interzone-trust-untrust-outbound-1] address-group 1
[FW-nat-policy-interzone-trust-untrust-outbound-1] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quit
(3)配置安全策略
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] poliey 1
[FW-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-1] action permit
[FW-policy-interzone-trust-untrust-outbound-1] quit
[FW-policy-interzone-trust-untrust-outbound] quit
多出口场景下的源NAT
某企业在内部网络的出口处部署了防火墙作为出口网关,通过ISP1和ISP2两条链路连接到Internet,企业内部网络中的PC有访问Internet的需求,如下图;
选路的方式有多种,比如配置两条缺省路由(等价路由)或者配置明细路由,根据报文的目的地址进行选路;比如配置策略路由,根据报文的源地址进行选路。这里主要介绍NAT功能。
无论使用哪种选路方式,结果无非就是两种:报文走ISP1的链路出去,或者走ISP2的链路出去。不管是走哪条链路,只要在报文发出去之前把报文中私网地址转换成相应的公网地址,源NAT的作用就完成了。
通常情况,我们把防火墙与ISP1和ISP2相连的两个接口分别加入到不同的安全区域,然后基于内部网络所在安全区域(通常是Trust区域)与这两个接口所在安全区域之间配置源NAT策略,如下图所示:
假设ISP1分配的公网地址是1.1.1.101.1.1.12,ISP2分配的公网地址是2.2.2.102.2.2.12,NAPT方式的源NAT配置如下:
(1)将接口分别加入到不同的安全区域
[FW] firewall zone trust
[FW-zone-trust] add interface GigabitEthernet1/0/1
[FW-zone-trust] quit
[FW] firewall zone name isp1
[FW-zone-ispl] set priority 10
[FW-zone-ispl] add interface GigabitEthernet1/0/2
[FW-zone-ispl] quit
[FW] firewall zone name isp2
[FW-zone-isp2] set priority 20
[FW-zone-isp2] add interface GigabitEthernet1/0/3
[FW-zone-isp2] quit
(2)配置两个NAT地址池
[FW] nat address-group 1 1.1.1.10 1.1.1.12
[FW] nat address-group 2 2.2.2.10 2.2.2.12
(3)基于不同的域间关系配置两条NAT策略
[FW] nat-policy interzone trust ispl outbound
[FW-nat-policy-interzone-trust-isp1-outbound] policy 1
[FW-nat-policy-interzone-trust-isp1-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-nat-policy-interzone-trust-isp1-outbound-1] action source-nat
[FW-nat-policy-interzone-trust-ispl-outbound-1] address-group 1
[FW-nat-policy-interzone-trust-isp1-outbound-1] quit
[FW-nat-policy-interzone-trust-ispl-outbound] quit
[FW] nat-policy interzone trust isp2 outbound
[FW-nat-policy-interzone-trust-isp2-outbound] policy 1
[FW-nat-policy-interzone-trust-isp2-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-nat-policy-interzone-trust-isp2-outbound-1] action source-nat
[FW-nat-policy-interzone-trust-isp2-outbound-1] address-group 2
[FW-nat-policy-interzone-trust-isp2-outbound-1] quit
[FW-nat-policy-interzone-trust-isp2-outbound] quit
(4)基于不同的域间关系配置两条安全策略
[FW] policy interzone trust isp1 outbound
[FW-policy-interzone-trust-ispl-outbound] policy 1
[FW-policy-interzone-trust-isp1-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-ispl-outbound-1] action permit
[FW-policy-interzone-trust-ispl-outbound-1] quit
[FW-policy-interzone-trust-ispl-outbound] quit
[FW] policy interzone trust isp2 outbound
[FW-policy-interzone-trust-isp2-outbound] policy 1
[FW-policy-interzone-trust-isp2-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-isp2-outbound-1] action permit
[FW-policy-interzone-trust-isp2-outbound-1] quit
[FW-policy-interzone-trust-isp2-outbound] quit
(5)配置黑洞路由
[FW] ip route-static 1.1.1.10 32 NULL 0
[FW] ip route-static 1.1.1.11 32 NULL 0
[FW] ip route-static 1.1.1.12 32 NULL 0
[FW] ip route-static 2.2.2.10 32 NULL 0
[FW] ip route-static 2.2.2.11 32 NULL 0
[FW] ip route-static 2.2.2.12 32 NULL 0
华为防火墙源NAT技术对比
2.NAT Server
NAT Server(服务器映射)基本原理
针对服务器的地址转换——NAT Server(服务器映射),服务器对公网用户提供服务时使用;
参照上图,NAT Server的配置过程如下:
(1)配置NAT Server
将服务器的私网地址10.1.1.2映射成公网地址1.1.1.1
[FW] nat server global 1.1.1.1 inside 10.1.1.2
如果服务器同时存在多种协议和端口的服务项,按上述配置会将服务器上所有服务项都发布到公网上,这样会带来安全风险。我们可以只将服务器上特定的服务项对公网发布,从而避免服务项全发布带来的风险。
例如,将服务器上80端口的服务项映射为9980端口供公网用户访问,配置如下:
[FW] nat server protocol tcp global 1.1.1.1 9980 inside 10.1.1.2 80
(2)配置安全策略
NAT Server场景下,为了让公网用户能够访问私网服务器,配置安全策略时策略的目的地址是服务器的私网地址
;
[FW] policy interzone dmz untrust inbound
[FW-policy-interzone-dmz-untrust-inbound] policy 1
[FW-policy-interzone-dmz-untrust-inbound-1] policy destination 10.1.1.2 0
[FW-policy-interzone-dmz-untrust-inbound-1] policy service service-set http
[FW-policy-interzone-dmz-untrust-inbound-1] action permit
[FW-policy-interzone-dmz-untrust-inbound-1] quit
[FW-policy-interzone- dmz-untrust-inbound] quit
(3)配置黑洞路由
NAT Server也需要配置黑洞路由,避免路由环路
[FW] ip route-static 1.1.1.1 32 NULL 0
多出口场景下的NAT Server
上图,防火墙作为出口网关,双出口、双ISP接入公网,NAT Server的配置通常需要一分为二,让一个私网服务器向两个ISP发布两个不同的公网地址供公网用户访问。一分为二的方法有两种。
方法一:将接入不同ISP的公网接口规划在不同的安全区域中,配置NAT Server时,带上zone参数,使同一个服务器向不同安全区域发布不同的公网地址,如下图所示:
假设私网服务器对ISP1发布的公网地址是1.1.1.20,对ISP2发布的公网地址是2.2.2.20,配置过程如下:
(1)将接口分别加入到不同的安全区域
[FW] firewall zone dmz
[FW-zone-dmz] add interface GigabitEthernet1/0/4
[FW-zone-dmz] quit
[FW] firewall zone name isp1
[FW-zone-ispl] set priority 10
[FW-zone-ispl] add interface GigabitEthernet1/0/2
[FW-zone-ispl] quit
[FW] firewall zone name isp2
[FW-zone-isp2] set priority 20
[FW-zone-isp2] add interface GigabitEthernet1/0/3
[FW-zone-isp2] quit
(2)配置带有zone参数的NAT Server
[FW] nat server zone isp1 protocol tcp global 1.1.1.20 9980 inside 172.16.0.2 80
[FW] nat server zone isp2 protocol tcp global 2.2.2.20 9980 inside 172.16.0.2 80
(3)基于不同的域间关系配置两条安全策略
[FW] policy interzone isp1 dmz inbound
[FW-policy-interzone-dmz-ispl-inbound] policy 1
[FW-policy-interzone-dmz-isp1-inbound-1] policy destination 172.16.0.2 0
[FW-policy-interzone-dmz-ispl-inbound-1] policy service service-set http
[FW-policy-interzone-dmz-isp1-inbound-1] action permit
[FW-policy-interzone-dmz-isp1-inbound-1] quit
[FW-policy-interzone-dmz-isp1-inbound] quit
[FW] policy interzone isp2 dmz inbound
[FW-policy-interzone-dmz-isp2-inbound] policy 1
[FW-policy-interzone-dmz-isp2-inbound-1] policy destination 172.16.0.2 0
[FW-policy-interzone-dmz-isp2-inbound-1] policy service service-set http
[FW-policy-interzone-dmz-isp2-inbound-1] action permit
[FW-policy-interzone-dmz-isp2-inbound-1] quit
[FW-policy-interzone-dmz-isp2-inbound] quit
(4)配置黑洞路由
[FW] ip route-static 1.1.1.20 32 NULL0
[FW] ip route-static 2.2.2.20 32 NULL 0
方法二:如果防火墙与ISP1和ISP2相连的两个接口在同一个安全区域内且无法调整,则通过配置NAT Server时带上no-reverse参数,使同一个服务器向外发布两个不同的公网地址,如下图所示:
上图中其他配置与方法一相同,不同的是配置带有no-reverse参数的NAT Server,配置如下:
[FW] nat server protocol tep global 1.1.1.20 9980 inside 172.16.0.2 80 no-reverse
[FW] nat server protocol tcp global 2.2.2.20 9980 inside 172.16.0.2 80 no-reverse
配置源进源出
如下图,如果防火墙只配置了缺省路由,用户通过ISP1通过GE1/0/2接口访问内部服务器,返回的数据有可能通过ISP2链路的GE1/0/3接口发出,数据就无法返回给用户,访问中断,避免此种情况出现就需要在防火墙上配置源进源出,即请求报文从某条路径进入,响应报文依然沿着同样的路径返回,而不用查找路由表来确定出接口,
保证了报文从同一个接口进出;
源进源出功能在接口上配置,防火墙连接ISP1和ISP2的两个接口上都需要配置。
假设ISP1提供的下一条地址是1.1.1.254,在接口GE1/0/2上开启源进源回功能的配置命令如下:
USG9500系列防火墙源进源出命令
[FW] interface GigabitEthernet 1/0/2
[FW-GigabitEthernet1/0/2] redirect-reverse nexthop 1.1.1.254
USG2000/5000系列防火墙源进源出命令
[FW] interface GigabitEthernet 1/0/2
[FW-GigabitEthernet1/0/2] reverse-route nexthop 1.1.1.254
USG6000系列防火墙源进源出命令
[FW] interface GigabitEthernet 1/0/2
[FW-GigabitEthernet1/0/2] gateway 1.1.1.254
[FW-GigabitEthernetl/0/2] reverse-route enable
3.双向NAT
源NAT+NAT Server技术被称为双向NAT;双向NAT不是一个单独的功能,而是源NAT和NAT Server的组合,是针对同一条流
(例如公网用户访问私网服务器的报文),在其经过防火墙时同时转换报文的源地址和目的地址。
源NAT根据报文在防火墙上的流动方向分为:域间NAT
和域内NAT
;
域间NAT:报文在两个不同的安全区域之间流动时对报文进行NAT转换,根据流动方向的不同,分为以下两类:
- NAT Inbound:报文由
低安全级别的安全区域
向高安全级别的安全区域方向
流动时,对报文进行的转换。一般来说,这种情况是公网用户访问内部网络,不太常见。 - NAT Outbound:报文由
高安全级别的安全区域
向低安全级别的安全区域方向
流动时,对报文进行的转换。私网用户访问 Internet的场景使用的都是NAT Outbound。
域内NAT:报文在同一个安全区域之内流动
时对报文进行NAT转换,一般来说,域内NAT都会和NAT Server配合使用,单独配置域内NAT的情况较少见。
当域间NAT或域内NAT和NAT Server一起配合使用时,就实现了双向NAT。
双向NAT还要合理的设置安全区域的安全级别并规划网络——内网网络属于Trust区域(高安全级别),私网服务器属于DMZ区域(中安全级别),Internet属于Untrust 区域(低安全级别)
。
NAT Inbound + NAT Server
上图,公网用户访问私网服务器,安全策略和黑洞路由的配置与前面介绍过的内容没有区别,这里不写配置了,NAT Server和源NAT的配置如下:
//NAT Server的配置
[FW] nat server protocol tcp global 1.1.1.1 9980 inside 10.1.1.2 80
//源NAT的配置
[FW] nat address-group 1 10.1.1.100 10.1.1.100
[FW] nat-policy interzone untrust dmz inbound
[FW-nat-policy-interzone-dmz-untrust-inbound] policy 1
[FW-nat-policy-interzone-dmz-untrust-inbound-1] policy destination 10.1.1.2 0 //由于先进行NAT Server转换,再进行源NAT转换,所以此处的目的地址是NAT Server转换后的地址,即服务器的私网地址
[FW-nat-policy-interzone-dmz-untrust-inbound-1] action source-nat
[FW-nat-policy-interzone-dmz-untrust-inbound-1] address-group 1
[FW-nat-policy-interzone-dmz-untrust-inbound-1] quit
[FW-nat-policy-interzone-dmz-untrust-inbound] quit
通过下图来看一下报文的转换过程:公网用户访问私网服务器的报文到达防火墙时,目的地址(私网服务器的公网地址)经过NAT Server转换为私网地址,然后源地址经过NAT Inbound也转换为私网地址,且和私网服务器属于同一网段。这样报文的源地址和目的地址就同时进行了转换,即完成了双向NAT。当私网服务器的回应报文经过防火墙时,再次进行双向NAT转换,报文的源地址和目的地址均转换为公网地址。
配置NAT Inbound的好处是:NAT地址池中的地址配置成和私网服务器在同一网段,当私网服务器回应公网用户的访问请求时,发现自己的地址和目的地址在同一网段,此时私网服务器就不会去查找路由,而是发送ARP广播报文询问目的地址对应的MAC地址。防火墙会及时将连接私网服务器的接口的MAC地址发给私网服务器,告诉私网服务器:“把回应报文发送给我吧”,所以私网服务器将回应报文发送至防火墙,防火墙再对其进行后续处理。私网服务器上省去了查找路由的环节,也就不用设置网关了
。
在这个场景中应用双向NAT时还有一个前提条件,那就是私网服务器与防火墙必须在同一个网段,否则就不能应用这个功能了。
域内NAT + NAT Server
域内NAT+NAT Server的场景多见于小型网络,如下图所示,管理员在规划网络时“偷懒”,将私网用户和私网服务器规划到同一个网络中,并将二者置于同一个安全区域。
此时,如果希望私网用户像公网用户一样,通过公网IP地址1.1.1.1访问私网服务器,就要在防火墙上配置NAT Server。但是仅仅配置NAT Server会有问题,如下图所示,私网用户访问私网服务器的报文到达防火墙后进行目的地址转换(1.1.1.1->10.1.1.2),私网服务器回应报文时发现目的地址和自己的地址在同一网段,回应报文经交换机直接转发到私网用户,不会经过防火墙转发。
如果希望提高内部网络的安全性,使私网服务器的回应报文也经过防火墙处理,就需要配置域内NAT,将私网用户访问私网服务器的报文的源地址进行转换。转换后源地址可以是公网地址也可以是私网地址,只要不和私网服务器的地址在同一网段即可,这样私网服务器的回应报文就会被发送到防火墙。
黑洞路由的配置与前面介绍过的内容没有区别,这里就不给出具体配置了。下面是NAT Server和域内NAT的配置;
//NAT Server的配置
[FW] nat server protocol tcp global 1.1.1.1 9980 inside 10.1.1.2 80
//域内NAT的配置
[FW] nat address-group 1 1.1.1.100 1.1.1.100 //公网地址或私网地址均可,不能和私网服务器的地址在同一网段
[FW] nat-policy zone trust
[FW-nat-policy-zone-trust] policy 1
[FW-nat-policy-zone-trust-1]policy destination 10.1.1.20 //由于先进行NAT Server转换,再进行域内NAT转换,所以此处的目的地址是NAT Server转换后的地址,即服务器的私网地址
[FW-nat-policy-zone-trust-1] action source-nat
[FW-nat-policy-zone-trust-1] address-group 1
[FW-nat-policy-zone-trust-1] quit
[FW-nat-policy-zone-trust] quit
报文的转换过程如下图所示;
如果在这个组网环境的基础上做一个变化,将私网用户和私网服务器通过不同的接口连接到防火墙,此时私网用户和私网服务器交互的所有报文都需要经过防火墙转发,所以只配置NAT Server是可以的。
4.NAT ALG
NAT ALG(Application Level Gateway),即NAT的应用层网关。NAT ALG是一种穿越NAT设备的技术,防火墙在进行地址转换时,除了转换报文头中的IP地址信息,还转换报文载荷中携带的IP地址信息。下图展示了在防火墙上开启NAT ALG功能后,FTP协议的交互过程。
开启NATALG功能后,防火墙将PORT命令报文中携带的IP地址信息转换成了公网地址1.1.1.1,FTP服务器收到该报文后,就可以向1.1.1.1这个地址发起数据连接了。
此时,还需开启防火墙的ASPF功能,防火墙会为FTP的数据连接开辟隐形通道,使其绕过安全策略检查,直接穿越防火墙,从而使FTP服务器发起的数据连接请求报文顺利穿越防火墙,准确到达位于私网的FTP客户端。
FTP协议的完整交互过程如下图所示;
除了源NAT场景,NAT Server场景中也需要开启NAT ALG和ASPF功能。以FTP客户端位于公网、FTP服务器位于私网,并且FTP工作在被动模式为例,下图给出了FTP协议的完整交互过程。
如果网络中存在FTP、SIP、H323等这些多通道协议,在防火墙进行地址转换的场景中,一般都建议在防火墙上同时开启NAT ALG和ASPF功能,保证基于这些协议的业务能够正常运行。
目前绝大多数防火墙产品,都是由一条命令来同时开启ASPF和NAT ALG这两个功能,即在域间或域内配置detect命令开启ASPF功能后,同时就开启了NAT ALG功能。
针对几个典型协议,下表给出了执行detect命令后,防火墙上的处理方式。
5.NAT场景下黑洞路由的作用
对于源NAT来说:
- 如果NAT地址池地址与公网接口地址不在同一网段,必须配置黑洞路由;
- 如果NAT地址池地址与公网接口地址在同一网段,建议也配置黑洞路由。
对于指定了特定协议和端口的NAT Server来说:
- 如果NAT Server的Global地址与公网接口地址不在同一网段,必须配置黑洞路由;
- 如果NAT Server的Global地址与公网接口地址在同一网段,建议也配置黑洞路由。
除了防止路由环路、节省设备的系统资源,其实黑洞路由还有一个作用,那就是在防火墙上引入到OSPF中,发布给路由器。