一、背景介绍
ACL全称access control list,作为一种路由选择工具更多的是应用于路由过滤,根据ACL编号可以分为:
-
基础访问控制列表
-
高级访问列表
-
指定2层接口组
[R1]acl number ?
INTEGER<2000-2999> Basic access-list(add to current using rules)
INTEGER<3000-3999> Advanced access-list(add to current using rules)
INTEGER<4000-4999> Specify a L2 acl group其中基础ACL只能指定源地址,高级ACL可以指定源、目的的IP地址,端口号与协议等五元组,不同于前缀列表,ACL可以过滤路由及数据包,而前缀列表仅能过滤路由条目。
二、实验拓扑
如上图所示,当启动ospf后(步骤略),此时在R2上能看到已成功建立全毗邻但在R3上还能学习到通往1.1.1.0/24网段的路由
创建一个标准的ACL[R2]acl number 2000[R2-acl-basic-2000]rule 0 deny source 1.1.1.0 0.0.0.255 [R2-acl-basic-2000]rule 5 permit
将ACL用到R2路由器ospf进程的入方向,为什么不能是R1的出方向,下文中会回答
[R2-ospf-1]filter-policy 2000 ?
export Filtering outgoing routing updates
import Filtering incoming routing updates此时会发现一个奇怪的现象:R2上已经过滤掉了1.1.1.0/24网段
但在R3上还能学习到通往1.1.1.0/24网段的路由
尽管R3上有路由,但是此时R3却无法ping同R1的1.1.1.0/24网段,原因就是R3的路由表上通往1.1.1.0/24网段的下一跳指向R2的23.0.0.1/24接口,但此时R2由于ACL的关系,过滤掉了1.1.1.0/24网段的路由,所以无法ping通,尽管R2上没有1.1.1.0/24网段的路由条目,但是lsdb中却有R1的1类lsa(1.1.1.1)[R2]display ospf lsdb
OSPF Process 1 with Router ID 2.2.2.2
Link State Database
Area: 0.0.0.0Type LinkState ID AdvRouter Age Len Sequence MetricRouter 2.2.2.2 2.2.2.2 706 48 80000009 1Router 1.1.1.1 1.1.1.1 757 60 8000000A 1Router 3.3.3.3 3.3.3.3 716 36 80000004 1Network 23.0.0.1 2.2.2.2 706 32 80000003 0Network 12.0.0.1 1.1.1.1 760 32 80000003 0其中就包含了1.1.1.0/24网段的信息
所以关于ACL过滤路由的本质就是: -
[R2]display ospf peer
OSPF Process 1 with Router ID 2.2.2.2
Neighbors
Area 0.0.0.0 interface 12.0.0.2(GigabitEthernet0/0/0)'s neighbors
Router ID: 1.1.1.1 Address: 12.0.0.1
State: Full Mode:Nbr is Slave Priority: 1
DR: 12.0.0.2 BDR: 12.0.0.1 MTU: 0
Dead timer due in 40 sec
Retrans timer interval: 5
Neighbor is up for 00:00:47
Authentication Sequence: [ 0 ]
Neighbors
Area 0.0.0.0 interface 23.0.0.1(GigabitEthernet0/0/1)'s neighbors
Router ID: 3.3.3.3 Address: 23.0.0.2 State: Full Mode:Nbr is Master Priority: 1DR: 23.0.0.2 BDR: 23.0.0.1 MTU: 0 Dead timer due in 36 sec
Retrans timer interval: 5 Neighbor is up for 00:00:03 Authentication Sequence: [ 0 ]
-
ACL不会过滤lsa信息,且同一个area内所有路由器的lsdb一致,这就解释了为什么R3上有1.1.1.0/24网段的路由
-
ACL过滤是发生在本地路由根据lsa计算的结果上,再一次印证了链路状态型协议是本地计算路由这一特性
-
至于为什么要配置在入方向(import),原因就是链路状态型协议对外发送的lsa,他并不受ACL约束,所以配置在出方向(export)并不会产生实际作用
-
但是对于rip,BGP这种宣告路由条目的距离矢量型协议,他们对外宣告的路由会受到ACL的影响
三、掩码、反掩码、通配符
本实验在配置时,宣告ospf接口用的是反掩码,宣告ACL时使用的是通配符,IP地址使用的是掩码,他们之间区别如下:
不少资料中提到过掩码、反掩码、通配符的区别,甚至百度也有专门介绍三种不同的文章,但此处需要纠正一点的是:通配符全称通配符掩码,就是坊间所说的反掩码,根本没有3种类型之说,掩码与通配符掩码的区别为:
-
在掩码中,1表示精确匹配,0表示忽略,在配置IP地址以及路由的时候,会使用掩码
-
在通配符掩码(反掩码)中,0表示精确匹配,1表示忽略,在ospf的配置中,通过network命令进行网段宣告时,在acl匹配路由时会使用通配符掩码
四、ospf接口宣告方式
ospf接口宣告有2种特殊宣告方式:
-
宣告时采用192.168.1.1 0.0.0.0,这种方式表示精确匹配到192.168.1.1这个接口,并将它在相应的area中激活ospf
-
宣告时采用0.0.0.0 255.255.255.255,这种方式表示该路由器上所有接口都在相应的area中激活ospf
通常情况下ospf的宣告方式为192.168.1.0 0.0.0.255,这种方式表明地址为192.168.1.0~255的接口都能在相应area中激活ospf,另需说明的是:宣告ospf接口时,不理会接口IP的掩码,只是被匹配IP地址。