在实际工程中经常用到route-policy的情况,下面对route-policy和ACL的详细匹配规则

 

route-policy 有permit 和deny两种 情况  ,ACL的rule 也有permit 和deny两种 情况,

最常见的就是用 route-policy 的permit +ACL deny 和route-policy 的permit +ACL permit

其他组合没有必要用,比如route-policy deny + acl deny 产生了双重DENY 变成 permit的效果。

 

1、 route-policy 的permit +ACL deny 过滤路由

请看如下配置:

  route-polyc X permit node 10

if-match acl 2001

 

acl nuber 2001 

rule 0 deny source 172.16.11.0 0.0.0.255

 

rip 1

import-route ospf 1 route-policy x

上面就是RIP引入OSPF时的配置,这里出现了一个问题,在用了策略后发现全部路由都不见了,

为什么呢?

凡是明确和ACL 的deny 规则匹配的则不执行node 10中的apply规则。并且会继续执行下一个node 20 进行匹配,下一个node并没有,所以172.16.11.0网段不能够引入,但是其他网段呢?其他网段不能被ACL通过,所以其他网段也全部没有引入,解决方法是:在acl number 2000下加一条rule 5 permit .

 有人提出再加一条permit node 20的空结点,这样加后的结果是一条路由都没有过滤到,全部都放行了。

 

2、route-policy 的permit +ACL permit更改路由属性

acl number 3000
rule 0 permit ip source 192.168.1.0 0 destination 255.255.255.0 0 

附:此类ACL比较特殊,源和目的的掩码均要为0 。用于route-policy 是要做严格的匹配,即前缀要和source 匹配,前缀的掩码部分要和destination匹配。 对于上述配置3000来说,则只有192.168.1.0/24可与之匹配。此类列表和Route-policy配合可用于严格的匹配。

route-policy P1 permit node 10
if-match acl 3000
apply local-preference 1300               
 

bgp 65001

peer 1.1.1.1 route-policy P1 export

 

配置完成后,发现对端只学到了192.168.1.0的路由,但是其他风段的路由全都不见了,为什么呢?

请看如下理论:
对于route-policy的permit规则来说,凡是能够匹配ACL permit规则的条目就执行node 10中的apply 规则,并不再继续匹配下面的规则。不能够匹配ACL permit规则的条目,就继续执行下一个 node 20中的相应规则。
  哦,原来是不能匹配的都要去下一个node,但是又没有下一个node,所以不能发布出去路由。

解决办法:加一条命令route-policy P1 permit node 20 

3、route-policy在命名时注意区分大小写,同时在使用时一定要和命名相同,不然就不会生效!