关键词:IS-IS、路由泄露、Route Leaking、Level-2 to Level-1、Filter-Policy、ATT 位、最优路径
第78篇:IS-IS 路由泄露:Level-2 向 Level-1 注入
一、引言
在 IS-IS 的层次化设计中,Level-1 路由器仅维护本区域的 LSDB,区域间流量通过默认路由(0.0.0.0/0)指向最近的 Level-1-2 路由器。这种设计简化了 Level-1 路由器的路由表,但也带来了一个问题:所有跨区域流量都走默认路由,可能导致次优路径。
路由泄露(Route Leaking)是将选定的 Level-2 路由注入 Level-1 区域的机制,使 Level-1 路由器能够获知部分跨区域路由信息,从而选择更精确的出口路径。
二、核心概念
2.1 为什么需要路由泄露
默认情况下,Level-1 路由器的路由表只包含:
- 本区域内的 Level-1 路由(精确路由)
- 指向 Level-1-2 路由器的默认路由(0.0.0.0/0)
场景问题:
假设某 Area 内有两台 Level-1-2 路由器(出口):
- R3:连接 Area 49.0001 和 Level-2,通往目标网段 A(10.10.0.0/16)
- R6:连接 Area 49.0001 和 Level-2,通往目标网段 B(20.20.0.0/16)
Level-1 路由器 R1 只有默认路由:
- 发往 10.10.0.0/16 的流量 → 默认路由 → 可能走向 R6(次优)
- 发往 20.20.0.0/16 的流量 → 默认路由 → 可能走向 R3(次优)
通过路由泄露,可以将 10.10.0.0/16 通过 R3 泄露到 Level-1,将 20.20.0.0/16 通过 R6 泄露到 Level-1,实现精确路由选择。
2.2 路由泄露的方向
| 泄露方向 | 是否自动 | 说明 |
|---|---|---|
| Level-2 → Level-1 | 需要手动配置 | 通过 import-route isis level-2-into-1 |
| Level-1 → Level-2 | 需要手动配置 | 通过 import-route isis level-1-into-2 |
注意:IS-IS 默认不做任何方向的路由泄露。Level-1 和 Level-2 的路由完全隔离。
2.3 路由泄露的实现方式
| 方式 | 说明 | 灵活性 |
|---|---|---|
| 直接泄露 | import-route isis level-2-into-1,泄露所有 L2 路由 | 低 |
| 策略泄露 | 通过 route-policy 过滤后泄露指定路由 | 高 |
| 前缀列表过滤 | 通过 ip prefix-list 匹配后泄露 | 高 |
三、技术细节
3.1 路由泄露的拓扑场景

场景说明: - R1、R2 为 Level-1 路由器,只有默认路由通往外部 - R3 和 R6 为 Level-1-2 路由器,连接 Level-2 骨干 - R8 为 Level-2 路由器,连接有外部网段 20.20.0.0/16 - 目标:在 Area 49.0001 中将 20.20.0.0/16 泄露给 R1 和 R2
3.2 路由泄露的实现流程

3.3 路由泄露后的度量值计算
路由泄露后,Level-1 路由器计算路由度量值的规则:
| 步骤 | 计算内容 |
|---|---|
| 1 | 获取 Level-2 路由的原始度量值 |
| 2 | 加上泄露点(Level-1-2 路由器)在 Level-1 中的度量值 |
| 3 | Level-1 路由器到达泄露点的度量值 + 上述值 = 总度量值 |
示例: - R1 → R3 的 L1 度量值 = 10 - R3 泄露的 20.20.0.0/16 的 L2 度量值 = 20 - R1 看到的 20.20.0.0/16 的总度量值 = 10 + 20 = 30
3.4 多出口场景下的路由泄露策略
当一个 Area 有多个 Level-1-2 路由器(多个出口)时,路由泄露策略尤为重要:
| 路由器 | 泄露路由 | 目的 |
|---|---|---|
| R3 | 泄露通往 Area 49.0002 的路由 | R1/R2 访问 Area 49.0002 走 R3 |
| R6 | 泄露通往 Area 49.0003 的路由 | R1/R2 访问 Area 49.0003 走 R6 |
通过精细化路由泄露,Level-1 路由器可以为不同目的地址选择不同的出口,避免次优路径。
四、实战配置/案例分析
4.1 基本路由泄露配置
# R3:将 Level-2 路由泄露到 Level-1
sysname R3
#
# 定义需要泄露的路由前缀
ip prefix-list LEAK-L2 permit 20.20.0.0 16
#
# 定义路由策略
route-policy LEAK-L2-TO-L1 permit node 10
if-match ip prefix-list-name LEAK-L2
apply cost 10 # 可选:调整泄露路由的开销
#
# 在 IS-IS 进程中执行泄露
isis 1
import-route isis level-2-into-1 filter-policy LEAK-L2-TO-L1
4.2 多出口路由泄露配置
# R3:泄露通往特定 Area 的路由
ip prefix-list R3-LEAK permit 10.10.0.0 16
ip prefix-list R3-LEAK permit 30.30.0.0 16
#
route-policy R3-LEAK permit node 10
if-match ip prefix-list-name R3-LEAK
#
isis 1
import-route isis level-2-into-1 filter-policy R3-LEAK
# R6:泄露其他路由
ip prefix-list R6-LEAK permit 20.20.0.0 16
ip prefix-list R6-LEAK permit 40.40.0.0 16
#
route-policy R6-LEAK permit node 10
if-match ip prefix-list-name R6-LEAK
#
isis 1
import-route isis level-2-into-1 filter-policy R6-LEAK
4.3 验证路由泄露
# 在 R1(Level-1 路由器)上验证
<R1> display ip routing-table protocol isis
Routes : 3
Destination/Mask Proto Pre Cost Flags Nexthop Interface
0.0.0.0/0 IS-IS 15 10 D 10.1.0.5 GE0/0/0 (默认路由)
10.10.0.0/16 IS-IS 15 30 D 10.1.0.5 GE0/0/0 (R3泄露)
20.20.0.0/16 IS-IS 15 50 D 10.1.0.9 GE0/0/1 (R6泄露)
4.4 案例分析:路由泄露导致路由环路
故障背景:R3 和 R6 都执行了无差别的路由泄露(泄露所有 Level-2 路由到 Level-1),导致 Level-1 中的路由环路。
排查:
# R3 泄露了 R6 起源的路由
import-route isis level-2-into-1 # 无过滤,泄露全部
# R6 也泄露了 R3 起源的路由
import-route isis level-2-into-1 # 无过滤,泄露全部
# 结果:R1 同时从 R3 和 R6 收到相同路由
<R1> display ip routing-table 20.20.0.0
# 路由来回震荡
根因:无差别泄露导致: 1. R3 将 R6 的路由泄露到 L1 2. R6 又将这条路由从 L1 学习到 L2(如果同时配置了 level-1-into-2) 3. 形成环路
修复:
# 精确控制泄露范围
# R3:仅泄露本区域出口应承担的路由
ip prefix-list R3-LEAK permit 10.10.0.0 16
#
route-policy R3-LEAK permit node 10
if-match ip prefix-list-name R3-LEAK
#
isis 1
import-route isis level-2-into-1 filter-policy R3-LEAK
4.5 案例分析:路由泄露与默认路由的优先级
故障背景:配置路由泄露后,R1 仍通过默认路由转发流量,泄露的精确路由未被使用。
排查:
# R1 路由表
<R1> display ip routing-table 20.20.0.0
Destination/Mask Proto Pre Cost Nexthop
20.20.0.0/16 IS-IS 15 200 10.1.0.9 (泄露路由, Cost 200)
0.0.0.0/0 IS-IS 15 10 10.1.0.5 (默认路由, Cost 10)
根因:精确路由 20.20.0.0/16(Cost 200)的度量值高于默认路由 Cost(10),但由于 IP 路由匹配规则,最长匹配优先,20.20.0.0/16 路由仍应被优先匹配。检查发现实际流量走了默认路由,是因为泄露路由被错误地标记了过高的度量值。
修复:
# 在泄露策略中调整度量值
route-policy R3-LEAK permit node 10
if-match ip prefix-list-name R3-LEAK
apply cost 10 # 调整为合理值
#
isis 1
import-route isis level-2-into-1 filter-policy R3-LEAK
五、总结
| 泄露方向 | 配置命令 | 说明 |
|---|---|---|
| L2 → L1 | import-route isis level-2-into-1 | 将 L2 路由注入 L1 |
| L1 → L2 | import-route isis level-1-into-2 | 将 L1 路由注入 L2 |
| 设计要点 | 说明 |
|---|---|
| 精确泄露 | 使用 route-policy + prefix-list 精确控制泄露路由 |
| 避免环路 | 不要无差别泄露,防止 L1↔L2 路由环路 |
| 度量调整 | 通过 apply cost 调整泄露路由的度量值 |
| 多出口优化 | 每个 L1-2 路由器只泄露其最优出口的路由 |
| 与默认路由共存 | 泄露精确路由与默认路由并行存在,最长匹配优先 |
思考
- 如果 Area 内有三台 Level-1-2 路由器,如何设计路由泄露策略,使得 Level-1 路由器能够根据不同的目的地址选择最优出口?
- 路由泄露可能导致 Level-1 路由器的路由表膨胀。在实际网络中,如何平衡"精确路由"和"路由表规模"之间的矛盾?
- IS-IS 的路由泄露和 OSPF 的 Area 间路由传递有什么区别?为什么 IS-IS 默认不泄漏 L2 路由到 L1?
下篇预告:第79篇:IS-IS 开销类型:narrow 与 wide 模式