首页/网络/BGP 与广域网速查/match 的与/或语义
路由过滤与重分发66 条

match 的与/或语义

条件组合:同一条目内多条 match 为与关系;单条 match 内列出多个对象(多个前缀列表、多个社区列表)为或关系。组合方式决定过滤精度。

BGP 与广域网速查网络更新于 2026-10-13

match 的与或语义

route-map 的条件组合规则只有两条,但记反了就会写出与意图相反的策略:同一条目内的多条 match 语句是「与」关系,必须全部命中;同一条 match 语句里列出多个对象(多个前缀列表、多个社区列表)是「或」关系,命中任一即可。此外,同一条目内重复输入同一类 match,后输入的会覆盖前一条,需要或关系时应把对象写在同一行。

基本信息

与关系同一 sequence 内的多条 match,全部满足才执行 set
或关系单条 match 里列多个对象,命中任一即算匹配
覆盖行为同一 sequence 重复输入同类 match,新语句替换旧语句
未命中处理继续向下扫描下一个 sequence,末尾有隐式 deny
deny 语义命中且 permit/deny 为 deny 时丢弃该路由,不再看后续条目

典型使用场景

  • 客户且带特定社区才提优先级:前缀范围与社区标签做「与」,避免误放别人
  • 多个来源清单统一加标签:把多张前缀列表写在同一行做「或」,减少条目数
  • 排查策略误伤:核对 match 的与或结构,确认是条件写宽还是写窄
  • 策略评审:把每条 sequence 的与或结构画成伪代码,便于他人复核
  • 从 route-map 迁移到 route-policy:语义从序列扫描改为条件语句,需逐条对照改写

与关系与或关系示例

与关系与或关系示例
# 与关系:既要在 PL-A/PL-B 范围内,又要带 CL-CUST 社区
route-map RM-BOTH permit 10
 match ip address prefix-list PL-A PL-B
 match community CL-CUST
 set local-preference 160
# 或关系:命中 PL-A 或 PL-B 任一即可
route-map RM-OR permit 10
 match ip address prefix-list PL-A PL-B
# 华为 VRP route-policy 中的等价表达
route-policy RP-BOTH permit node 10
 if ip-prefix PL-A or ip-prefix PL-B then apply local-preference 160

常见写法与结果

写法实际语义风险
一条 match 列多个对象或以为在做交集,实际条件被放宽
多条 match 语句与条件过严时整条策略不生效,业务悄悄走默认路径
同类 match 重复输入后者覆盖前者前半段条件被静默丢弃,排查时读配置易误判
条件拆到多个 sequence各自独立分支得不到交集效果,等于或
核对策略时不要只读单条命令,要按 sequence 逐段读出「与/或」结构;把条件写成伪代码或表格,是团队评审中最省钱的一步。

易错点

  • 用一条 match 实现与关系:多对象是或,条件被放大,可能误放不该放的前缀
  • 用多条条目实现与关系:条目之间是独立分支,得不到交集
  • 重复输入同类 match 导致覆盖:旧条件静默失效,只看配置文本难以察觉
  • 忘记录末尾隐式 deny:未显式 permit 的路由被整体丢弃,表现为部分网段不通

数据来源与参考

  • Cisco: route-map match 语义
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌