在实际工程中经常用到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在命名时注意区分大小写,同时在使用时一定要和命名相同,不然就不会生效!
转载于:https://blog.51cto.com/hciewd/1156561