前面的博文中我们讲到了具体的路由的抓取工具,感兴趣的同学可以参考上篇博文:《路由策略专题(一)之路由抓取工具》
这篇博文中,我们将详细讲解一下分发列表(Distribute-List)。分发列表在IGP中使我们常用的一种路由控制工具之一。可以同各种IGP协议进行协同工作。
distribute-list:是一种用于路由更新的工具,只能过滤路由信息,而不能过滤LSA。因此在调用的时候我们需要注意的是不同的路由协议下的不同点。
所以我们按路由协议的种类进行划分。可以与ACL或者PREFIX-LIST搭配使用
在距离矢量协议中(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上过滤的目的
通过实例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这条路由。
配置如下命令
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
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
但是这样我们做了两次关于同一条路由的禁止过于繁琐。这一段命令来涵盖我们之前的所有操作。
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的路由表发现这是2.2.2.0/24这个路由被成功的过滤掉了。
本篇文档就介绍到这里,希望能帮助到你。本博客内所有内容均为博主一个字一个字码上去的,并且专门设计了专门的实验拓扑。
需要实验拓扑的小伙伴可以关注一下我,给我私信或者加我的QQ,我可以将我的实验拓扑分享给你。谢谢