常见的路由控制工具有以下几类Distribute-list;Filter-list;Offset-list;Route-map。
本篇总结我们就单独看一下distribute-list
Distribute-List
distribute-list:是一种用于路由更新的工具,只能过滤路由信息,而不能过滤LSA。因此在调用的时候我们需要注意的是不同的路由协议下的不同点。
所以我们按路由协议的种类进行划分。
并且在使用时可以与ACL或者PREFIX-LIST搭配使用。对路由抓取工具不了解的欢迎看一下我的上一篇文档 https://blog.51cto.com/14804158/2505054
在距离矢量协议中(RIP和EIGRP)
在距离矢量中路由之间,路由器之间传递的是路由信息,分发列表可以分别作用于in方向和out方向,无论在哪个方向均可以实现对路由的控制。也就是说,如果要针对某条路由,既可以在某个路由器的出方向控制接收路由器能收到那些路由,也可以在接收路由器上做过滤入站的路由以达到路由的控制的目的。如果做了路由的过滤,会对下游路由器也有影响。
流程图如下:
在链路状态协议下:
如OSPF,协议本身传递的是LSA而不是路由信息。因此distribute-list在应用上也应该多多注意。
在in方向调用,而影响的并不是路由信息,而是在由数据库生成路由表的过程中。而在LSDB中的LSA会继续向其他路由器传递而不受到影响。因此效果只能作用于路由器本身而无法对其他路由器构成影响。
因此在此类协议中对out方向的调用有一定要求,只会影响本地始发的OE和ON路由,只能在ASBR上,在重分布的信息生成相应的LSA之前发生并作用,阻止了某条具体的路由形成LSA传递给邻居。对于其他类型的路由和其他路由器上没有作用。换句话说,只有在执行了重分布的路由器上并且只对重发布进来的路由有效。
流程图如下:
配置命令:
在协议进程下
in方向
distribute-list 1 in [接口]
out方向
distribute-list 1 out[接口|协议]
注意:无法在OSPF的进程下在出方向调用接口
示例1(单一路由环境,且路由协议为距离矢量的):
要求R3收不到192.168.2.0/24这条路由。
这里以EIGRP为例,RIP操作相同不做多余赘述。
我们先来看一下路由表
配置:
R3(config)#ip prefix-list 2.0 deny 192.168.2.0/24
R3(config)#ip prefix-list 2.0 permit 0.0.0.0/0 le 32
R3(config)#router eigrp 1
R3(config-router)#distribute-list prefix 2.0 in e0/0
同样,可以在R2的out方向调用,也可以实现只在R3上过滤的目的
同样的如果我们在R1的E0/0的出方向或者R2 E0/0入方向上调用
R2(config)#ip prefix-list 2.0 deny 192.168.2.0/24
R2(config)#ip prefix-list 2.0 permit 0.0.0.0/0 le 32
R2(config)#router eigrp 1
R2(config-router)#distribute-list prefix 2.0 in e0/0
观察实验输出,我们不仅在R2上过滤掉了这条路由也在R3上过滤了这条路由
通过实例1和2分析可以验证,Prefix-list在距离矢量路由协议中过滤了对应的路由,并且会对下游路由器造成影响。
实例2(单一路由环境OSPF)要求R3上收不到这条192.168.2.0/24这条路由
环境说明,路由条目192.168.0.0/24、192.168.1.0/24、192.168.2.0/24这三条路径均由R1通过重分布引入ospf。
配置:
在R3的E0/0入方向上
R3(config)#ip prefix-list 2.0 deny 192.168.2.0/24
R3(config)#ip prefix-list 2.0 permit 0.0.0.0/0 le 32
R3(config)#router ospf 1
R3(config-router)#distribute-list prefix 2.0 in e0/0
配置与距离矢量协议一样发现可以实现
注意:无法在OSPF出方向调用接口
但是如果调用在R2入方向调用接口e0/0呢?
R2(config)#ip prefix-list 2.0 deny 192.168.2.0/24
R2(config)#ip prefix-list 2.0 permit 0.0.0.0/0 le 32
R2(config)#router ospf 1
R2(config-router)#distribute-list prefix 2.0 in e0/0
通过观察路由表我们可以看出来,仅仅在R2上丢失了这条路由,而在R3上没有。这与我们之前所说的一致,因为无法阻止LSA的传播,因此只是在加路由表的瞬间会有所影响。但是不会影响到下游的路由器,那么这样会存在一个问题。那就是如果在R3上如果ping丢失的路由会ping不同。这是由于R5丢失了该路由的缘故。通过查看LSDB我们可以看到虽然R2上没有了这条路由但是LSDB中依然存在关于192.168.2.0/24的LSA描述信息。如上文中我们介绍的无二。
因此我们在距离矢量路由器中使用的时候应该注意这点。否则会造成排错时不必要的麻烦。
实例3(单一链路状态协议下,在ASBR的出方向调用)
拓扑图如同实例二,环境也是如同实例二
R1上配置
R1(config)#ip prefix-list 2.0 deny 192.168.2.0/24
R1(config)#ip prefix-list 2.0 permit 0.0.0.0/0 le 32
R1(config)#router ospf 1
R1(config-router)#distribute-list prefix 2.0 out
通过现象观察我们可以看到,在R2和R3上均不存在了192.168.2.0/24这条路由
同时我们查看一下R1的LSDB可以发现在ASBR R1并没有生成相关的5类LSA,这才是R2和R3上没有这条路由的根本原因。
实例4(多路由协议重分布之一)
环境说明,R1、R2运行EIGRP,R2、R3运行OSPF。R2上做单点双向重分布。
拓扑图如下:
这样R3可以收到关于192.168.0.0/24 192.168.1.0/24 192.168.2.0/24这三条路由。我们要求OSPF所有的路由器(不包括R2)不能收到192.168.2.0这条路由,并且所有的EIGRP路由器(R2除外)不能收到10.0.3.0/24这条路由
我们先来看一下R1和R3的路由表。确定一下初始状态的路由均为正常存在的。经过验证发现的确存在所需路由
实验配置:
R2:
首先我们禁止在OSPF区域收到192.168.2.0/24这条路由。
配置如下命令
R2(config)#ip prefix-list DENY-EIGRP seq 5 deny 192.168.2.0/24
R2(config)#ip prefix-list DENY-EIGRP seq 10 permit 0.0.0.0/0 le 32
R2(config)#router ospf 1
R2(config-router)#distribute-list prefix DENY-EIGRP out eigrp 1 #这里out方向跟的是eigrp,意思是针对EIGRP 1通过重分布引入的外部路由
类似的我们在EIGRP区域禁止10.0.3.0/24
R2(config)#ip prefix-list DENY-OSPF seq 5 deny 10.0.3.0/24
R2(config)#ip prefix-list DENY-OSPF seq 10 permit 0.0.0.0/0 le 32
R2(config)#router eigrp 1
R2(config-router)#distribute-list prefix DENY-OSPF out ospf 1 #这里out方向跟的是ospf,意思是针对EIGRP 1通过重分布引入的外部路由
我们再次查看一下R1和R3的路由,发现相应的路由已经成功过滤
实例5(多路由协议环境重分布之二)
继续沿用上一个实验的环境,我们在R2上我们做一个小小的配置改动。R2有一个直连网段,假设是2.2.2.0/24,R2把这个直连网段同时既重分布进EIGRP又重分布进OSPF。
修改完毕之后我们先来查看一下R3的路由表确保R2重分布的路由已经在R3上有所体现
假设我们不允许R3收到这条R2的直连网段2.2.2.0/24这个信息,如果我们做了以下的操作,那么会怎么样呢?
R2(config)#ip prefix-list DENY-CONNECTED seq 5 deny 2.2.2.0/24
R2(config)#ip prefix-list DENY-CONNECTED seq 10 permit 0.0.0.0/0 le 32
R2(config)#router ospf 1
R2(config-router)#distribute-list prefix DENY-CONNECTED out connected
我们再来查看一下R3的路由表,结果发现这条路由信息依然存在于R3的路由表中。那这又是为什么呢?这是因为我们不仅仅在把这条路由重分布进了OSPF同时也重分布进了EIGRP这就导致了虽然我们通过上面的命令DENY掉了直连的重分布,但是通过EIGRP又再一次重分布进了OSPF之中。因此就存在了这样的信息。
那么针对这个应该怎么做呢?我们可以通过通过下面这个命令在原有的EIGRP-DENY这个preffix-list中插入一个条目来实现。
R2(config)#ip prefix-list DENY-EIGRP seq 6 deny 2.2.2.0/24 #注意我们这里插入的为seq值为6
但是这样我们做了两次关于同一条路由的禁止过于繁琐。这一段命令来涵盖我们之前的所有操作。也就是说在OSPF进程下不必涵盖所有的路由
R2(config)#ip prefix-list DENY-ALL seq 5 deny 2.2.2.0/24
R2(config-router)#ip prefix-list DENY-ALL seq 10 permit 0.0.0.0/0 le 32
R2(config)#router ospf 1
R2(config-router)#distribute-list prefix DENY-ALL out #注意这里的out之后没有跟任何的参数(协议),这里就是默认了通过所有方式获得的外部路由。
最后再来查看一下R3路由
对于Distribute的用法和就先总结到这里,后面我们会介绍其他路由控制工具。