博文大纲:
一、华为防火墙NAT的六个分类;
二、解决NAT转换时的环路及无效ARP;
三、server-map表的作用;
四、NAT对报文的处理流程;
五、各种常用NAT的配置方法;

一、华为防火墙NAT的六个分类

华为防火墙的NAT分类:

  • NAT No-PAT:类似于Cisco的动态转换,只转换源IP地址,不转换端口,属于多对多转换,不能节约公网IP地址,使用情况较少。
  • NAPT(Network Address and Port Translation,网络地址和端口转换):类似于Cisco的PAT转换,NAPT即转换报文的源地址,又转换源端口。转换后的地址不能是外网接口IP地址,属于多对多或多对一转换,可以节约公网IP地址,使用场景较多。
  • 出接口地址(Easy-IP):因其转换方式非常简单,所以也被称为Easy-IP、和NAPT一样,即转换源IP地址,又转换源端口。区别是出接口地址方式转换后的地址只能是NAT设备外网接口所配置的IP地址,属于多对一转换,可以节约IP地址。
  • NAT Server:静态一对一发布,主要用于内部服务器需要对Internet提供服务时使用,。
  • Smart NAT(智能转换):通过预留一个公网地址进行NAPT转换,而其他的公网地址用来进行NAT No-PAT转换,该方式不太常用。
  • 三元组NAT:与源IP地址、源端口和协议类型有关的一种转换,将源IP地址和源端口转换为固定公网IP地址和端口,能解决一些特殊应用在普遍NAT中无法实现的问题。主要应用于外部用户访问局域网的一些P2P应用。

二、解决NAT转换时的环路及无效ARP

在特定的NAT转换时,可能会产生环路及无效ARP,关于其如何产生,大概就是,在有些NAT的转换方式中,是为了解决内网连接Internet,而映射出了一个公有IP,那么,若此时有人通过internet来访问这个映射出来的公有IP,就会产生这两种情况。若要详细说起来,又是很麻烦,但是解决这两个问题很简单,就是配置黑洞路由(将internet主动访问映射出来的地址的流量指定到空接口null0),关于如何配置,将在过后的配置中展示出来,我总结了以下需要配置黑洞路由的场景,如下表所示:

华为防火墙的NAT介绍及配置详解

表中的前三个可以对应到文章开始的几个NAT类型中,那么NAT Server(粗泛)、NAT Server(精细)又是什么鬼呢?

  • NAT Server(粗泛):是NAT Server转换类型中的一种,表示源地址和转换后的地址只有简单的映射关系,没有涉及端口等映射,如源地址为192.168.1.2,转换后的地址为33.2.55.6,如果做的是NAT Server(粗泛)这种类型的NAT,那么所有访问33.2.55.6的数据包都将转发给192.168.1.2这个地址。

  • NAT Server(精细):也是NAT Server转换类型中的一种,表示源地址和转换后的地址映射关系,已经具体定位到某个端口,如:源地址为192.168.1.2,转换后的地址为33.2.55.6,做了NAT Server(精细)的NAT转换,那么可能是访问33.2.55.6的FTP流量(21端口)会转发到192.168.1.2这个地址,但若访问33.2.55.6的Web流量(80/443端口),就不一定还是转发到192.168.1.2这个地址,可以说NAT Server(精细)是基于端口的NAT转换。

三、server-map表的作用

我们都知道,状态化防火墙中会有一张表叫做会话表,用来记录的是内网访问外网时的一个连接信息,当外网返回的数据匹配到会话表的记录时,直接放行相关返回流量。

那么server-map表又是什么呢?具体解释其原理的话,可能又是一大篇,写了也不一定能写明白,写明白了你们也不一定看懂,看懂了你们也不一定会打赏,哈哈,不开玩笑了,直接总结对比一下server-map表和会话表的区别吧,

区别如下:

  • 会话表记录的是连接信息,包括连接状态。
  • server-map表记录的不是当前的连接信息,而是通过分析当前连接的报文后得到的信息,该信息用来解决接下来的数据流通过防火墙的问题。可以将server-map表的作用理解为通过未雨绸缪解决将来的问题,如像FTP这种的多端口协议,在从一开始的三次握手,到最后完成数据的传输,其过程中,可能端口会发生改变等问题,server-map正好可以解决这种问题。

然而在NAT中也需要这个server-map表,就是在有数据流量通过NAT的方式穿越防火墙时,server-map表会记录其源地址和转换后地址的对应关系,从而使后续流量可以不用查看NAT策略,直接匹配到server-map表,从而实现高效的NAT转换。若用户通过互联网访问转换后的地址时,也可以匹配到server-map表,从而高效的将数据转发到内网真实主机(必须保证安全策略允许通过)。

server-map表不用手动配置,是自动生成的,这里只是简单介绍下server-map表是个什么鬼。

在NAT中,不是所有的表都可以生成server-map表的,我简单总结了一下,如下:

华为防火墙的NAT介绍及配置详解

当在防火墙上配置某些类型的NAT后,在防火墙上会生成server-map表,默认生成两个server-map条目,分别是正向条目和反向条目(Reverse),如下:
华为防火墙的NAT介绍及配置详解

此时Server-map表的作用是:

  • 正向条目携带端口信息,用来使Internet用户访问内网中的服务器时直接通过server-map表来进行目标地址转换。
  • 反向条目(Reverse):不携带端口信息,且目标地址是任意的,用来使服务器可以访问Internet。

四、NAT对报文的处理流程

原谅我懒癌晚期,给大家上个图,自己悟吧,能理解到什么地步,全看天意咯,如下:

华为防火墙的NAT介绍及配置详解

从上图中可以看出来,因为防火墙处理报文的顺序是目标地址转换→安全策略→源地址转换,所以在NAT环境中,安全策略的源地址应该是源地址转换之前的地址,目标地址应该是目标地址转换之后的地址。

一个报文,一般在同一个网络设备上,只会存在一种转换条目,即要么转换源地址(除NAT-Server类型的NAT转换之外),要么转换目的地址(NAT-Server类型的NAT转换)。源地址和目的地址的转换不会同时存在同一个网络设备上。

五、各种NAT类型的配置方法

在文章开头的NAT分类中,Smart NAT(智能转换)和三元组NAT这两种NAT类型我也没有配置过,不太了解,所以无法将这两种的配置写下来,只能将前四种NAT类型写下来咯!一般够用了(前面介绍的黑洞路由及查看一些相关表的命令都将在配置过程中,写下来,请仔细看注释)。

环境如下(不以实际环境为准,主要目的是将多种类型NAT的配置写下来):

华为防火墙的NAT介绍及配置详解

需求如下:
1、ISP为公司分配的公网地址为100.2.2.8/29。
2、技术部属于trust区域,通过Easy-ip访问Internet。
3、行政部属于trust区域,通过NAPT访问internet(使用100.2.2.12/29)。
4、财务部属于trust区域,通过no-pat访问internet(使用100.2.2.10/29-100.2.2.11/29)
5、DMZ区域中的两台服务器配置NAT-Server发布,分别提供FTP服务及web服务(使用100.2.2.9/29)
6、防护墙的GE1/0/0属于UNtrust区域。

开始配置基础部分(IP地址、路由条目和防火墙接口添加到指定区域等):

我这里只写了路由器及防火墙的配置,关于各个PC及server的IP配置,请自行配置。基础部分就不注释了,若不懂,可以参考我之前的博文:华为网络设备基本配置 ,若需要在eNSP上验证效果,需要给模拟器上的防火墙导入系统,我这里使用的是USG6000的防火墙,可以下载我提供的防火墙系统文件。

1、R1路由器配置如下:

<Huawei>sys
[Huawei]in g0/0/0
[Huawei-GigabitEthernet0/0/0]ip add 100.1.1.1 30
[Huawei-GigabitEthernet0/0/0]in g0/0/1
[Huawei-GigabitEthernet0/0/1]ip add 200.1.1.1 24
[Huawei-GigabitEthernet0/0/1]quit
[Huawei]ip route-static 100.2.2.8 29 100.1.1.2  <!-100.2.2.8/29为汇总后的地址-->

2、防火墙配置如下:

<USG6000V1>sys
[USG6000V1]in g1/0/0
[USG6000V1-GigabitEthernet1/0/0]ip add 100.1.1.2 30
[USG6000V1-GigabitEthernet1/0/0]in g1/0/4
[USG6000V1-GigabitEthernet1/0/4]ip add 192.168.3.1 24
[USG6000V1-GigabitEthernet1/0/4]in g1/0/3
[USG6000V1-GigabitEthernet1/0/3]ip add 192.168.2.1 24
[USG6000V1-GigabitEthernet1/0/3]in g1/0/2
[USG6000V1-GigabitEthernet1/0/2]ip add 192.168.1.1 24
[USG6000V1-GigabitEthernet0/0/0]in g1/0/1
[USG6000V1-GigabitEthernet1/0/1]ip add 192.168.0.1 24
[USG6000V1-GigabitEthernet1/0/1]quit
[USG6000V1]ip route-static 0.0.0.0 0.0.0.0 100.1.1.1
[USG6000V1]firewall zone trust 
[USG6000V1-zone-trust]add in g1/0/4
[USG6000V1-zone-trust]add in g1/0/3
[USG6000V1-zone-trust]add in g1/0/2
[USG6000V1-zone-trust]quit
[USG6000V1]firewall zone dmz
[USG6000V1-zone-dmz]add in g1/0/1
[USG6000V1-zone-dmz]quit
[USG6000V1]firewall zone untrust 
[USG6000V1-zone-untrust]add in g1/0/0

基础部分的配置至此结束。

开始配置各种类型的NAT:

1、技术部属于trust区域,通过Easy-ip访问Internet

(1)防火墙配置如下:

1)配置安全策略:

[USG6000V1]security-policy 
[USG6000V1-policy-security]rule name easy            <!--定义安全策略名字-->
[USG6000V1-policy-security-rule-easy]source-zone trust        <!--源区域为trust-->
[USG6000V1-policy-security-rule-easy]destination-zone untrust    <!--目标区域为untrust-->
[USG6000V1-policy-security-rule-easy]action permit         <!--动作为允许-->
[USG6000V1-policy-security-rule-easy]quit
[USG6000V1-policy-security]quit

2)配置NAT策略:

[USG6000V1]nat-policy 
[USG6000V1-policy-nat]rule name easypolicy    <!--定义NAT策略名字-->
[USG6000V1-policy-nat-rule-easypolicy]source-address 192.168.1.0 24 <!--定义源地址-->
[USG6000V1-policy-nat-rule-easypolicy]source-zone trust   <!--定义源区域-->
[USG6000V1-policy-nat-rule-easypolicy]destination-zone untrust    <!--定义目标区域-->
[USG6000V1-policy-nat-rule-easypolicy]action nat easy-ip    <!--配置出接口方式-->
[USG6000V1-policy-nat-rule-easypolicy]quit
[USG6000V1-policy-nat]quit

现在就可以使用PC4 ping外网的200.1.1.2进行验证了,在ping的过程中查看会话表(时间长了该会话表将没有任何内容),可以看到具体的转换条目。

[USG6000V1]dis firewall session table        <!--查看会话表-->
 Current Total Sessions : 5
 icmp  ×××: public --> public  192.168.3.2:28884[100.1.1.2:2051] --> 200.1.1.2:2:048
                           ..............................

注:Easy-ip类型的NAT不会产生server-map。

2、配置行政部属于trust区域,通过NAPT访问internet(使用100.2.2.12/29)。

由于在上面配置Easy-ip的NAT类型时,配置了安全策略,所以接下来trust区域访问untrust区域的流量就不用配置安全策略了。

(1)防火墙配置如下:

1)配置NAT地址组,地址组中的地址对应的是公网地址100.2.2.12/29。

[USG6000V1]nat address-group napt    <!--定义nat地址组名-->
[USG6000V1-address-group-napt]section 0 100.2.2.12   <!--定义组中的地址-->
[USG6000V1-address-group-napt]mode pat   <!--配置为NAPT方式-->
[USG6000V1-address-group-napt]quit

2)配置NAT策略

[USG6000V1]nat-policy
[USG6000V1-policy-nat]rule name napt   <!--自定义nat策略的组名-->
[USG6000V1-policy-nat-rule-napt]source-address 192.168.2.0 24 <!--定义需要转换的源地址-->
[USG6000V1-policy-nat-rule-napt]source-zone trust    <!--定义源区域-->
[USG6000V1-policy-nat-rule-napt]destination-zone untrust     <!--定义目标区域-->
[USG6000V1-policy-nat-rule-napt]action nat address-group napt  <!--关联地址组-->

3)NAPT的NAT类型要配置黑洞路由,所以要针对转换后的全局地址100.2.2.12/32配置黑洞路由。

[USG6000V1]ip route-static 100.2.2.12 32 NULL 0      

4)NAPT配置至此就完成了,可以自行验证,并查看会话表,查看是否转换为指定的地址。

3、配置财务部属于trust区域,通过no-pat访问internet(使用100.2.2.10/29-100.2.2.11/29)

(1)防火墙配置如下:

1)配置NAT地址组,地址组中的地址对应的是公网地址100.2.2.10--100.2.2.11:

[USG6000V1]nat address-group natnopat <!--定义nat地址组名-->
[USG6000V1-address-group-natnopat]section 0 100.2.2.10 100.2.2.11
   <!--定义组中的地址-->
[USG6000V1-address-group-natnopat]mode no-pat local <!--配置为NAT No-PAT方式-->
[USG6000V1-address-group-natnopat]quit

2)配置NAT策略:

[USG6000V1]nat-policy
[USG6000V1-policy-nat]rule name nopat  <!--自定义nat策略的组名-->
[USG6000V1-policy-nat-rule-nopat]source-address 192.168.1.0 24 <!--定义需要转换的源地址-->
[USG6000V1-policy-nat-rule-nopat]source-zone trust   <!--定义源区域-->
[USG6000V1-policy-nat-rule-nopat]destination-zone untrust <!--定义目标区域-->
[USG6000V1-policy-nat-rule-nopat]action nat address-group natnopat <!--关联地址组-->
[USG6000V1-policy-nat-rule-nopat]quit
[USG6000V1-policy-nat]quit

3)针对转换后的全局地址(NAT地址组中的地址)配置黑洞路由

[USG6000V1]ip route-static 100.2.2.10 32 NULL 0
[USG6000V1]ip route-static 100.2.2.11 32 NULL 0

至此,NAT No-PAT配置完成了,可以自行验证,并且会产生server-map表:

[USG6000V1]dis firewall server-map <!--查看server-map表-->
[USG6000V1]dis firewall session table  <!--查看会话表-->

4、配置DMZ区域中的两台服务器配置NAT-Server发布,分别提供FTP服务及web服务(使用100.2.2.9/29)

1)配置安全策略:

由于之前配置的是trust访问untrust区域的安全策略,所以对DMZ区域没关系,这里是要将DMZ区域的服务器发布出去,使Internet用户可以访问到这些服务器,所以应该放行UNtrust到DMZ区域相关服务的流量。

[USG6000V1-policy-security]rule name todmz  
[USG6000V1-policy-security-rule-todmz]source-zone untrust 
[USG6000V1-policy-security-rule-todmz]destination-zone dmz
[USG6000V1-policy-security-rule-todmz]destination-address 192.168.0.0 24
[USG6000V1-policy-security-rule-todmz]service ftp
[USG6000V1-policy-security-rule-todmz]service http
[USG6000V1-policy-security-rule-todmz]action permit 

2)配置NAT server:

[USG6000V1]nat server ftp protocol tcp global 100.2.2.9 21 inside 192.168.0.2 21
[USG6000V1]nat server http protocol tcp global 100.2.2.9 80 inside 192.168.0.3 80

3)使用外网客户端client1进行访问验证即可,访问以后赶紧查看会话表及server-map表(因为怕到了老化时间,会看不到任何条目),会看到如下结果:
华为防火墙的NAT介绍及配置详解

配置至此,所有需求均已实现,完活。

1、扩展一些NAT Server的其他配置类型

[USG6000V1]nat server ftp1 protocol tcp global 100.2.2.14 2121 inside 192.168.0.2 21    
                <!--
配置不同端口映射,其效果是外网用户访问100.2.2.14的2121端口,
将转换地址和端口为192.168.0.2的21端口。
                 -->
[USG6000V1]nat server ftp1 protocol tcp global 100.2.2.14 21 inside 192.168.0.2 21 no-reverse
                <!--
其效果就是不再生成反向的server-map表,
只能Internet访问内部的ftp服务,而内部服务器不能主动访问互联网。
                -->
[USG6000V1]nat server natserver global 100.2.2.19 inside 100.2.2.9

                <!--
真正一对一的映射,一个公网IP对应一个内部服务器,
当Internet用户访问100.2.2.19的任意端口,都将转发到内部100.2.2.9服务器上,
该配置方法不常用,也不推荐使用。
                -->

2、如何删除NAT Server:
那么我们在配置NAT Server时,配置错误的话,想要删除掉,与别的配置删除不太一样,需要使用以下命令删除配置错误的NAT Server:

[USG6000V1]undo nat server name http   
[USG6000V1]undo nat server ID 0
              <!--
以上命令是删除NAT server的配置,
第一个是基于名字删除,第二个是基于ID号删除,
在系统视图,使用“dis  this”,然后翻到最后,可以看到name及ID号
                          -->

———————— 本文至此结束,感谢阅读 ————————