人类现在对计算机网络的使用已经扩展到各个领域,而计算机网络的设计者当时无法想象互联网能有今天这样的规模。任何一个接入互联网的计算机、手机以及智能电视,要想在互联网中畅游,必须有一个合法的IP地址。而IP地址,曾经以为足以容纳全球的计算机,但是在今天看来,已经严重枯竭。IPV6的出现就是为了解决地址不足的问题,但在IPV6普及之前,需要有一个过渡技术——NAT。NAT的出现缓解了地址不足的问题,它可以让同一局域网内60000多用户可以同时使用一个合法IP地址访问互联网。关于Cisco设备的NAT技术,不清楚的朋友本人推荐博文——网络地址转换——NAT技术 今天主要介绍华为设备的NAT技术。
博文大纲:
一、华为设备NAT的分类;
二、如何解决源地址转换场景下的环路和无效ARP问题;
三、Server-map表的作用;
1.通过Server-map表来解决FTP数据传输的问题;
2.Server-map表在NAT中的作用;
四、NAT对报文的处理流程;
五、各种常用的NAT的配置方法;
1.NAT NO-PAT配置方式;
2.NAPT配置方式;
3.Easy-IP配置方式;
4.NAT server配置方式;
在内外网的边界,流量有出、入两个方向,所以NAT技术包含源地址转换和目标地址转换两类。一般情况下,源地址转换主要用于解决内部局域网计算机访问Internet的场景;而目标地址转换主要是用于解决Internet用户访问局域网服务器的场景,目标地址转换通常被称为服务器地址映射。
华为设备支持的源地址转换方式有:
- NAT NO-PAT:类似于Cisco的动态转换,只转换源IP地址,不转换端口,属于多对多转换,不能节约公网地址,实际情况下使用很少,主要适用于需要上网的用户较少,且公网地址足够的情况下;
- NAPT:类似于Cisco的PAT转换,NAPT既转换报文的源地址,又转换源端口。转换后的地址不能是外网接口的IP地址,属于多对多或多对一转换,可以节约IP地址,使用场景较多,主要适用于内部大量用户需要上网,同时仅有少数几个公网IP地址可用的场景下;
- 出接口地址:因其转换方式非常简单,所以也称为Easy-IP,和NAPT一样,既转换源IP地址,又转换源端口。区别是出接口地址方式转换后的地址只能是NAT设备外网接口所配置的IP地址,属于多对一转换,可以节约IP地址,主要适用于没有额外的公网地址可用,内部上网用户非常多的场景下,直接通过外网接口本身的IP地址作为转换目标;
- Smart NAT(智能转换):通过预留一个公网地址进行NAPT转换,而其他的公网地址用来进行NAT NO-PAT转换。其主要用户平时上网用户比较少,而申请的公网地址基本可以满足这些少量用户进行NAT NO_PAT转换,但是偶尔会出现上网用户倍增的情况;
- 三元组NAT:与源IP地址、源端口和协议类型有关的一种转换,将源IP地址和源端口转换为固定公网IP地址和端口,能解决一些特殊应用在普通NAT中无法实现的问题。其主要用于外部用户访问局域网用户的一些P2P应用。
本篇博文主要介绍前三种源地址转换。
华为设备的目标地址转换技术主要是NAT Server,可以基于IP地址转换,也可以基于“IP+端口+协议”进行转换。
在配置华为NAT转换时,经常会配置黑洞路由来解决路由环路和大量的无效ARP报文,关于其如何产生,大概就是,在有些NAT的转换方式中,是为了解决内网连接Internet,而映射出了一个公有IP,通过映射后的公网地址访问互联网。那么,若此时有人通过internet来访问这个映射出来的公有IP,就会产生路由环路及大量无效的ARP报文。若要详细说起来,又是很麻烦,但是解决这两个问题很简单,就是配置黑洞路由(将internet主动访问映射出来的地址的流量指定到空接口null 0)。这样就不会形成路由环路和产生大量ARP报文的情况。
需要配置黑洞路由的几种常见的NAT转换方式,如图:
华为的防火墙时基于状态化转发数据包,针对首个包严格执行策略检查,一旦被策略允许,将生成会话表,而同一个会话的后续包及返回报因为能够匹配会话表,将直接通过防火墙,不需要进行额外的策略检查,从而提高了转发效率。但是在有些情况下,仅仅依懒会话表不能转发某些特殊应用的流量。例如:FTP服务,其在主动模式下的工作流程图,如下:
由此可以看出,当客户端要求主动连接FTP服务器时,一点问题都没有;但是当FTP服务器主动发起请求时,就会发生FTP连接失败的情况。华为防火墙就是通过Server-map表来解决类似问题的。Server-map表记录应用层的关键信息,包括目标地址、目标端口和协议烈性,和会话表类似,匹配了Server-map表的数据流也可直接通过防火墙,如图:
这样就可以解决FTP服务器主动发起请求时,就不会导致FTP服务连接失败的情况。
Server-map表和会话表的区别:
- 会话表记录的是连接信息,包括连接状态;
- Server-map表记录的不是当前的连接信息,而是通过分析当前连接的报文后得到的信息。该信息可以解决接下来的数据流通过防火墙的问题。可以将Server-map表的作用理解为提前通过预判来解决将来可能发生的问题;
Server-map表除了解决类似FTP服务的问题外,Server-map表也被应用在NAT技术中。当在防火墙上配置某些类型的NAT后,在防火墙上会生成server-map表,默认生成两个server-map条目,分别是正向条目和反向条目(Reverse),如图:
Server-map表在NAT中的作用是:
- 正向条目:携带端口信息,用来使Internet用户访问内网中的服务器时直接通过server-map表来进行目标地址转换。
- 反向条目(Reverse):不携带端口信息,且目标地址是任意的,用来使服务器可以访问Internet;
小结:
防火墙接口从收到一个保温到最终发送出去需要经历一系列的处理流程,而NAT只是其中一项任务。NAT的配置受到路由即安全策略的影响,所以了解NAT对报文的处理流程对配置NAT有非常大的帮助。NAT对报文的处理流程图,如下:
NAT处理报文的流程如下:
(1)防火墙收到报文后,首先检查报文是否匹配Server-map中的条目,如果是,则根据表项转换报文的目标地址,然后进行步骤(3)处理;否则进行步骤(2)处理。
(2)查找是否存在目标NAT的相关配置,如果是,并且符合NAT条件,则转换目标地址后进行步骤(3)处理;否则直接进行步骤(3)处理。
(3)根据报文的目标地址查找路由表,如果存在目标路由,则进行步骤(4)处理;否则丢弃报文。
(4)依次匹配安全策略中的规则,如果策略允许报文通过,则进行步骤(5)处理;否则丢弃报文。
(5)查找是否存在源NAT的相关配置及是否符合NAT条件,如果是,则转换源地址后进行步骤(6)处理;否则直接进行步骤(6)处理。
(6)在发送报文之前创建会话,后续和返回的报文可以直接匹配会话表转发。
(7)防火墙发送报文。
注意:因为防火墙处理报文的顺序是目标地址转换→安全策略→源地址转换,所以在NAT环境中,安全策略的源地址应该是源地址转换之前的地址,目标地址应该是目标地址转换后的地址。
PC1通过202.106.0.20~21地址与PC2实现通信!
建议:实验环境尽量不要使用防火墙的G0/0/0接口,该接口默认是管理接口,并且由大量的默认配置。
[FW1]int g1/0/0
[FW1-GigabitEthernet1/0/0]ip add 192.168.1.1 24
[FW1-GigabitEthernet1/0/0]undo shutdown
[FW1-GigabitEthernet1/0/0]int g1/0/1
[FW1-GigabitEthernet1/0/1]ip add 202.106.0.1 24
[FW1-GigabitEthernet1/0/1]undo shutdown
Info: Interface GigabitEthernet1/0/1 is not shutdown.
[FW1-GigabitEthernet1/0/1]quit
[FW1]ip route-static 0.0.0.0 0.0.0.0 202.106.0.2
[FW1]firewall zone trust
[FW1-zone-trust]add int g1/0/0
[FW1-zone-trust]quit
[FW1]firewall zone untrust
[FW1-zone-untrust]add int g1/0/1
[FW1-zone-untrust]quit //将内外网接口加入防火墙的指定区域
[FW1]security-policy //配置安全策略
[FW1-policy-security]rule name sec_1 //配置规则并制定规则名为sec_1
[FW1-policy-security-rule-sec_1]source-zone trust
[FW1-policy-security-rule-sec_1]destination-zone untrust
[FW1-policy-security-rule-sec_1]source-address 192.168.1.0 24 //指定条件
[FW1-policy-security-rule-sec_1]action permit //指定动作
[FW1-policy-security-rule-sec_1]quit
[FW1-policy-security]quit
[FW1]
[FW1]nat address-group natgroup //配置NAT地址组,指定名称为natgroup
[FW1-address-group-natgroup]section 0 202.106.0.20 202.106.0.21
//通过section关键字指定地址组的起始地址和结束地址
[FW1-address-group-natgroup]mode no-pat local
//指定地址组的模式为no-pat。local关键字表示对本区域有效
[FW1-address-group-natgroup]quit
[FW1]
[FW1]nat-policy //配置NAT策略
[FW1-policy-nat]rule name natpolicy
//配置名称为natpolicy的NAT规则
[FW1-policy-nat-rule-natpolicy]source-zone trust
[FW1-policy-nat-rule-natpolicy]source-address 192.168.1.0 24
[FW1-policy-nat-rule-natpolicy]destination-zone untrust //指定条件
[FW1-policy-nat-rule-natpolicy]action nat address-group natgroup
//指定动作,满足条件的数据包将依据地址组做NAT NO-PAT方式的源地址转换
[FW1-policy-nat-rule-natpolicy]quit
[FW1-policy-nat]quit
[FW1]
注意:NAT策略不同于安全策略,安全策略是针对经过的数据流做规则检查:匹配的数据包或者转发,或者丢弃,安全策略决定了流量能否通过防火墙;而NAT策略对经过的数据流做规则检查,匹配的数据包或者做地址转换,或者不做地址转换,NAT策略决定了哪些流量需要NAT转换。
[FW1]ip route-static 202.106.0.20 32 null 0
[FW1]ip route-static 202.106.0.21 32 null 0
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]ip add 202.106.0.2 24
[AR1-GigabitEthernet0/0/0]undo shutdown
[AR1-GigabitEthernet0/0/0]int g0/0/1
[AR1-GigabitEthernet0/0/1]ip add 100.1.1.1 24
[AR1-GigabitEthernet0/0/1]undo shutdown
[AR1-GigabitEthernet0/0/1]quit
[AR1]ip route-static 202.106.0.0 24 202.106.0.1
PC进行验证:
防火墙进行验证:
[FW1]display firewall session table
//查看防火墙的会话表
Current Total Sessions : 3
icmp : public --> public 192.168.1.2:13610[202.106.0.20:13610] --> 100.1.1
.2:2048
icmp : public --> public 192.168.1.2:13354[202.106.0.20:13354] --> 100.1.1
.2:2048
icmp : public --> public 192.168.1.2:13098[202.106.0.20:13098] --> 100.1.1
.2:2048
//由此可以看出,内部地址192.168.1.2在经过防火墙之后更换为202.106.0.20地址进行通信
[FW1]display firewall server-map
//查看防火墙Server-map表
Current Total Server-map : 2
Type: No-Pat Reverse, ANY -> 202.106.0.20[192.168.1.2], Zone: untrust
Protocol: ANY, TTL:---, Left-Time:---, Pool: 0, Section: 0
: public
Type: No-Pat, 192.168.1.2[202.106.0.20] -> ANY, Zone: untrust
Protocol: ANY, TTL:360, Left-Time:360, Pool: 0, Section: 0
: public
//可以看出192.168.1.1.2与202.106.0.20形成映射关系
实验拓补与NAT NO-PAT一样!(在NAT NO-PAT基础上也可),为了初学者可以看懂,本人就重新部署网络设备了!
PC1通过202.106.0.100地址与PC2实现通信!
[FW1]int g1/0/0
[FW1-GigabitEthernet1/0/0]ip add 192.168.1.1 24
[FW1-GigabitEthernet1/0/0]int g1/0/1
[FW1-GigabitEthernet1/0/1]ip add 202.106.0.1 24
[FW1-GigabitEthernet1/0/1]q
[FW1]ip route-static 0.0.0.0 0.0.0.0 202.106.0.2
//配置防火墙网络参数及路由
[FW1]firewall zone trust
[FW1-zone-trust]add int g1/0/0
[FW1-zone-trust]quit
[FW1]firewall zone untrust
[FW1-zone-untrust]add int g1/0/1
[FW1-zone-untrust]quit
[FW1]security-policy
[FW1-policy-security]rule name sec_2
[FW1-policy-security-rule-sec_2]source-zone trust
[FW1-policy-security-rule-sec_2]source-address 192.168.1.0 24
[FW1-policy-security-rule-sec_2]destination-zone untrust
[FW1-policy-security-rule-sec_2]action permit
[FW1-policy-security-rule-sec_2]quit
[FW1-policy-security]quit
//配置防火墙安全策略
[FW1]nat address-group natgroup1
[FW1-address-group-natgroup1]section 0 202.106.0.100 202.106.0.100
[FW1-address-group-natgroup1]mode pat
//指定地址组的模式为pat,即NAPT模式
[FW1-address-group-natgroup1]quit
//配置NAT地址组
[FW1]nat-policy
[FW1-policy-nat]rule name natpolicy1
[FW1-policy-nat-rule-natpolicy1]source-address 192.168.1.0 24
[FW1-policy-nat-rule-natpolicy1]source-zone trust
[FW1-policy-nat-rule-natpolicy1]destination-zone untrust
[FW1-policy-nat-rule-natpolicy1]action nat address-group natgroup1
//指定动作,满足条件的数据包将依据地址组做NAPT方式转换
[FW1-policy-nat-rule-natpolicy1]quit
[FW1-policy-nat]quit
//配置防火墙NAT策略
[FW1]ip route-static 202.106.0.100 32 null 0
//配置黑洞路由
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip add 202.106.0.2 24
[R1-GigabitEthernet0/0/0]int g0/0/1
[R1-GigabitEthernet0/0/1]ip add 100.1.1.1 24
[R1-GigabitEthernet0/0/1]quit
[R1]ip route-static 202.106.0.0 24 202.106.0.1
//配置路由器的IP地址及路由
PC1进行验证:
防火墙进行验证:
[FW1]display firewall session table //查看防火墙会话表
Current Total Sessions : 2
icmp : public --> public 192.168.1.2:12082[202.106.0.100:2058] --> 100.1.1
.2:2048
icmp : public --> public 192.168.1.2:12338[202.106.0.100:2059] --> 100.1.1
.2:2048
[FW1]display firewall server-map //查看防火墙的Server-map
Current Total Server-map : 0
//NAPT方式进行NAT地址转换时,并不会生成Server-map表
实验拓补与NAT NO-PAT一样!(在NAPT基础上也可),为了初学者可以看懂,本人就重新部署网络设备了!
PC1通过防火墙接口地址与PC2实现通信!
[FW1]int g1/0/0
[FW1-GigabitEthernet1/0/0]ip add 192.168.1.1 24
[FW1-GigabitEthernet1/0/0]int g1/0/1
[FW1-GigabitEthernet1/0/1]ip add 202.106.0.1 24
[FW1-GigabitEthernet1/0/1]q
[FW1]ip route-static 0.0.0.0 0.0.0.0 202.106.0.2
//配置防火墙网络参数及路由
[FW1]firewall zone trust
[FW1-zone-trust]add int g1/0/0
[FW1-zone-trust]quit
[FW1]firewall zone untrust
[FW1-zone-untrust]add int g1/0/1
[FW1-zone-untrust]quit
[FW1]security-policy
[FW1-policy-security]rule name sec_3
[FW1-policy-security-rule-sec_2]source-zone trust
[FW1-policy-security-rule-sec_2]source-address 192.168.1.0 24
[FW1-policy-security-rule-sec_2]destination-zone untrust
[FW1-policy-security-rule-sec_2]action permit
[FW1-policy-security-rule-sec_2]quit
[FW1-policy-security]quit
//配置防火墙安全策略
[FW1]nat-policy
[FW1-policy-nat]rule name natpolicy2
[FW1-policy-nat-rule-natpolicy2]source-address 192.168.1.0 24
[FW1-policy-nat-rule-natpolicy2]source-zone trust
[FW1-policy-nat-rule-natpolicy2]destination-zone untrust
[FW1-policy-nat-rule-natpolicy2]action nat easy-ip
//配置满足条件的数据包根据地址组做出接口方式转换
[FW1-policy-nat-rule-natpolicy2]quit
[FW1-policy-nat]quit
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip add 202.106.0.2 24
[R1-GigabitEthernet0/0/0]int g0/0/1
[R1-GigabitEthernet0/0/1]ip add 100.1.1.1 24
[R1-GigabitEthernet0/0/1]quit
[R1]ip route-static 202.106.0.0 24 202.106.0.1
//配置路由器的IP地址及路由
PC1进行验证:
防火墙进行验证:
[FW1]display firewall session table //查看防火墙会话表
Current Total Sessions : 2
icmp : public --> public 192.168.1.2:12082[202.106.0.1:2073] --> 100.1.1
.2:2048
icmp : public --> public 192.168.1.2:12338[202.106.0.1:2074] --> 100.1.1
.2:2048
[FW1]display firewall server-map //查看防火墙的Server-map
Current Total Server-map : 0
/Easy-IP方式进行NAT地址转换时,并不会生成Server-map表
互联网用户通过202.106.0.20访问DMZ区域中的FTP服务器。
[FW1]int g1/0/0
[FW1-GigabitEthernet1/0/0]ip add 192.168.1.1 24
[FW1-GigabitEthernet1/0/0]int g1/0/1
[FW1-GigabitEthernet1/0/1]ip add 202.106.0.1 24
[FW1-GigabitEthernet1/0/1]quit
[FW1]ip route-static 0.0.0.0 0.0.0.0 202.106.0.2
//配置防火墙网络参数及路由
[FW1]firewall zone dmz
[FW1-zone-dmz]add int g1/0/0
[FW1-zone-dmz]quit
[FW1]firewall zone untrust
[FW1-zone-untrust]add int g1/0/1
[FW1-zone-untrust]quit
//将防火墙接口加入相应的区域中
[FW1]security-policy
[FW1-policy-security]rule name sec_4
[FW1-policy-security-rule-sec_4]source-zone untrust
[FW1-policy-security-rule-sec_4]destination-zone dmz
[FW1-policy-security-rule-sec_4]destination-address 192.168.1.0 24
[FW1-policy-security-rule-sec_4]service ftp
//配置条件为ftp协议,这属于精细NAT-server;如果是粗泛NAT-server,这步可以省略
[FW1-policy-security-rule-sec_4]action permit
[FW1-policy-security-rule-sec_4]quit
[FW1-policy-security]quit
//防火墙配置安全策略
[FW1]firewall interzone dmz untrust
[FW1-interzone-dmz-untrust]detect ftp
[FW1-interzone-dmz-untrust]quit
//.配置FTP应用层检测,默认已经开启,可以省略
[FW1]nat server natserver_ftp protocol tcp global 202.106.0.20 21 inside 192.168.1.2 21
//配置NAT server,natserver_ftp为策略名称,global后为全局地址和端口
<内部地址的端口转化为外部不同的端口>
<也可添加no-reverse参数,表示不再产生server-map表内容>
<也可以不配置端口信息>
[FW1]ip route-static 202.106.0.20 32 null 0
<配置黑洞路由>
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip add 202.106.0.2 24
[R1-GigabitEthernet0/0/0]int g0/0/1
[R1-GigabitEthernet0/0/1]ip add 100.1.1.1 24
[R1-GigabitEthernet0/0/1]quit
[R1]ip route-static 202.106.0.20 24 202.106.0.1
//配置路由器接口地址及路由
验证效果:
[FW1]display firewall session table
Current Total Sessions : 1
ftp : public --> public 100.1.1.2:49160 +-> 202.106.0.20:21[192.168.1.2:21]
[FW1]display firewall server-map
Current Total Server-map : 2
Type: Nat Server, ANY -> 202.106.0.20:21[192.168.1.2:21], Zone:---, protocol
:tcp
: public -> public
Type: Nat Server Reverse, 192.168.1.2[202.106.0.20] -> ANY, Zone:---, protocol:tcp
: public -> public, counter: 1
自行进行验证!从防火墙的会话表中,可以看出效果!
———————— 本文至此结束,感谢阅读 ————————
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。