首页 » 信息技术 »

RouteMap规则深入研究

2010年1月11日 / 147次阅读
TCPIP

以下测试都是在cisco路由器上进行的。

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这两条路由进行了重分配,只有一个解释,那就是ACL 1对这两条路由给出的deny(ACL 1的隐藏规则)并不是影响最终了重分配动作!ACL 1虽然deny了这两条路由,但是在RouteMap test 20里面,将match everything(RouteMap下如果没有配置任何match命令,则表示match everything)。

单步结论: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。)

 

 

[2009-9-25]

重读之后,再总结一下,ACL中的permit和deny表示匹配成功或者失败,然后将这个信息传递给routemap,表示routemap的match条目的匹配成功或者失败。

本文链接:https://www.maixj.net/ict/routemap-5537

相关文章

留言区


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top