常见的路由控制工具有以下几类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方向,无论在哪个方向均可以实现对路由的控制。也就是说,如果要针对某条路由,既可以在某个路由器的出方向控制接收路由器能收到那些路由,也可以在接收路由器上做过滤入站的路由以达到路由的控制的目的。如果做了路由的过滤,会对下游路由器也有影响。

流程图如下:

spacer.gif路由控制工具(之一)分发列表(Distribute-List)_第1张图片

在链路状态协议下:

如OSPF,协议本身传递的是LSA而不是路由信息。因此distribute-list在应用上也应该多多注意。

在in方向调用,而影响的并不是路由信息,而是在由数据库生成路由表的过程中。而在LSDB中的LSA会继续向其他路由器传递而不受到影响。因此效果只能作用于路由器本身而无法对其他路由器构成影响。

因此在此类协议中对out方向的调用有一定要求,只会影响本地始发的OE和ON路由,只能在ASBR上,在重分布的信息生成相应的LSA之前发生并作用,阻止了某条具体的路由形成LSA传递给邻居。对于其他类型的路由和其他路由器上没有作用。换句话说,只有在执行了重分布的路由器上并且只对重发布进来的路由有效。

流程图如下:

spacer.gif路由控制工具(之一)分发列表(Distribute-List)_第2张图片

配置命令:


在协议进程下

in方向

distribute-list 1 in [接口]

out方向

distribute-list 1 out[接口|协议]

注意:无法在OSPF的进程下在出方向调用接口



示例1(单一路由环境,且路由协议为距离矢量的):

要求R3收不到192.168.2.0/24这条路由。

这里以EIGRP为例,RIP操作相同不做多余赘述。

图片.png

spacer.gif

我们先来看一下路由表

spacer.gif图片.png


配置:

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上过滤的目的

spacer.gif图片.png


同样的如果我们在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上过滤了这条路由

spacer.gif图片.png


通过实例1和2分析可以验证,Prefix-list在距离矢量路由协议中过滤了对应的路由,并且会对下游路由器造成影响。



实例2(单一路由环境OSPF)要求R3上收不到这条192.168.2.0/24这条路由

spacer.gif图片.png

环境说明,路由条目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

配置与距离矢量协议一样发现可以实现

图片.png

注意:无法在OSPF出方向调用接口

spacer.gif


但是如果调用在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描述信息。如上文中我们介绍的无二。

图片.png

因此我们在距离矢量路由器中使用的时候应该注意这点。否则会造成排错时不必要的麻烦。

spacer.gif



实例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这条路由

spacer.gif图片.png

同时我们查看一下R1的LSDB可以发现在ASBR R1并没有生成相关的5类LSA,这才是R2和R3上没有这条路由的根本原因。

spacer.gif图片.png


实例4(多路由协议重分布之一)

环境说明,R1、R2运行EIGRP,R2、R3运行OSPF。R2上做单点双向重分布。

拓扑图如下:

路由控制工具(之一)分发列表(Distribute-List)_第3张图片

这样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这条路由

spacer.gif

我们先来看一下R1和R3的路由表。确定一下初始状态的路由均为正常存在的。经过验证发现的确存在所需路由

spacer.gif图片.png

实验配置:

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的路由,发现相应的路由已经成功过滤spacer.gif图片.png


实例5(多路由协议环境重分布之二)

继续沿用上一个实验的环境,我们在R2上我们做一个小小的配置改动。R2有一个直连网段,假设是2.2.2.0/24,R2把这个直连网段同时既重分布进EIGRP又重分布进OSPF。

spacer.gif路由控制工具(之一)分发列表(Distribute-List)_第4张图片

修改完毕之后我们先来查看一下R3的路由表确保R2重分布的路由已经在R3上有所体现

图片.pngspacer.gif



假设我们不允许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之中。因此就存在了这样的信息。

spacer.gif图片.png


那么针对这个应该怎么做呢?我们可以通过通过下面这个命令在原有的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-List)_第5张图片

对于Distribute的用法和就先总结到这里,后面我们会介绍其他路由控制工具。