前缀列表 · filter-policy · route-policy · 双点双向引入 · Tag 防环 · 路由偏好操纵 —— 把多个路由域"缝合"在一起,并保证缝合处不出血。
ACL 管流量、前缀列表管路由、route-policy 管一切
| 维度 | ACL | IP 前缀列表 |
|---|---|---|
| 设计初衷 | 匹配报文流(五元组) | 匹配路由前缀 |
| 掩码处理 | 通配符(0=严格 1=任意),不能表达"掩码长度" | 同时匹配网络号+掩码长度(ge/le 精确范围) |
| 匹配路由时 | 只看目的网络号(不校验掩码)→ 易误伤 | 天生精确 |
| 规则逻辑 | 顺序匹配,默认 permit 其余 | 顺序匹配,末尾隐含 deny |
| 结论 | 可匹配路由但强烈不推荐 | 路由场景首选 |
# 前缀列表:掩码 24~28 之间的 10.1.0.0/16 子网 ip ip-prefix P1 index 10 permit 10.1.0.0 16 greater-equal 24 less-equal 28 # 精确一条默认路由 ip ip-prefix DEF index 10 permit 0.0.0.0 0 # 全部允许(常做"兜底") ip ip-prefix ALL index 10 permit 0.0.0.0 0 less-equal 32
rule permit source 10.1.1.0 0.0.0.255 —— 结果 10.1.1.0/25、/26…全被匹配上!因为 ACL 无掩码长度概念。路由匹配永远优先用前缀列表。# OSPF:控制"计算"(入=过滤生成路由) ospf 1 filter-policy ip-prefix P1 import # 进路由表前滤 filter-policy ip-prefix P2 export # 仅5类ASE出方向 # IS-IS 同款 isis 1 filter-policy ip-prefix P1 import # RIP/BGP bgp 65001 ipv4-family unicast peer 2.2.2.2 filter-policy P1 import # 邻居粒度
# 结构:节点序号升序匹配,节点内 if-match 与/或 ip ip-prefix P-DC permit 10.1.0.0 16 greater-equal 24 route-policy RP-IMPORT permit node 10 if-match ip-prefix P-DC apply preference 50 apply cost 100 apply tag 100 route-policy RP-IMPORT permit node 20 # 兜底放行 # 应用:BGP引入 / 邻居出入向 bgp 65001 ipv4-family unicast import-route ospf 1 route-policy RP-IMPORT peer 2.2.2.2 route-policy RP-IMPORT import
| apply | 作用域 |
|---|---|
| cost / cost-type | OSPF/IS-IS 开销 |
| preference | 协议优先级 |
| tag | 路由标记(防环关键) |
| local-preference / cost(MED) | BGP |
| community / as-path | BGP |
| ip-address next-hop | 改下一跳 |
| 场景 | 用谁 | 理由 |
|---|---|---|
| IGP 里按前缀放行/拒绝计算 | filter-policy | 简单、开销小 |
| import-route 时"选择性引入+改属性" | route-policy | filter 管不了 apply |
| BGP 邻居粒度收发控制 | route-policy(或 peer filter-policy 纯过滤) | 改 LP/MED/团体必须 route-policy |
| 只做前缀级通过/拒绝 | 前缀列表 + filter-policy | 语义最清晰 |
匹配路由 → 前缀列表;只过滤 → filter-policy;边滤边改 → route-policy;匹配报文 → ACL。
route-policy 节点里 if-match 可叠 ACL + 前缀列表 + tag + 路由类型(if-match route-type external 等,多条件为"与")。
display route-policy P1(看 matched counts 命中次数)reset route-policy P1 counters(清零重算)
BGP: display bgp routing-table peer x received-routes
import-route 的正确姿势 + preference 的隐藏坑
# 引入静态到 OSPF ospf 1 import-route static cost 50 type 1 tag 10 # OSPF ↔ IS-IS 互引 isis 1 import-route ospf 1 inherit-cost ospf 1 import-route isis 1 # 只引必要前缀 ospf 1 import-route direct route-policy ONLY-LOOPBACK
B 去往 OSPF 明细有两条路:① 走 IS-IS 域内到引入点② 再进 OSPF;② 直接从引入点①学到的"OSPF 明细被引入 IS-IS 后变成的外部路由(优先级 160)"。口决:外部路由永远劣于本地域内路由,于是 B 舍近求远,绕到引入点②再折返——流量走了非预期路径。
A 把 OSPF 路由灌进 IS-IS → B 在 IS-IS 学到 → B 又把它当"IS-IS 路由"引回 OSPF(缺 tag 标记时 B 分不清这是"回锅肉")→ 环。IGP 间没有 AS_PATH 那样的免疫机制。
# 思路:本域路由出去时打上"本域标记",回流时见到自己的标记就拒收 # 【方向一】OSPF → IS-IS:只引 OSPF 原生路由(无 tag),打 tag 10 route-policy OSPF2ISIS deny node 10 if-match tag 10 # 从 OSPF 回流的(带自己标记)拒绝 route-policy OSPF2ISIS permit node 20 apply tag 10 # 其余放行并打 tag 10 # 【方向二】IS-IS → OSPF:拒收带 tag 10 的,其余打 tag 20 route-policy ISIS2OSPF deny node 10 if-match tag 10 route-policy ISIS2OSPF permit node 20 apply tag 20 # 挂载 ospf 1 import-route isis 1 route-policy ISIS2OSPF isis 1 import-route ospf 1 route-policy OSPF2ISIS # 效果:OSPF 路由进 IS-IS 带 tag10;若它又被 IS-IS 引回 OSPF, # OSPF 侧见 tag10 直接拒收 —— 环路被切断
两域互相引入无标记 → TTL 递减报错/tracert 打转。处置:tag + 互斥引入(上文)。
引入路由优先级劣化,本该走 IGP 短路却绕引入点。处置:preference 拉平 / 精确引入 / 只留单点。
import-route 不带策略引入整表(如 10 万条 BGP → IGP)。处置:route-policy 白名单,永远只引"必要前缀"。
改表(路由层面)vs 改流(转发层面)
| 手段 | 作用对象 | 典型命令 | 适用 |
|---|---|---|---|
| preference | 同前缀不同协议 | route-policy apply preference / preference 命令 | 引入后恢复直觉优先级 |
| cost | 同协议内 | 接口 cost / apply cost | IGP 内部精确牵引 |
| tag | 标记分组 | apply tag / if-match tag | 引入防环、策略联动 |
| 属性族 | BGP | apply local-preference / cost / community / as-path | 域间牵引(第 4 章) |
# 按源地址把流量定向到下一跳
acl 3000
rule permit ip source 10.1.10.0 0.0.0.255
traffic classifier C1
if-match acl 3000
traffic behavior B1
redirect ip-nexthop 20.1.1.2
traffic policy P1
classifier C1 behavior B1
interface GigabitEthernet0/0/1
traffic-policy P1 inbound
| 路由表 | PBR | |
|---|---|---|
| 依据 | 目的前缀 | ACL 五元组/源 |
| 层次 | 网络层选路 | 转发策略(入接口) |
| 优先级 | 基准 | 高于路由表 |
| 失效行为 | — | 默认回退路由表(不丢弃) |
| 联动 | — | 配 track 才有感知切换 |
执行 redirect ip-nexthop 时,若下一跳在该出接口没有 ARP 表项,设备会触发 ARP 学习;学不到 ARP 就按原始转发路径转发(回退查路由表)——并不会自动丢弃,也不会自动切换。很多"配了 PBR 却不生效 / 流量依旧走老路"的现场问题,根因就在这里。
| 写法 | 下一跳不可达时 | 适用 |
|---|---|---|
仅 redirect ip-nexthop A | 回退查路由表(默认) | 只做分流,不强求绕行 |
... A track nqa X + 备用 | track 失效则用下一条 redirect | 双出口主备切换 |
... A discard | 直接丢弃,不查表 | 强制引流到安全设备 |
# ① 建 NQA 探测(探测 20.1.1.2 通不通)
nqa test-instance admin toISP
test-type icmp
destination-address ipv4 20.1.1.2
frequency 10
start now
# ② track 关联 NQA → ③ 绑定到 redirect track nqa admin toISP traffic behavior B1 redirect ip-nexthop 20.1.1.2 track nqa admin toISP redirect ip-nexthop 30.1.1.2 # 不可达直接丢:... discard
| 考点 | 必背细节 | 频度 |
|---|---|---|
| ACL vs 前缀列表 | ACL 五元组+通配符(0 匹配 / 1 忽略),数据面路由面两用;ip ip-prefix 专管路由,支持 greater-equal / less-equal 掩码区间;两者默认动作都是 permit | ★★★★ |
| filter-policy 语义 | OSPF/IS-IS 入向:只拦"进路由表",LSDB 照常同步(区别于距离矢量真不收);出向:限制 LSA 生成(export 要在 ABR/ASBR 上才有效) | ★★★★★ |
| route-policy 规则 | node + if-match / apply;未命中任何节点隐含 deny;引用了不存在的 route-policy = permit all | ★★★★★ |
| 引入规则 | 只引入路由表中 active 的路由;OSPF 引入默认 Type-2、cost 1、tag 1;直连/静态必须显式 import-route;BGP 引入需在地址族下 | ★★★★ |
| 协议优先级 | 直连 0 / OSPF 10 / IS-IS 15 / 静态 60 / RIP 100 / OSPF ASE·NSSA 150 / BGP 255 —— 双点双向次优的根源 | ★★★★★ |
| 双点双向两病 | 次优(150 vs 10 优先级碾压)+ 环路(回灌路由重新注入);药方:Tag + route-policy 拒收本域路由 + 两点 preference 对齐 | ★★★★★ |
| PBR 要点 | 不改路由表改转发;接口下 policy-based-route(入方向);apply next-hop 不可达时默认回退查路由表,不是丢弃;全局 PBR 优先于普通转发 | ★★★★ |
| 四把螺丝刀 | preference(本机生效)、route-policy 改属性/过滤、filter-policy 过滤、import-route 可控引入 —— LAB 选路控制万能组合 | ★★★ |
10.1.1.0 24 greater-equal 24 less-equal 32 ≠ 精确匹配 /24,是"≥24 位"区间;② route-policy 每个 node 要写 permit/deny,默认 permit 节点也要显式;③ import-route 不引默认路由——默认路由要靠 default-route-advertise。display ip ip-prefix、display route-policy、display current-configuration | include policy —— 配置改完必做"两端对称"检查。| 验证点 | 预期 |
|---|---|
| tracert R6→10.1.1.1 | 无打转,路径符合设计 |
| display ip routing-table 10.1.1.0 proto | 来源协议正确(次优已修) |
| display route-policy | 命中计数合理(无"全量"误引入) |
| 拔掉 PBR 下一跳 | 流量回退查表不中断 |