ACL与route-policy中permit/deny的关系

一、回顾路由策略原理


ACL与route-policy中permit/deny的关系

一个路由策略中包含1个至多个节点。路由进入路由策略后,按节点序号从小到大依次检查各个节点是否匹配。匹配条件由If-match子句定义,涉及路由信息的属性和路由策略的6种过滤器。

当路由与该节点的所有If-match子句都匹配成功后,进入匹配模式选择,不再匹配其他节点。匹配模式分permitdeny两种:

· permit:路由将被允许通过,并且执行该节点的Apply子句对路由信息的一些属性进行设置。

· deny:路由将被拒绝通过。

当路由与该节点的任意一个If-match子句匹配失败后,进入下一节点。如果和所有节点都匹配失败,路由信息将被拒绝通过。

——引用华为文档


二、实验分析


ACL与route-policy中permit/deny的关系

R3和R4运行在OSPF骨干区域中,且R4上的回环口以重发步的方式导入OSPF域中。根据这个环境,我们来看看策略路由的permit/deny与ACL的permit/deny关系。

[R4]ospf 1

[R4-ospf-1]import-route direct route-policy gok //重发布时,调用策略gok


情况一:不设置ACL,Route-policy设置permit模式并调用。

[R4]route-policy gok permit node 10

[R4-route-policy]if-match acl 2000

现象:

ACL与route-policy中permit/deny的关系

总结:不创建ACL以及相关规则,此时的ACL表为一张空白表。当实现route-policy时,会调用ACL表。实验现象表明可以学到这三条条目,因ACL表为空表,所以可以确定在缺省情况下默认允许所有。


情况二,在R4上设置一条ACL permit规则,route-policy设置permit并再调用。

[R4]acl 2000

[R4-acl-basic-2000]rule permit source 192.168.1.0 0.0.0.255

[R4]route-policy gok permit node 10

[R4-route-policy]if-match acl 2000

查看现象

ACL与route-policy中permit/deny的关系

总结:当R4上设置了ACL一条关于192.168.1.0 路由信息permit的规则,并通过route-policy调用,查看现象发现R3上只留下了192.168.1.0这个网段的路由信息。这是因为R4在重发布之前会对192.168.1.0、192.168.2.0、192.168.3.0进行规则匹配,对于为匹配中的不做任何处理,对于配置中的路由信息根据设定的acl permit进行下一步的重发布。192.168.2.0和192.168.3.0之所以没有配置中是因为在第一个node没有匹配中后,会往下继续查看下一个node,直到最后一个node,而route-policy在匹配末尾缺省一条deny ,会把192.168.2.0和192.168.3.0给拒绝掉,从而不能正常重发步在OSPF域中。


情况三:在R4上设置一条ACL deny规则,并route-policy设置permit。

[R4]acl 2000

[R4-acl-basic-2000]rule 5 deny source 192.168.1.0 0.0.0.255

[R4]route-policy gok permit node 10

[R4-route-policy]if-match acl 2000

现象

ACL与route-policy中permit/deny的关系

总结:此时设置一条对192.168.1.0 路由信息deny的规则,并通过route-policy调用,在R3上查看路由表发现都没有学习到条目。之所如此,是因为R4在重发步之前会对设置的ACL进行规则匹配,而192.168.1.0在匹配过程中在node 5 中被拒绝,对于192.168.2.0和192.168.3.0没有匹配到而不做处理,此时,会将这三条路由信息进行下一节点的匹配。因为route-policy在末尾缺省一条deny,所以这三条都不能被重发步到OSPF域中。

以上都是关于route-policy节点permit与ACL中permit/deny的关系探讨,相对简单。


情况五:在R4上设置一个ACL permit的规则,并配置route-policy 且将节点设置成deny,最后重发步调用route-policy。

[R4]acl 2000

[R4-acl-basic-2000]rule 5 permit source 192.168.1.0 0.0.0.255

[R4]route-policy gok deny node 10

[R4-route-policy]if-match acl 2000

查看现象

ACL与route-policy中permit/deny的关系

总结:此时将route-policy节点设置成deny,三条进行acl匹配,发现只有192.168.1.0匹配中,另外两个没有匹配中不做处理。这时192.168.1.0会继续向下一个节点匹配,发现是deny,而被拦截,不在继续向下匹配。而192.168.2.0和192.168.3.0能够继续下去,直到最后,而最后route-policy是缺省拒绝,所以这三条都无法正常重发步到OSPF域中。

情况六:

在R4上设置一个ACL permit的规则,并配置route-policy 且将节点设置成deny,再设置一个节点为permit,最后重发布调用route-policy。

[R4]acl 2000

[R4-acl-basic-2000]rule 5 permit source 192.168.1.0 0.0.0.255

[R4]route-policy gok deny node 10

[R4-route-policy]if-match acl 2000

[R4]route-policy gok permit node 20

现象

ACL与route-policy中permit/deny的关系

总结:此时将route-policy节点设置成deny并多添加一个节点为permit,三条进行acl匹配,发现只有192.168.1.0匹配中,另外两个没有匹配中不做处理。这时192.168.1.0会继续向下一个节点匹配,发现是deny,而被拦截,不在继续向下匹配。而192.168.2.0和192.168.3.0能够继续匹配下一个节点note 20 虽然是空的,该空节点表示为匹配所有,不做任何动作。192.168.2.0和192.168.3.0被note匹配中,而该节点为permit,从而能够正常重发步进OSPF域中。

情况七:在R4上设置一个ACL deny的规则,并配置route-policy 且将节点设置成deny,再设置一个节点为permit,最后重发布调用route-policy。

[R4]acl 2000

[R4-acl-basic-2000]rule 5 deny source 192.168.1.0 0.0.0.255

[R4]route-policy gok deny node 10

[R4-route-policy]if-match acl 2000

[R4]route-policy gok permit node 20

查看现象

ACL与route-policy中permit/deny的关系

总结:首先在R4上对ACL 设置deny ,R4上会将这三条进行匹配,从而拒绝192.168.1.0信息,其他两条不做任何处理。虽然192.168.1.0先被ACL 拒绝了,但发现该节点也是deny,192.168.1.0在该节点不允许通过Route Policy,但是会进行下一个节点的匹配。这时候三条路由信息均可继续向下匹配节点note 20,而note 20 是一个空表匹配所有,且为permit。所以在note 20 中允许了这三条路由信息进行重发步进OSPF域中。

扩展:

①:在route-policy的deny和ACL的deny中,route-policy的deny优先级高,当匹配中route-policy的deny后将不能继续向下匹配。若匹配中acl的deny后,而route-policy为permit的情况下依旧可以继续向下匹配。

②:对于route-policy是deny,且acl 也是deny情况下,可以理解为双重否定为肯定。

总结:

当route-policy调用ACL不是一张空白时,这时候ACL里面的规则就会生效。

ACL与route-policy中permit/deny的关系


分享到:


相關文章: