单点重分发(一台设备做引入)没什么难度。但只要变成双点 + 双向,问题立刻就来——这是路由方向最经典的坑,也是 HCIE 考试必考的一题。
为什么会出问题
关键在路由的来源失去了标记。一条 OSPF 内部路由被 R2 引入 IS-IS 后,在 IS-IS 里它就是一条普通的 IS-IS 路由——R1 看不出它「原本是 OSPF 的」。所以 R1 会毫不犹豫地把它再引回 OSPF。
由此产生两个问题:
| 问题 | 表现 |
|---|---|
| 环路 | 两台设备互相把对方引入的路由再引回去,路由在两个协议间反复翻转 |
| 次优路径 | 外部路由(OSPF Type-5)的优先级低于内部路由,导致流量绕远 |
解法:给路由「盖章」
思路很朴素:引入的时候盖个章(tag),再引入的时候看见这个章就不引。
R1 侧:
OSPF → IS-IS 引入时打 tag 100
IS-IS → OSPF 引入时,deny 掉 tag 200 的路由
R2 侧:
OSPF → IS-IS 引入时打 tag 200
IS-IS → OSPF 引入时,deny 掉 tag 100 的路由
★ 为什么 R1 要 deny tag 200?
tag 200 是 R2 引出去的。如果 R1 又把它引回 OSPF,
就等于把 R2 引入的那份又送回原地 → 环路
★ 各自的 tag 不同,才能区分「谁引的」
华为完整配置
# ① 定义"要引入的路由"——精确控制,不要全放
acl number 2000
rule 5 permit source 10.1.1.0 0.0.0.255
rule 10 permit source 10.1.2.0 0.0.0.255
# ② OSPF → IS-IS:打 tag 100
route-policy ospf2isis permit node 10
if-match acl 2000
apply tag 100
# ③ IS-IS → OSPF:先 deny 掉 tag 200(R2 引的)
route-policy isis2ospf deny node 10
if-match tag 200
route-policy isis2ospf permit node 20
if-match acl 2000
# 不重新打 tag,保留原有 tag
# ④ 应用
isis 1
import-route ospf 1 route-policy ospf2isis
ospf 1
import-route isis 1 route-policy isis2ospf
# ★ OSPF 引入外部路由时可以指定类型和开销:
import-route isis 1 type 1 cost 10 route-policy isis2ospf
route-policy ospf2isis permit node 10
if-match acl 2000
apply tag 200 # ★ R2 打 tag 200
route-policy isis2ospf deny node 10
if-match tag 100 # ★ R2 过滤 R1 的 tag 100
route-policy isis2ospf permit node 20
if-match acl 2000
isis 1
import-route ospf 1 route-policy ospf2isis
ospf 1
import-route isis 1 route-policy isis2ospf
次优路径怎么办
即使环路解决了,双点场景下还可能选出绕远的路。原因有两层:
- OSPF 外部路由默认是 Type-2——只比较外部开销,不累加内部开销,所以设备会选「离引入点近」的那条,而不是「端到端最近」的。改成
type 1就会累加内部开销,选路更合理; - 两台边界设备都引入了同一批路由——从 A 侧看,可能 R1 引的和 R2 引的都在,选谁取决于开销。这种情况要用
cost或者 route-policy 让某一台优先。
Type-2(默认):
比较的只是「外部开销」这一个值
→ 忽略到引入点之间的内部开销
→ 可能选到"外部开销小但内部绕远"的路
Type-1:
总开销 = 外部开销 + 到 ASBR 的内部开销
→ 端到端最优
→ 双点场景建议用 Type-1
配置:
ospf 1
import-route isis 1 type 1 cost 10 route-policy isis2ospf
HCIE 考试的经典变体
考试里通常会加几个条件,本质还是 tag 过滤:
- 只允许特定网段互引——用 ACL 精确匹配,别用
import-route direct一把梭; - 要求某条路由只能单向引入——单向就不需要 tag 了,只在一边配 import 即可;
- 要求某条路由引入后不能被再引出去——tag 打上后,对端必须 deny;
- 引入后要改开销/优先级——用
apply cost、apply preference在 route-policy 里调。
通用套路:先在纸上画出「谁引谁」的箭头,每条箭头都要回答两个问题——① 打什么 tag ② 过滤什么 tag。把所有箭头的答案列出来,配置就是抄写。
验证
# 看路由有没有翻来覆去(关键看 Protocol/Preference/Tag)
display ip routing-table 10.1.1.0 verbose
display ip routing-table protocol ospf
display ip routing-table protocol isis
# 看外部路由的 tag 和 type
display ospf lsdb ase 10.1.1.0
display ospf lsdb ase self-originate
# 看引入策略
display route-policy
display isis route
display ospf routing
# ★ 环路判定:同一条路由的下一跳在两条边界设备之间来回变
# 反复 display ip routing-table 几次,看下一跳是否稳定
- 路由震荡(下一跳来回变) → tag 过滤没生效。检查
if-match tag的位置:deny 节点必须在 permit 节点之前; - 过滤了但路由还是进来了 → 打 tag 的那一端没生效。用
display ospf lsdb ase self-originate确认 tag 有没有打上; - 业务绕远 → 外部路由类型问题,改 Type-1;
- 改完配置不生效 → 路由引入是增量的,可能需要
reset ospf process或等收敛。生产环境慎用 reset。
一句话总结:双点双向重分发的所有解法都是「打 tag + 过滤 tag」。谁引出去的谁打自己的 tag,另一台看见别人的 tag 就不引。次优路径靠 Type-1 外部路由解决。
📌 本篇整理自 2024–2025 的「数通」学习笔记(HCIE-Datacom 方向)
合并了原始笔记中「双点双向」三个变体页 + 「扩展--HCIE考试双点双向」共四页。
原笔记是考试题的配置片段,本文把「为什么出问题」讲透,并把所有变体归纳成同一套 tag 方法论。
配置命令保留华为 VRP 原样。