OSPF过滤的方式有很多,各种方式达到的效果也不尽相同,这里主要是用实验来验证一下各种工作方式。

首先来说,这个路由过滤背后的需求就是不想让一些区域了解或者直到另外区域的一些隐私路由。

方式方法有很多。如果真的想做好网络设计和优化,那么路由过滤是一个很重要的课题。

还有一点是一定一定得注意的,那就是,一定要分清楚标准访问列表和扩展访问列表在路由过滤中的区别:

标准访问列表是可以路由层面和数据转发层面都可以控制的。

而扩展访问列表只能针对于数据转发层面进行控制,对路由前缀通告是一点都不起作用的。

第一种:Distribut-list x in

这种过滤方式不是针对哪个接口的In,而是针对是否要写入核心路由表,而且该命令只会干掉核心路由表,但是LSA依然会存储在路由器的ram里面.

clip_p_w_picpath002

下面我们来验证一下。

首先在R1/R2/R3都将ospf配置好。

然后再R3上面,其实通过查看路由表,可以发现已经学习到了1.1.1.1 2.2.2.2 192.1.12.0这三个网段的路由。

clip_p_w_picpath004

然后再查看R3的ospf数据库

clip_p_w_picpath006

因为只有一个区域,也没有ABR,所以就两类LSA,1类+2类.

然后这个时候再在R3上面加入过滤条件.配置更改为:

router ospf 1

router-id 3.3.3.3

log-adjacency-changes

network 3.3.3.3 0.0.0.0 area 0

network 192.1.13.0 0.0.0.255 area 0

distribute-list 1 in

!

access-list 1 permit 192.1.12.0 0.0.0.255

在该配置中,做了一个标准访问列表。只允许192.168.12.0/24的前缀被R3学习到。

并且是in的方向,就是说是对路由器的核心路由表学习的方向。

前面已经说过了,distribute-list x in只是把核心路由表进行一个过滤,但是lsa都是存放在本地路由器的存储器中的。

之前没有做过滤的时候,show ip route ospf是:

clip_p_w_picpath004[1]

现在再来对比一下做了路由过滤以后,在R3上面:

clip_p_w_picpath008

只有一条了,就是ACL 1允许的那条路由,其他两条:1.1.1.1和2.2.2.2都没有学到,最后看看ospf 数据库呢?

clip_p_w_picpath010

这里已经充分证明了,实际上lsa一类的还是保存在本地的,只是没有计算路由罢了。

这个是比较强硬的过滤方式。对路由器的性能没有很大改善的,只是纯粹的为了过滤路由,为安全着想.

第二种:Distribut-list x out

这种过滤方式,是对于从外面学习到的外部路由来说的,不仅仅是要干掉路由,还要干掉LSA.干净,彻底,杀人不留痕迹....

clip_p_w_picpath012

首先,R1和R2配置OSPF,R2作为ASBR,连接外部RIP网络,然后将RIP路由重分发到R2的ospf进程中,这样R1就可以学习到RIP网络中的3.3.3.3和192.168.13.0/24的网络前缀。

现在先来看看R1的路由表:

clip_p_w_picpath014

在R1上面,可以看到有两条OE2的路由,分别是R3上面的loopback0和192.1.13.0/24的网段.

也就是说从路由的层面上来说,实际上R1已经学习到了外部external的RIP路由了。

再来看看ospf的database.

ASBR会将外部路由以5类的lsa通告给ospf域内的所有路由器:

clip_p_w_picpath016

现在来验证一下关于out方向的过滤。

假如说我只想R1收一条外部的lsa,3.3.3.3,而关于192.1.13.0我根本就不想让R1了解。

这个时候就需要在R2这个ASBR上面做过滤。

在R2上面修改配置:

router ospf 1

router-id 2.2.2.2

log-adjacency-changes

redistribute rip subnets

network 2.2.2.2 0.0.0.0 area 0

network 192.1.12.0 0.0.0.255 area 0

distribute-list 1 out

!

router rip

version 2

network 192.1.13.0

no auto-summary

!

no ip http server

no ip http secure-server

!

access-list 1 permit 3.3.3.3

在上面的配置中,先坐一个ACL standard,允许3.3.3.3,deny所有其他的。然后在ospf下面做出方向的路由控制。

最后在R1上面:

clip_p_w_picpath018

我们看到实际上192.1.13.0的网段已经没有了。再来看看ospf的lsdb。

重点看5类的外部lsa,看看是否还有192.1.12.0.

clip_p_w_picpath020

这里可以看到,只有我ACL允许的type-5 3.3.3.3的lsa给传递过来了。192.1.13.0压根就没有发送过来。

总结:

这个out的命令只会工作在将其他的路由重分发到ospf进程中,所以只会工作在ASBR上面。

第三种:IP ospf database-filter all out

该过滤方式应用在接口下面,不会通告任何lsa出去,但是,并不影响ospf的邻居建立。

实验拓扑:

clip_p_w_picpath022

我们首先来看一下,如果3个设备正常的建立邻居,然后在R3上面,应该可以学习到下面的路由和LSA:

clip_p_w_picpath024

也就是说,R3通过lsa,计算出了三条ospf路由,R1的loopback0,R2的loopback0,还有192.1.12.0网段的。

现在R2上面的接口F1/1上面.将命令ip ospf database-filter all out应用下去。

注意,在接口下面应用了该命令以后,邻居将会重新协商:

clip_p_w_picpath026

现在在R2上面的配置为:

clip_p_w_picpath028

还有一点值得注意的是,当邻居重新建立以后,在R3上面就应该学习不到从R2发送过来的lsa了。可是我们可以看到:

在R3上面仍然数据库没有发生变化:

clip_p_w_picpath030

必须要手动的将ospf进程重启一次才能从新发送lsa,只要将ospf进程重启启动一次,我们就可以看到。在R3上面你的ospf数据库明显干净多了。只有一个一类的3.3.3.3的lsa了。

clip_p_w_picpath032

所以最后在R3上面,再来看看清楚的结果:

clip_p_w_picpath034

使用了命令ip ospf databse-filter all out命令以后,所以该接口不会发送所学习到的所有的lsaf1/1出去。故R3也学习不到任何路由从R1F1/1.但是邻居关系还是会正常建立的。只是不通告lsa出去罢了。这里不通告的lsa类型是所有1-7全部。对端的另据一个LSA

第四种:neighbor x.x.x.x database-filter all out

ip ospf database-filter all out同样的原理,但是该命令是用在router ospf进程下面而不是接口下面的,对象不是某一个接口而是哪一个邻居..该功能只能用于点到点网络或者是NBMA.

第五种:area x filter-list prefix xxx in/out

这种功能是对于不同的area进行的lsa过滤。

是用在abr上面的.可以控制lsa的入方向和出方向.

拓扑图:

clip_p_w_picpath036

在这个拓扑中,会分别验证in和out两种。

首先,正常情况下,R1/R2/R3都会学习到相互的路由通过ABR R2.

现在将R2的配置修改为下面的情况:

interface Loopback0

ip address 2.2.2.2 255.255.255.255

!

interface FastEthernet1/0

ip address 192.1.12.1 255.255.255.0

duplex full

speed auto

!

interface FastEthernet1/1

ip address 192.1.13.1 255.255.255.0

duplex full

speed auto

!

router ospf 1

router-id 2.2.2.2

log-adjacency-changes

area 0 filter-list prefix maipu out//这里area0在通告外部其他区域的lsa的时候只会按照ip prefix来进行通告lsa

network 2.2.2.2 0.0.0.0 area 0

network 192.1.12.0 0.0.0.255 area 0

network 192.1.13.0 0.0.0.255 area 10

!

ip prefix-list maipu seq 1 permit 192.1.12.0/24//ip prefix只允许通告192.1.12.0/24的前缀,通过观察拓扑图可以看到,其实在R1上面还有1.1.1.1/32的前缀,因为没有写道prefixpermit,所以R3因为收不到R11.1.1.1lsa,而因为没有lsa,所以也不可能计算出如何到达1.1.1.1的路由来。

在这里,记忆方法可以为:

area 0 向外通告ip prefix-list的内容,prefix允许的我就通告,其他的全部被干掉在ABR上面。

下面可以看看R2应用了area 0 filter-list prefix maipu out以后,R3是一个什么情况:

clip_p_w_picpath038

本文出自 “hank--我,只关注原理” 博客,请务必保留此出处http://361531.blog.51cto.com/351531/698523