在学习过基于路由器的NAT网络地址转换,现在学习基于防火墙NAT的网络地址转换,防火墙的NAT配置和路由器的NAT配置还是有比较大的区别。
防火墙NAT是通过NAT策略实现的,在创建防火墙NAT之前需要先创建防火墙的安全策略。防火墙是不能直接在接口下配置NAT接口映射的
一、实验环境配置
实验拓扑结构图按标注给实验设备配置IP地址,在路由器中配置接口信息,在防火墙中配置接口信息。
给防火墙配置静态路由
命令:[FW01]ip route-static 0.0.0.0 0 GigabitEthernet 1/0/1 12.1.1.2
在防火墙中先划分接口的安全区域,将内网划分为Trust区域,将Internet划分为Untrust区域。
命令:[FW01]firewall zone trust,进入到Trust区域
命令:[FW01-zone-trust] add interface GigabitEthernet 1/0/2,将接口划分到Trust区域,那接口所在的公司内网就属于安全区域。
命令:[FW01]firewall zone untrust,进入untrust区域
命令:[FW01-zone-untrust]add interface GigabitEthernet 1/0/1,将接口划分到Untrust区域
在防火墙配置安全策略
命令:[FW01]security-policy,进入到策略里面
命令:[FW01-policy-security]rule name tru-to-utru,新建一个策略规则,名字是tru-to-utru,意思是从trust区域到untrust区域
命令:[FW01-policy-security-rule-tru-to-utru]source-zone trust,配置源区域是trust
命令:[FW01-policy-security-rule-tru-to-utru]destination-zone untrust,目的区域是untrust
命令:[FW01-policy-security-rule-tru-to-utru]source-address 192.168.1.0,源地址是192.168.1.0
命令:[FW01-policy-security-rule-tru-to-utru]action permit,允许的动作是通过
配置安全策略,允许192.168.1.0网段的流量从trust区域到untrust区域的通过,安全策略没有配置目的地址,是因为连接Internet的地址太多,可以不进行配置,就只允许主动向外访问,不允许外主动向内访问。
在配置防火墙NAT之前应该先配置NAT策略,NAT策略配置应先配置防火墙地址组,然后再配置防火墙安全策略。
现在的需求是,给公司内网的两个主机PC1和PC2,两个客户端分配公有地址。服务器是外部访问内部的时候需要配置NAT,内部的主机访问内部的服务器是不需要配置NAT的。
向运营商申请四个地址120.1.1.101到10.1.1.104,分配给两台主机,两个客户端。运营商分配的地址120.1.1.0网段是和防火墙接口地址12.1.1.0不在同一个网段,所以应该由运营商的路由器进行静态路由的书写
命令:[ISP]ip route-static 120.1.1.101 32 GigabitEthernet 0/0/1 12.1.1.1
命令:[ISP]ip route-static 120.1.1.102 32 GigabitEthernet 0/0/1 12.1.1.1
命令:[ISP]ip route-static 120.1.1.103 32 GigabitEthernet 0/0/1 12.1.1.1
命令:[ISP]ip route-static 120.1.1.104 32 GigabitEthernet 0/0/1 12.1.1.1
命令:[ISP]dis ip routing-table,查看路由表的信息
实验环境配置完毕
二、配置防火墙静态NAT一对一
配置公有地址组
命令:[FW01]nat address-group no-pat01,创建一个地址组,名字叫no-pat01,因为这个是用来配置静态的一对一,所以我叫no-pat01
命令:[FW01-address-group-no-pat01]mode no-pat global,模式是no-pat global
配置地址段
命令:[FW01-address-group-no-pat01]section 0 120.1.1.101,配置的地址段是0,如果配置的地址分为好多个段,就可以给每个段分配一个ID,比如120.1.1.101-120.1.1.102为一个段ID是1,120.1.1.103-120.1.1.104为一个段ID是2,相当一后面的数字是ID。因为是一对一配置,所以就给了一个地址,正常是应该配置起始地址和结束地址的,但是因为就配置一个地址,所以直接写一个地址就可以。
配置NAT安全策略,将NAT地址组和NAT的安全策略绑定
命令:[FW01]nat-policy,进入NAT策略
命令:[FW01-policy-nat]rule name pc1,配置规则,因为是给PC1配置的说以就起名字叫pc1
命令:[FW01-policy-nat-rule-pc1]source-zone trust,配置源区域是trust
命令:[FW01-policy-nat-rule-pc1]destination-zone untrust,配置目的区域是untrust
命令:[FW01-policy-nat-rule-pc1]source-address 192.168.1.1 32,配置源地址是192.168.1.1
命令:[FW01-policy-nat-rule-pc1]action source-nat address-group no-pat01,配置规则的行为动作是让源地址和NAT进行绑定,绑定的NAT地址组是no-pat01。
配置好后用PC1访问百度访问成功。
分析整个过程。首先是PC1向外发出PING请求数据包,数据包到防火墙之后,会查看路由进行转发,查看路由之后,因为目的地址是80.1.1.1路由表没有这个路由,就从默认路由转出,然后匹配防火墙区域间策略turst到untrust的流量允许通过,然后再匹配NAT安全策略,有匹配的信息,将192.168.1.1转换成120.1.1.101,然后生成会话表,然后根据会话表进行NAT地址转换,然后从NAT转换后从默认路由转发到Internet的路由器上,然后再转发到百度的服务器。百度的服务器先将回包数据转发到Internet的路由器上,通过路由器配置的静态路由再转发到防火墙上,在防火墙上匹配会话表然后允许流量通过,回到PC1。
在用PC1通一下百度,快速查看防火墙会话表ping五个包,有五条会话表。在会话表中,包含两个源地址,一个是NAT转换前的,一个是NAT转换后的。
现在在做用PC1和PC2各通百度一个包,然后查看会话表有什么不同。看到在PC1上配置了防火墙NAT转换后的会话表会有源地址和转换后的地址,但是没有配置NAT的PC2就没有转换后的地址。
防火墙在进行NAT转换时会创建一个server-MAP表Server-map表分为两个部分,因为是时间顺序生成,先生成的会在下面,第一部分是no-pat Reverse的逆向server-map表,第二部分是no-pat的正向server-map。所谓的正向server-map表是从内向外发送的数据,IP地址是192.168.1.1由地址转换到120.1.1.101转发到ANY,匹配这个表就可以完成源地址转换成NAT地址的高速转换。所谓逆向server-map表就是从外向发送到内向的数据,IP地址是ANY转发到120.1.1.101然后地址转换到192.168.1.1,实现目的地址的高速转换。
在做配置NAT地址组的时候,配置了一个global,还有local,那这两个配置有什么区别呢。分别在NAT的global模式和local模式下用PC1通百度,然后查看防火墙的server-map表
global模式local模式在global模式的时候,防火墙创建的会话表的zone区域是空的,意思是在任意区域来的流量都可以匹配这个会话表然后进行NAT地址的转换。在local模式的时候,防火墙创建的会话表的区域是untrust,意思是只有在通往untrust的流量和从untrust区域来的才可以匹配这个会话表然后进行NAT地址的转换。所以global是不做安全区域限制的,local是会做安全区域的限制的。
来说说NAT转换的黑洞路由,其实跟路由器的黑洞接口类似。当外网的客户端访问内网的服务器的时候服务器会给出一个公有地址,比如说120.1.1.0网段的地址,假如说现在外网客户端访问防火墙的120.1.1.101,就会先把数据发送到客户端的网关,即Internet的路由器,然后由路由器中的静态路由转发到防火墙,再在防火墙中查路由表,但是路由表中没有120.1.1.0网段的路由信息没有120.1.1.101的路由信息,防火墙路由器就会从配置的默认路由转发到Internet的路由器上,然后Internet的路由器再从静态路由转发到防火墙上,然后再从防火墙转发到Internet的路由器上,以此循环。
在外网的客户端上ping防火墙120.1.1.101一个包,在g1/0/1上抓包。ping失败,不通。在数据包上,一共发送了254个数据包,都是ICMP的request消息。像这样消息循环发送的称为数据环路,一条消息环路,只能被转发255次,在每个数据包下面有个存活时间当这个值到255的时候就不在进行转发了。
如何解决这个问题呢
可以通过配置默认路由将这个路由信息给他制定转发到黑洞里面去
命令:[FW01]ip route-static 120.1.1.101 32 null0,将120.1.1.101的数据转发到黑洞接口里面
这是手动配置产生黑洞路由
配置好后,用外网的客户端访问防火墙的120.1.1.101,然后重新在防火墙g1/0/1抓包这次就只发送一个包,生存时间的值是254,将发往120.1.1.101的数据都转发到黑洞里面直接丢弃了。
还可以通过在nat地址组里面配置,让数据自动进入黑洞。
命令:[FW01]undo ip route-static 120.1.1.101 32 null0,先关闭之前的配置的黑洞接口
命令:[FW01-address-group-no-pat01]route enable,在之前配置的NAT地址组里面开启允许NAT路由配置好后查看防火墙路由表的信息,会生成一个Unr和NAT相关的路由。这个就是直接产生黑洞路由。
配置好后,用客户端测试一下还是就只发送了一个包,其他的包都发送到黑洞接口,把数据丢弃掉了。
还有一个值得注意的是,在配置好静态的NAT的时候,会有这样一条通知说当前的配置模式是no-pat,即进行NAT转换但是不进行PAT端口转换,如果你的其他的某些业务不需要进行NAT的转换,还需要创建一个新的NAT规则叫No-nat。这是为什么呢?
现在有一个需求,在访问百度的时候进行地址NAT转换,在访问外网客户端Client3 200.1.1.1的时候不进行地址转换。查看NAT的策略,配置了一条是流量从trust区域到untrust区域允许192.168.1.1的通过,目的地址是Any。意味着pc1不仅可以访问百度,还可以访问200.1.1.1。先在限制pc1在访问百度的时候才会进行NAT地址转换,在访问200.1.1.1的时候不进行NAT地址转换。
命令:[FW01-policy-nat]rule name PC1,进入NAT安全策略
命令:[FW01-policy-nat-rule-PC1]destination-address 80.1.1.1 32,配置目的地址查看配置结果,源地址是192.168.1.1访问目的地址80.1.1.1的时候进行源地址的NAT转换。
配置好后用PC1分别去通百度和200.1.1.1,看看能不能通。ping百度能通 ping200.1.1.1也能通
这是因为在配置NAT安全策略动作的时候可以配置destination-address目的地址的NAT地址转换,也可以配置source-address源地址的NAT地址转换,还可以配置不进行地址转换。在PC1策略中配置的是源地址进行NAT转换,所以在匹配到安全策略的source-address的时候进行NAT地址转换,没有匹配的就不进行地址转换(默认动作是禁止的)。而destination-address因为没有做目的地址的NAT转换所以,对于目的地址不管有没有匹配到安全策略,他都会进行地址转换(默认动作是放行的)。
如果要不让访问200.1.1.1的时候进行地址转换就要再配置一条no-nat的安全策略。
命令:[FW01-policy-nat]rule name PC1-deny,配置一条新的策略名字叫PC1-deny
命令:[FW01-policy-nat-rule-PC1-deny]source-zone trust,源区域是trust
命令:[FW01-policy-nat-rule-PC1-deny]destination-zone untrust,目的区域是untrust
命令:[FW01-policy-nat-rule-PC1-deny]source-address 192.168.1.1 32,源地址是192.168.1.1
命令:[FW01-policy-nat-rule-PC1-deny]destination-address any,目的地址是任何
命令:[FW01-policy-nat-rule-PC1-deny]action no-nat,配置的动作是不做NAT转换配置好后查看。现在配置了两条策略,再匹配的时候会按照顺序进行匹配。访问80.1.1.1的流量就会匹配到PC1的策略,允许地址转换,流量能够通过。访问200.1.1.1的流量因为匹配不上PC1策略的目的地址,于是会匹配到PC1-deny的目的地址的策略上,操作动作是拒绝地址转换,流量无法通过。
下面用PC1分别访问80.1.1.1和200.1.1.1。访问200.1.1.1失败访问80.1.1.1成功。
这个就是对这个INFO的解释和运用。
三、配置防火墙静态NAT多对多
配置静态NAT多(地址组)对多(地址池),从本质上来说还是一对一绑定,在进行绑定时配置是多对多配置,在内部获取外部NAT地址时,仍然是一对一绑定。如果采用的是一对一绑定,就要不断创建NAT的地址组,然后和本地地址进行绑定。在之前的配置中,给本地地址192.168.1.1创建的地址组,如果要对192.168.1.2进行NAT配置,就要为192.168.1.2创建一个地址组
命令:[FW01]nat address-group pc2,配置NAT策略名字叫pc2
命令:[FW01-address-group-pc2]mode no-pat global,配置模式
命令:[FW01-address-group-pc2]route enable,允许路由
命令:[FW01-address-group-pc2]section 0 120.1.1.102,配置地址
接下来,给pc2配置nat的安全策略
命令:[FW01]nat-policy ,进入到nat的安全策略视图
命令:[FW01-policy-nat]rule name PC2,策略名字叫PC2
命令:[FW01-policy-nat-rule-PC2]source-zone trust,源区域是trust
命令:[FW01-policy-nat-rule-PC2]destination-zone untrust ,目的区域是untrust
命令:[FW01-policy-nat-rule-PC2]source-address 192.168.1.2 32,源地址是192.168.1.2
命令:[FW01-policy-nat-rule-PC2]action source-nat address-group PC2,将源地址和NAT地址进行绑定查看配置结果
用PC2访问百度,看能不能通能通,配置成功。查看NAT的address-group地址表,我们看到配置了两个地址组,一个是给PC1配置的,一个是给PC2配置的。所有如果采用一对一配置需要创建多个地址组,还需要配置多个nat策略,会比较麻烦。
可以通过创建公有地址组和私有地址池进行绑定,然后自动分配,然后通过server-map表进行流量的控制。和基于路由器的多对多的NAT转换是一致的。
配置
命令:[FW01]nat address-group ag01,创建一个NAT地址组名字叫ag01
命令:[FW01-address-group-ag01]mode no-pat global,配置模式
命令:[FW01-address-group-ag01]route enable,生成全局路由
命令:[FW01-address-group-ag01]section 0 120.1.1.101 120.1.1.103,配置IP地址段
Error: The address section conflict,配置的时候有一条报错,说有地址段冲突,是因为在配置section的时候后面的段号 0 有冲突,在no-pat01的地址组中section 0配置给了120.1.1.101,和现在配置的120.1.1.101 到 120.1.1.103之间有地址冲突,在120.1.1.102的地址给了pc2的地址组,和现在的地址组冲突。解决的办法是,把之前的地址组删除,因为之前的配置不做了,现在是做多对多的配置,所以之前的配置就不需要了。删除这个地址组的时候提示被NAT安全策略使用了,于是又需要删除对应的NAT安全策略。查看NAT安全策略,需要把这两个安全策略删除
命令:[FW01]nat-policy ,进入到nat策略视图
命令:[FW01-policy-nat]undo rule name PC1,删除给PC1配置的NAT策略
命令:[FW01-policy-nat]undo rule name PC2,删除给PC2配置的NAT策略
命令:[FW01]undo nat address-group no-pat01,删除掉地址组no-pat01
命令:[FW01]undo nat address-group pc2,删除掉地址组pc2
删除之后,接上之前报错的地方继续配置section
命令:[FW01-address-group-ag01]section 0 120.1.1.101 120.1.1.103,配置地址段是从120.1.1.101到120.1.1.103,分配三个公有地址。
配置安全策略
命令:[FW01]nat-policy ,进入nat策略视图
命令:[FW01-policy-nat]rule name np01,配置的策略名字是np01
命令:[FW01-policy-nat-rule-np01]source-zone trust,源区域是trust
命令:[FW01-policy-nat-rule-np01]destination-zone untrust,目的区域是untrust
命令:[FW01-policy-nat-rule-np01]source-address 192.168.1.0 24,源地址是192.168.1.0,允许192.168.1.0的网段通过
命令:[FW01-policy-nat-rule-np01]action source-nat address-group ag01,将NAT地址组和本地地址池绑定
配置好后,分别用主机和客户端去通百度,每次一个包,然后迅速查看防火墙的会话表实验现象是用两台主机和两台客户端去通百度,只有最先请求访问的三台设备能够访问成功。从防火墙的会话表中可以看到,公有地址120.1.1.102分配给了192.168.1.2,公有地址120.1.1.101分配给了192.168.1.1,公有地址120.1.1.103分配给了192.168.1.4。和基于路由器的多对多配置一样,在会话表消失以后,任意三台设备都可以分配到这三个地址供上网使用。这次公有地址120.1.1.102分配给了私有地址192.168.1.2,公有地址120.1.1.101分配给了私有地址192.168.1.5,公有地址120.1.1.103分配给了私有地址192.168.1.4。
静态NAT多对多的地址转换,本质上是公有地址组内的多个地址和私有地址池内的多个地址进行一对一的绑定,在防火墙生成会话表之后可以访问网络,在会话表消除之后可以重新访问网络,没有访问到网络的,需要排队。
四、配置防火墙NAT端口转换NAPT
在基于路由器的NAT端口转换的时候,如果发送的是传输层的流量,在NAT转换的时候会把端口给转换了,如果发送的是ICMP的ping流量,在NAT转换的时候会转换对应的ICMPID信息。
要配置端口转换,就要将NAT地址组的模式转换成PAT的模式
命令:[FW01-address-group-ag01]mode pat ,进入到地址组视图,将模式配置成PAT模式
警告提示,说当前地址组运用在一个策略里面。所以说要修改地址组的配置,就要删除这个策略,重新配置策略。
命令:[FW01]dis nat-policy rule all,查看已经配置的NAT策略
命令:[FW01-policy-nat-rule-np01]undo action source-nat,进入到配置的NAT规则里面,删除绑定信息,然后修改配置NAT地址组后,重新进行绑定。
命令:[FW01-address-group-ag01]mode pat,进入到地址组视图,模式配置成PAT端口转换
命令:[FW01-address-group-ag01]section 0 120.1.1.101,如果是使用端口转换的话,可以配置使用一个公有地址就可以了。
命令:[FW01-policy-nat-rule-np01]action source-nat address-group ag01,回到NAT视图进行源地址和NAT地址组进行绑定
配置好后,用两个主句和两个客户端去访问百度,然后再查看防火墙会话表发现都访问成功,而且再转换过程中不仅将地址转换了,还将端口转换了。
在进行端口转换的时候,防火墙不会产生server-map表。对于server-map表是因为,在内部地址和公有地址建立映射关系之后,后续内部地址和公有地址就可以不用再建立映射关系,就能实现对重复的数据快速转发,但是端口转换的话,再每次进行访问都要进行内部地址和端口的转换,每次转换都是不一样的,因此不会建立server-map表。
端口转换关于内网外网地址比的问题。即一个公有地址可以限制能转换多少个私有地址,最多是60k多个。
再实验之前,先将之前的配置删除,因为要修改NAT地址组的配置,所以要删除NAT策略和地址组的绑定
命令:[FW01]nat-policy,进入NAT策略视图
命令:[FW01-policy-nat]rule name np01,进入NAT策略
命令:[FW01-policy-nat-rule-np01]undo action source-nat,删除之前的绑定
然后再NAT地址组中修改策略制定源IP的最大数量,即一个公有IP最大能转换多少私有IP,最大为63488个私有IP
命令:[FW01-address-group-ag01]srcip-car-num 3,配置最多转换三个私有IP
然后再NAT策略中绑定NAT地址组
[FW01-policy-nat-rule-np01]action source-nat address-group ag01,进入到NAT策略视图,配置NAT地址组的绑定
配置好后用两台主机和俩个客户端去访问百度,然后查看防火墙的会话表通过实验现象,看到四台设备同时访问百度,只有三台设备能够成功访问百度,而且防火墙的会话表也只建立了三个。
那控制内网外网地址比例问题主要运用在网络的带宽问题上,在向运营商申请的公有地址中运营商会限制这个网络的带宽,比如给120.1.1.101分配了100M的带宽,如果不进行内网地址的限制的话,可能出现一个公有地址同时转成100个私有地址,每个地址分到的带宽是1M,这样速度就会很慢,如果进行内网地址的限制,每个公有地址限制同时转换3个私有地址,每个地址分到的带宽就是33M,这样速度就快些。同时剩下的私有地址,就需要通过向运营商申请更多的公有地址才能上网。
五、防火墙smart-nat、easyip
Smart-nat,就是在网络用户低谷的时候采用no-nat的配置,在有大量用户的时候采用smart-nat的配置采用端口转换。这样配置的好处是,不进行端口转换的时候,可以和公有地址建立联系,生成server-map表,在下次流量进来的时候,可以快速进行访问;进行端口转换的时候,可以用一个公有地址进行多个私有地址的转换,用来弥补公有地址的不足。
实验之前先将之前的NAT策略删除,只删除绑定的NAT地址组就可以
然后再配置NAT地址组
命令:[FW01]undo nat address-group ag01,将原来的nat地址组删除
命令:[FW01]nat address-group ag01,创建一个新的地址组名字叫ag01
命令:[FW01-address-group-ag01]mode no-pat global,配置的地址组的模式
命令:[FW01-address-group-ag01]section 0 120.1.1.101 120.1.1.103,配置地址段
命令:[FW01-address-group-ag01]smart-nopat 120.1.1.104,配置smart-nat
命令:[FW01-address-group-ag01]route enable,开启路由
命令:[FW01-policy-nat-rule-np01]action source-nat address-group ag01,然后在NAT策略下绑定NAT地址组
这个配置相当于,在流量很少的时候,先用120.1.1.101到120.1.1.103的地址,进行no-pat的NAT地址转换,在流量很多的时候,启用smart-nopat,进行NAT的端口地址转换。可以说smart-nat就是一个备用地址,当不够用的时候,就释放出来使用。
配置好后用主机和客户端去访问百度,然后查看防火墙的会话表最后的实验结果是,都能访问百度,查看会话表可以知道,192.168.1.2和192.168.1.1和192.168.1.4都只是进行地址转换,没有进行端口转换,用的是no-pat的策略,192.168.1.5不仅发生了地址转换而且还发生了端口转换,从原来的256转换成2048,用的smart-nap的策略。
easy IP,在基于路由器的easy IP中,是通过使用路由器端口的地址来充当向运营商申请的公有地址,就不用再另外向运营商申请公有地址了。那在防火墙下的easy IP也是这样,通过将防火墙和外网连接的端口的IP地址来充当内网的公有地址,实现NAT的地址转换。
命令:[FW01-policy-nat-rule-np01]undo action source-nat,先将之前的配置的nat策略删除
在配置地址段的命令下可以配置easy-IP和address-group,以及其他。
命令:[FW01-policy-nat-rule-np01]action source-nat easy-ip,配置将源地址和easy-ip地址进行绑定,在地址转换的时候,转换成easy-ip的地址。
配置好后,用主机和客户端去访问百度,查看防火墙的会话表,观察实验结果实验现象是,四台设备都成功访问百度,查看会话表,四台设备的地址都转换成了easy-ip地址,即防火墙和外网的接口的IP地址12.1.1.1。