关于 route-map 和 ACL 组合

网络工程 思科 acl 路线地图
2022-02-27 11:47:13

考虑以下:

场景 1(路由映射 PERMIT 和 ACL 许可):

router(config)#route-map boston permit 1
router(config-route-map)#match ip address 5
router(config-route-map)#set community 120
router(config)#access-list 5 permit 10.5.1.121 0.0.0.255

场景 2(路由映射 PERMIT 和 ACL 拒绝):

router(config)#route-map boston permit 1
router(config-route-map)#match ip address 5
router(config-route-map)#set community 120
router(config)#access-list 5 deny 10.5.1.121 0.0.0.255

场景 3(路由映射 DENY 和 ACL 许可):

router(config)#route-map boston deny 1
router(config-route-map)#match ip address 5
router(config-route-map)#set community 120
router(config)#access-list 5 permit 10.5.1.121 0.0.0.255

场景 4(路由映射 DENY 和 ACL DENY):

router(config)#route-map boston deny 1
router(config-route-map)#match ip address 5
router(config-route-map)#set community 120
router(config)#access-list 5 deny 10.5.1.121 0.0.0.255

问:这四种情况有什么区别?请澄清。为了便于理解,我们可以构建某种真值表吗?

下面的真值表可以通用吗?

Route-map(permit), ACL(permit)---->DO THE TASK

Route-map(permit), ACL(deny)---->DON'T DO THE TASK

Route-map(deny), ACL(permit)---->DON'T DO THE TASK

Route-map(deny), ACL(deny)---->DON'T DO THE TASK

3个回答
  • 场景 1:将 10.5.1.0/24 的社区设置为 120
  • 场景 2:不会将任何路由的社区设置为 120
  • 场景 3:不会将任何路由的社区设置为 120
  • 场景 4:不会将任何路由的社区设置为 120

route-map 语句中有一个隐式拒绝。因此,如果场景 2 中的 permit 1 的 match 子句由于 ACL 中的拒绝语句而不匹配,则其余网络也不会匹配。

考虑这个额外的场景:

router(config)#route-map boston permit 10
router(config-route-map)#match ip address 5
router(config-route-map)#set community 120
router(config)#access-list 5 deny 10.5.1.121 0.0.0.255
router(config)#route-map boston permit 20

在这种情况下,您会说为任何不是 10.5.1.0/24 的路由设置社区为 120。

思科有这方面的文档。考虑与再分配的交互可能更简单。以下示例来自Defining Route Maps和Route-Maps for IP Routing Protocol Redistribution Configuration中的相同示例

允许和拒绝条款

Route-maps 可以有permitdeny子句。在路由映射 ospf-to-eigrp中,有一个拒绝子句(序号为 10)和两个允许子句。拒绝子句拒绝重新分配的路由匹配。因此,这些规则适用:

  • 如果在路由映射 permit 子句中使用 ACL,则会重新分发 ACL 允许的路由。
  • 如果在路由映射拒绝子句中使用 ACL,则不会重新分发 ACL 允许的路由。
  • 如果在路由映射 permit 或 deny 子句中使用 ACL,而 ACL 拒绝路由,则找不到路由映射子句匹配,并评估下一个路由映射子句。

这似乎与AND高中的布尔逻辑表一致:

True  AND True  = True
True  AND False = False
False AND True  = False
False AND False = False

让我改进两个答复。

在前面的例子中:

router(config)#route-map boston permit 10
router(config-route-map)#match ip address 5
router(config-route-map)#set community 120
router(config)#access-list 5 deny 10.5.1.121 0.0.0.255
router(config)#route-map boston permit 20

波士顿路线图除了允许一切之外什么都不做,因为:seq。10 不匹配,seq 20 不包含任何集合子句。

该组合不仅仅是一个 AND 操作,就好像 ACL 被拒绝一样,路由映射的评估继续进行,如果允许它在找到匹配项时停止。