Route-policy 实验
一、 拓扑
拓扑中的路由器,左边运行着RIP,右边运行着OSPF。在R2上做重分布,将RIP路由引入OSPF,并进行控制
二、 在R2上做重分布,并且做route-policy
R2:
ospf 110 router-id 2.2.2.2
import-route rip 1 route-policy liuqingroute-policy为permit,ACL有permit也有deny
acl number 2001
rule 10 permit source 1.1.0.0 0.0.0.255
rule 20 permit source 1.1.1.0 0.0.0.255
rule 30 deny source 1.1.2.0 0.0.0.255
route-policy liuqing permit node 10
if-match acl 2001
结果: R3上只有1.1.0.0和1.1.1.0两条路由,被拒绝的1.1.2.0这条路由没有;
分析: 1.1.0.0和1.1.1.0这两条路由,在route-policy的节点10是permit,在ACL上也是permit,所以允许通过;1.1.2.0这条路由,在route-policy的节点10是permit,在ACL上是deny,所以在这个节点上被拒绝通过,但是会进入下一个节点再进行匹配;其他的路由没有找到合适的匹配项,进入下一个节点再匹配,如果最终没被匹配上,被拒绝通过
2. Route-policy为permit,ACL有permit也有deny
route-policy liuqing permit node 10
if-match acl 2001
route-policy liuqing permit node 20
if-match acl 2002
acl number 2001
rule 10 permit source 1.1.0.0 0.0.0.255
rule 20 permit source 1.1.1.0 0.0.0.255
rule 30 deny source 1.1.2.0 0.0.0.255
acl number 2002
rule 10 permit source 1.1.2.0 0.0.0.255
结果: 1.1.0.0 1.1.1.0 1.1.2.0这三条路由都被允许通过
分析: 对于节点10,上面已经分析过了,1.1.0.0和1.1.1.0被允许通过,1.1.2.0这条路由在节点10被拒绝通过,但会继续匹配下一个节点,1.1.2.0这条路由在route-policy的节点20被允许通过
3. Route-policy为deny,ACL为有permit也有deny
acl number 2001
rule 10 permit source 1.1.0.0 0.0.0.255
rule 20 permit source 1.1.1.0 0.0.0.255
rule 30 deny source 1.1.2.0 0.0.0.255
route-policy liuqing deny node 10
if-match acl 2001
#
route-policy liuqing permit node 20
结果: 只有1.1.0.0和1.1.1.0被拒绝通过,其他的路由都被允许
分析: route-policy的节点是deny,而ACL是permit的,对于这种路由被拒绝,并且匹配结束; 对于route-policy的节点是deny,ACL也是deny的,对于这种路由在本节点被拒绝,会到下一个节点进行匹配,由于节点20是空的,所以1.1.2.0会被允许通过;其他没有被ACL 2001匹配的路由会被空的节点20匹配,得以通过。
4. Route-policy为deny,ACL为DENY
route-policy liuqing deny node 10
if-match acl 2001
acl number 2001
rule 10 deny source 1.1.0.0 0.0.0.255
rule 20 deny source 1.1.1.0 0.0.0.255
rule 30 deny source 1.1.2.0 0.0.0.255
结果:所有被重分布的路由都不能通过
分析:由于route-policy为deny,ACL为deny,所以ACL中的这三条路由在route-policy的这个节点都被拒绝,并进入route-policy的下一个节点进行匹配,由于在这个案例中没有下一个节点,所以路由被拒绝。
5. Route-policy为deny,ACL为DENY和permit
acl number 2001
rule 10 deny source 1.1.0.0 0.0.0.255
rule 20 deny source 1.1.1.0 0.0.0.255
rule 30 deny source 1.1.2.0 0.0.0.255
acl number 2002
rule 10 permit source 1.1.2.0 0.0.0.255
route-policy liuqing deny node 10
if-match acl 2001
#
route-policy liuqing permit node 20
if-match acl 2002
结果: 只有1.1.2.0这条路由被通过
分析:对于route-policy的节点10,由于route-policy为deny,ACL也是deny,所以ACL中这三条路由在本节点被拒绝,并且继续进入下一个节点进行匹配;在节点20,route-policy的规则是permit,ACL的规则也是permit,所以ACL 2002中的这条路由1.1.2.0被允许通过;其他的路由没有被ACL匹配到,默认被拒绝了。
6. 对于一个route-policy的一个节点有多个if-match时
route-policy liuqing permit node 10
if-match cost 1
if-match acl 2002
acl number 2002
rule 10 permit source 1.1.2.0 0.0.0.255
结果:1.1.2.0这条路由被允许
分析:route-policy的节点为permit,acl的规则也是permit,被ACL匹配的这条路由会被通过;但在这个案例中,route-policy有两个条件,一个是匹配cost为1,一个是匹配ACL2002,这需要两个条件同时满足才能被route-policy放通。
华为设备对于route-policy和ACL/ip-prefix的解释
Rule | Mode | 匹配结果 |
permit | permit | l 匹配该节点if-match子句的路由在本节点允许通过Route-Policy,匹配结束。 l 不匹配if-match子句的路由进行Route-Policy下一个节点的匹配。 |
permit | deny | l 匹配该节点if-match子句的路由在本节点不允许通过Route-Policy,匹配结束。 l 不匹配if-match子句的路由进行Route-Policy下一个节点的匹配。 |
deny | permit | l 匹配该节点if-match子句的路由在本节点不允许通过Route-Policy,继续进行Route-Policy下一个节点的匹配。 l 不匹配if-match子句的路由进行Route-Policy下一个节点的匹配 |
deny | deny | l 匹配该节点if-match子句的路由在本节点不允许通过Route-Policy,继续进行Route-Policy下一个节点的匹配。 l 不匹配if-match子句的路由进行Route-Policy下一个节点的匹配 |
注1:Rule表示if-match子句中包含的匹配模式是permit还是deny。 注2:Mode表示Route-Policy中node节点对应的匹配模式permit还是deny。 |
总结:
1. 在使用route-policy过滤路由时,如果允许路由通过,则在route-policy中使用permit,ACL中也使用permit;
2. 在使用route-policy过滤路由时,如果要拒绝路由通过,则在route-policy中使用deny,ACL中使用permit;
3. 不管route-policy的节点是permit还是deny,只要ACL是DENY的,在route-policy的这个节点被ACL deny掉的这些路由是被拒绝的,但是会进入到route-policy的下一个节点去匹配。
4. 只要ACL是permit的,被ACL的permit规则匹配的路由,匹配结束,不会再进入到route-policy的下一个节点再进行匹配了。