第一节 ACL
ACL:Access Control List,访问控制列表
作用:匹配数据,对特定的数据流进行允许/拒绝的操作
ACL根据其列表号可分为两种形态:
1.标准ACL
列表号为1-99,用于匹配数据源网络
配置:
一、定义标准ACL语句
Router(config)#access-list <1-99> permit/deny 源网络号 通配符
同一个ACL列表号下的每一条语句都会带有一个序列号,从10开始,以10递增。ACL的执行顺序由小到大进行匹配执行。
但ACL有隐含的拒绝一切(隐藏于ACL的最后端且无法发现),解决方法是强行写一条放行所有
Router(config)#access-list <1-99> permit any #
需要注意的是,这个命令如果前面写的是deny命令,代表需要拒绝一些特定的源数据流,则需要在最后写允许所有,否则按照序列号匹配会先放行掉所有流量!
二、调用ACL
Router(config)# int eX/y Router(config-if)# ip access-group <1-99> in/out
此处需要判断一下流量的方向,如果该流量是经过接口进入到本路由器的,则在这个接口上是in方向,如果该流量是从本路由器从该接口发出,则在这个接口上是out方向
标准ACL一般部署在距离源网络尽可能远的位置上。
标准ACL条目的增加和删除:开小号
ip access-list standard <1-99> no 10 # 删除响应序列号的语句 15 deny 192.168.1.0 0.0.0.255 # 增加序列号为15的ACL语句
2.扩展ACL
列表号为100-199,用于匹配数据源和数据目的,并且可以指定响应的协议。
配置:
一、定义扩展ACL语句
Router(config)# access-list <100-199> permit/deny 协议 源网络号 源网络号的通配符 目的网络号 目的网络号的通配符
扩展ACL的放行所有:
Router(config)# access-list <100-199> permit 协议 any any
二、调用扩展ACL语句
Router(config)#int eX/y Router(config-if)#ip access-group <100-199> in/out # 此处也需要判断流量的方向,判断依据与标准ACL完全一致。
3.反掩码、掩码和通配符的区别
一、掩码
在掩码中,1表示精确匹配,0表示随机 1和0,永远不交叉; 1永远在左边,0永远在右边; 在配置IP地址以及路由的时候,会使用掩码;
二、反掩码
在反掩码中,1表示随机,0表示精确匹配 0和1,永远不交叉; 0永远在左边,1永远在右边; 在路由协议的配置中,通过network命令进行网段宣告时,会使用
三、通配符
在统配符中,1表示随机,0表示精确匹配 0和1的位置,没有任何的固定限制 可以连续,可以交叉 在ACL中,使用的通配符 通配符掩码表
4.使用ACL抓取奇数或偶数路由
在网络号的掩码中,出现0之后就不可以出现1了。
但是在通配符(反掩码)中,出现0之后可以允许1继续出现。因此,我们可以使用这个机制来完成ACL的匹配奇/偶数路由。例如给出如下4个网段,172.16.0.0/24,172.16.1.0/24,172.16.2.0/24,172.16.3.0/24。
172.16.0.0/24 172.16.00000000.0 172.16.1.0/24 172.16.00000001.0 172.16.2.0/24 172.16.00000010.0 172.16.3.0/24 172.16.00000011.0
可以发现,奇数路由的特征是:最后一位永远是1。
access-list 1 permit 172.16.1.0 0.0.0000 0010.255
即:172.16.1.0 0.0.2.255 就可以抓到奇数路由了。
第二节 NAT
NAT:Network Address Translation,网络地址转换/翻译
作用:将私网地址转换成公网地址
私网地址只能在局域网中使用,是不可以访问公网的。而公网地址既可以在局域网中使用,也可以在广域网中使用。
私网地址的范围:
10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.31.255.255 192.168.0.0 - 192.168.255.255
NAT的转换方式分为三种,分别是:静态NAT、动态NAT和端口复用NAT
部署NAT之前一定要确保该企业园区网的出口路由器可以正常访问外网,常用的方式是写默认路由匹配公网上所有的路由条目。
NAT的部署位置绝大部分情况下是企业的出口路由器,如图中R4
NAT的部署方式分为三种,静态NAT、动态NAT和端口复用NAT
1.端口复用NAT的部署(也是企业中常用的NAT部署方式)
(1)抓取待访问公网的内网主机
此处可以搭配ACL使用,如192.168.1.0/24网段内的主机需要访问公网,需要使用ACL将这些主机给抓取起来
R4(config)# access-list 1 permit 192.168.1.0 0.0.0.255 # 此处的permit不搭配接口下策略使用,不再是允许/放行的意思,而代表抓取。
(2)定义内外网属性
将连接内网的接口定义为内网,将连接外网的接口定义为外网
R4(config)# interface e0/3 R4(config-if)# ip nat inside # 定义为NAT内网接口 R4(config)# interface e0/0 R4(config-if)# ip nat outside # 定义为NAT外网接口
(3)定义NAT语句
将ACL列表号为1的源地址按照内外网属性进行网络地址转换
R4(config)# ip nat inside source list 1 interface e0/0 overload # 将内网ACL列表号为1的内部主机流量转换成e0/0的公网接口地址来访问公网。
其中overload用于表示端口复用,即一个公网地址可以为多个私网地址提供服务,理论上最多可以有65535台主机共用同一个公网IP地址。
2.静态NAT的部署
假设该公司内PC1的地址为192.168.1.100,为该公司的Web服务器,希望该服务器通过特定申请的公网IP地址上网,如:47.93.22.66,则可以依靠静态NAT来实现。
(1)定义内外网属性
将连接内网的接口定义为内网,将连接外网的接口定义为外网
R4(config)# interface e0/3 R4(config-if)# ip nat inside # 定义为NAT内网接口 R4(config)# interface e0/0 R4(config-if)# ip nat outside # 定义为NAT外网接口
(2)定义NAT语句
R4(config)# ip nat inside source static 192.168.1.100 47.93.22.66 # 将内网192.168.1.100私有地址访问公网时转换为47.93.22.66。
3.动态NAT的部署
假设该公司申请到一个公有地址的地址段,如47.93.22.100 – 47.933.22.104,则可以使用动态NAT实现访问公网的需求。
1.匹配内网数据流
R4(config)# access-list 1 permit 192.168.1.0 0.0.0.255
2.定义内外网属性
将连接内网的接口定义为内网,将连接外网的接口定义为外网
R4(config)# interface e0/3 R4(config-if)# ip nat inside # 定义为NAT内网接口 R4(config)# interface e0/0 R4(config-if)# ip nat outside # 定义为NAT外网接口
3.定义NAT地址池,表明哪些公网地址可用
R4(config)#ip nat pool Lab 47.93.22.100 47.93.22.104 netmask 255.255.255.0 # NAT地址池名为Lab,该地址池中起始可用地址为47.93.22.100,结束可用地址为47.93.22.104,掩码长度均为24位。
4.定义NAT语句
R4(config)#ip nat inside source list 1 pool Lab overload # 将ACL列表号为1的内网地址根据地址池Lab的公网地址进行转换,在不够使用的时候,使用端口复用技术。
查看NAT转换表象:
Router#show ip nat translations
该转换表项是可以进行清除的
Router#clear ip nat translations *
值得注意的是:该命令只可以清除端口复用NAT和动态地址池NAT的转换表象,静态NAT的表象是不会被清除掉的。
第三节 路由策略
路由策略是指:控制收发路由明细的过程,一般常见于重分发中
路由策略需要依靠ACL+Route-map来实现
Route-map介绍:
Router(config)# route-map name permit/deny 10 # permit表示放行,deny表示拒绝。 Router(config-route-map)# match ip address 1 # 匹配ACL列表号为1的流量 route-map 也有隐含的拒绝一切的语句,需要写一个放行其它所有流量的空route-map route-map name permit 20 # 写一个比deny号大的route-map,下面的匹配不写,代表匹配所有
实现过程:
1.使用标准ACL抓取路由前缀
R2(config)# access-list 1 permit 172.16.1.0 0.0.0.255 # 这里的permit依旧是抓取的意思
2.在Route-map下设置行为
R2(config)# route-map A deny 10 R2(config-route-map)# match ip address 1 # 匹配ACL列表号为1的流量 R2(config)# route-map A permit 20 # 放行其它所有流量
3.在重分发时关联Route-map
R2(config)# router ospf 1 R2(config-router)# redistribute eigrp 1 subnets route-map A
使用此方法的缺陷是:ACL无法匹配掩码,只要前缀相同,就能匹配上。针对此问题,可以引入第二种路由策略的方案:前缀列表+Route-map
Prefix-List介绍:
ip prefix-list name permit/deny 网络前缀/前缀长度 ge le permit:抓取 deny:不抓取 ge:大于等于 le:小于等于, 使用方法:ge<= 掩码长度 <= le 如果ge,le都不写,则默认ge=le=前缀长度 如果不写le,则le默认值为32位 如果不写ge,则ge默认值位为前缀掩码长度
如抓取25位掩码
ip prefix-list A permit 10.0.1.0/24 ge 25 le 25
前缀列表也有隐含的拒绝一切,解决方案同样是放行所有,
语法:
(config)#ip prefix-list A permit 0.0.0.0/0 le 32 如果想要通过前缀列表抓默认路由
语法:
(config)#ip prefix-list A permit 0.0.0.0/0
第四节 策略路由
策略路由(Policy based Routing)
在不改变路由表的基础之上,实现对流量的控制。
通过ACL+Route-Map实现
第一步,用ACL抓取路由前缀
(config)#access-list 1 permit 172.16.0.0 0.0.0.255
第二步,定义Route-map和行为
(config)# route-map PBR permit 10 # 需要放行流量,才能允许接下来的操作,因此是permit (config-route-map)# match ip address 1 (config-route-map)# set ip next-hop 24.1.1.4 # 设置下一跳IP地址为24.1.1.4。