全部博文(1015)
分类:
2010-07-29 16:43:42
A –--- B 两台路由器通过E1/1接口直联,运行OSPF。 A路由器配置3条静态路由: ip route 7.0.0.0 255.0.0.0 Ethernet1/1 ip route 8.0.0.0 255.0.0.0 Ethernet1/1 ip route 9.0.0.0 255.0.0.0 Ethernet1/1 A路由器ospf的配置如下: router ospf 1 log-adjacency-changes redistribute static route-map test network 0.0.0.0 255.255.255.255 area 1 1) 在A路由器上,不配置任何ACL,只配置RouteMap,配置如下: route-map test permit 10 match ip address 1 此时ACL 1是一张空表。 配置完成之后过几秒钟,在B路由器上查看OSPF的路由表,如下: Link ID ADV Router Age Seq# Checksum Tag 7.0.0.0 192.168.1.1 52 0x80000001 0x0073BA 0 8.0.0.0 192.168.1.1 1207 0x80000001 0x0066C6 0 9.0.0.0 192.168.1.1 1207 0x80000001 0x0059D2 0 A路由器上的三条静态路由都成功的重分配进OSPF,并传给了B路由器。 单步总结:当RouteMap引用的ACL是一张空表时,对应的规则是permit any。 2) 在A上配置ACL 1,只有一个permit规则,此时ACL和RouteMap的配置如下: access-list 1 permit 7.0.0.0 0.255.255.255 ! route-map test permit 10 match ip address 1 此时,在B路由器上,就只能看到7.0.0.0这条路由,如下: Link ID ADV Router Age Seq# Checksum Tag 7.0.0.0 192.168.1.1 140 0x80000001 0x0073BA 0 A路由器只重分配了7.0.0.0这条路有进OSPF,另外两条就被过滤掉了。 单步总结:当RouteMap引用的ACL是非空表时,ACL规则开始生效,如上例子,ACL 1允许(permit)了7.0.0.0这条路由,并且deny掉了其它的路由(每条ACL最后都有一个隐藏的deny any)。 3) 在A路由器上,修改ACL的配置,RouteMap配置不变,如下: access-list 1 deny 7.0.0.0 0.255.255.255 ! route-map test permit 10 match ip address 1 上一步的ACL 1是permit 7.0.0.0这条路由,这一步仅仅是将permit修改成deny。 配置完成过一会儿,查看B路由器OSPF的路由表,A路由器上的三条静态路由,B路由器一条都没有。 单步总结:这一步得到的结论跟第2步的结论一样,ACL 1显示的deny掉了7.0.0.0这条路由,然后用隐藏规则deny掉了其它两条路由。 4) 为了充分测试,搞清楚每一个细节,我们再将ACL的配置做一点修改,RouteMap的配置暂时保持不变,A路由器的配置如下: access-list 1 deny 7.0.0.0 0.255.255.255 access-list 1 permit any ! route-map test permit 10 match ip address 1 ACL 1 的配置增加了一条permit any。 过一会儿查看B路由器OSPF的路由表,如下: Link ID ADV Router Age Seq# Checksum Tag 8.0.0.0 192.168.1.1 12 0x80000001 0x0066C6 0 9.0.0.0 192.168.1.1 12 0x80000001 0x0059D2 0 可以看到8.0.0.0 9.0.0.0这两条路有豆成功的进行了重分配。 单步总结:ACL 1由于配置了permit any,这条规则在隐藏规则之前生效,因此8.0.0.0 9.0.0.0这两条路由成功匹配并重分配。 5) 测试到这里,可能大家会觉得这个规则已经很清楚了,其实不然阿!到目前为止,RouteMap的配置一直没有变化,下面,我们慢慢地将RouteMap的配置进行修改,进行进一步的分析。 在上一步的基础上,我们修改一下配置,A路由器的配置如下: access-list 1 permit 7.0.0.0 0.255.255.255 ! route-map test deny 10 match ip address 1 ACL 1仅仅允许7.0.0.0 这条路由,不过,此时RouteMap test 10已经变成了deny。读到这里,大家可以先自己想想会是一个什么样的结果。 此时B路由器上OSPF路由表为空! 单步结论:虽然ACL 1允许了一条路由,但是RouteMap的deny的优先级更高(或者可以理解为RouteMap的这个deny在后面执行),因此B路由器上没有看到任何一个静态路由。 6) 我们继续修改RouteMap的配置,此时我们增加一条RouteMap的配置,A路由器的配置如下: access-list 1 permit 7.0.0.0 0.255.255.255 ! route-map test deny 10 match ip address 1 ! route-map test permit 20 在上一步的基础上,增加名称为test,序列号为20的RouteMap,这条RouteMap配置下什么都没有。 此时查看B路由器上OSPF的路由表,如下: Link ID ADV Router Age Seq# Checksum Tag 8.0.0.0 192.168.1.1 9 0x80000001 0x0066C6 0 9.0.0.0 192.168.1.1 9 0x80000001 0x0059D2 0 可以看出,8.0.0.0 9.0.0.0这两条路由成功进行了重分配。 ACL 1只允许了7.0.0.0这条路由,由于RouteMap test 10 的deny动作,7.0.0.0这条路由没有进行重分配。现在8.0.0.0 9.0.0.0这两条路由进行了重分配,只有一个解释,那就是ACL1对这两条路由给出的deny(ACL 1的隐藏规则)并不是影响最终了重分配动作!ACL 1虽然deny了这两条路由,但是在RouteMaptest 20里面,将match everything(RouteMap下如果没有配置任何match命令,则表示matcheverything)。 单步结论:ACL给出的deny不会影响最终的重分配动作,RouteMap如果后续还有配置,则将ACL deny的路由继续向下传递并重新进行匹配。 7) 再A路由器上,进一步修改配置,如下: access-list 1 deny 7.0.0.0 0.255.255.255 ! route-map test deny 10 match ip address 1 ! route-map test permit 20 我们把ACL 1修改为deny动作,RouteMap的配置保持跟第6步一致。 配置完成之后查看B路由器的OSPF路由表,如下: Link ID ADV Router Age Seq# Checksum Tag 7.0.0.0 192.168.1.1 1 0x80000001 0x0073BA 0 8.0.0.0 192.168.1.1 1 0x80000001 0x0066C6 0 9.0.0.0 192.168.1.1 1 0x80000001 0x0059D2 0 A路由器上的三条路由都成功进行了重分配。 第6步,我们得出一个结论,ACL给出的deny并不影响最终重分配动作,那么在这一步测试进行分析,ACL是deny,RouteMap也是deny,但是所有的静态路由都成功进行了重分配,因此,可以说明,ACL的deny就可以简单的理解为匹配失败。(将这一步的ACL配置修改成access-list 1 deny any,B路由器上的结果还是一样。有兴趣的读者可以自己进行测试。) 单步结论:ACL给出的deny就是匹配失败,这时,RouteMap的动作并不重要,因此RouteMap的动作只有在匹配成功的时候才生效,ACL deny之后,将进入下一条RouteMap继续进行匹配。 8) 最后,综合测试一下,A路由器的配置如下: access-list 1 permit 7.0.0.0 0.255.255.255 access-list 2 permit 8.0.0.0 0.255.255.255 access-list 3 deny 9.0.0.0 0.255.255.255 ! route-map test deny 10 match ip address 1 ! route-map test permit 20 match ip address 2 ! route-map test permit 30 match ip address 3 配置完成之后,查看B路由器上的OSPF路由表,如下: Link ID ADV Router Age Seq# Checksum Tag 8.0.0.0 192.168.1.1 51 0x80000001 0x0066C6 0 前面7步得到的测试结论可以很好的解释这一步的测试结果。 最终结论: 1,当RouteMap引用的ACL是一张空表时,表示permit any; 2,当RouteMap引用的ACL不是一张空表时,ACL的隐藏规则是要发挥作用的; 3,ACL中的比较给出的permit表示匹配成功,然后执行相应RouteMap的动作; 4,ACL中的比较给出的deny表示匹配失败,不执行相应RouteMap的动作,但这并不是RouteMap的最终结果,后面还要根据RouteMap自身的规则进行。(即如果RouteMap后续还有序列号大的配置项,继续进入后面的RouteMap配置进行比较;如果后面没有任何RouteMap的配置了,则执行RouteMap的隐藏动作deny everything。) 也许可以这样理解: 绑定一张空表等于没有绑定。 |