在日常使用route-MAP控制路由信息的时候,经常有人发现ACL条目,调用后无效,或者效果有差异
比如,下图【随便画一下,说明一下问题即可】
R1和R2允许OSPF,R1的LOOPBACK接口网段,是重分发进入OSPF的
R1:
router ospf 1
network 12.1.1.0 0.0.0.255 area 0
access-list 1 permit 1.1.1.0 0.0.0.255
route-map xxx per 10
match ip address 1
router ospf 1
redis connected subnets route-map xxx
R2:
router ospf 1
network 12.1.1.0 0.0.0.255 area 0
这里的本意是想实现,仅重分发1.1.1.0的路由条目到OSPF,最后发现实现了,但是,到底是ACL的默认deny实现的,还是route-map的默认deny实现的呢?【这个很重要,但是很多人忽略了,所以会带来很多问题】
再来看一个现象:拓扑和OSPF配置不变,仅修改以下配置
R1:
access-list 1 deny 1.1.1.0 0.0.0.255
access-list 1 permit 2.2.2.0 0.0.0.255
route-map xxx per 10
match ip address 1
route-map xxx per 20
router ospf 1
redis connected subnets route-map xxx
实验结果表明,R2会学到所有的路由,包括ACL中明确指明的deny 1.1.1.0 0.0.0.255
原因:
在路由映射表中调用ACL,ACL的deny子句不起过滤作用,除非deny和permit any一起使用,才能使deny起作用。
为什么会有这样的定义,欢迎大家讨论。命令是直接手打的,如果单词有误【不习惯写全命令】,请指正。