理解 filter-policy 的关键在于区分 “控制平面(LSDB)” 与 “路由表(RIB)” 。
直接回答你的核心问题:在 OSPF 中,filter-policy 是在协议计算出路由之后、注入本地路由表(RIB)之前生效的。它不能过滤区域内的 LSA。
以下是基于 HCIE-Datacom 技术标准的深度拆解:
1. Filter-Policy 的生效位置:路由表之前
OSPF 是链路状态协议(Link-State),其核心逻辑是:
- 同步 LSDB :所有路由器通过 LSA 泛洪,拥有完全一致的地图。
- SPF 计算 :每台路由器独立运行算法,算出最优路径。
- 路由计算结果 :计算出的结果先进入 OSPF 的内部路由表。
- 注入全局 RIB :最后尝试将结果写入系统的全局路由表。
filter-policy import 作用于第 4 步。 它像是一个“安检员”,虽然 OSPF 已经根据地图算出了去往某个网段的路径,但 filter-policy 会在最后关头阻止该路由进入全局路由表。
2. 它能过滤 LSA 吗?
答案是:不能(针对区域内 LSA)。
- 无法过滤 1 类/2 类 LSA :为了保证 SPF 算法的准确性,同一个区域(Area)内的所有路由器的 LSDB 必须完全同步。如果
filter-policy能过滤 LSA,会导致拓扑信息不一致,直接引发路由环路或 SPF 计算失败。 - 实验验证 :即使你配置了
filter-policy过滤了某条路由,你在该设备上执行display ospf lsdb依然能看到对应的 LSA,只是执行display ip routing-table时看不到该条路由。
3. 真正的“LSA 过滤器”:ABR 与 ASBR
如果你需要真正过滤 LSA 以减少数据库规模或实现控制,需要使用其他手段:
A. ABR 上的区域间过滤(Type-3 LSA)
在 ABR 上使用 filter 命令(在 OSPF 区域视图下):
- 原理 :ABR 在将一个区域的路由通告到另一个区域时,本质上是在“讲故事”(类似距离矢量)。此时可以阻止 ABR 生成特定的 3 类 LSA。
- 命令示例 :
filter {acl-number | ip-prefix-name | route-policy-name} {import | export}。
B. ASBR 上的外部路由过滤(Type-5/7 LSA)
在 ASBR 进行重发布(Import-route)时:
- 原理 :在引入外部路由时直接通过
route-policy过滤。这样被过滤的路由连 5 类或 7 类 LSA 都不会生成。
C. 接口级别的 LSA 过滤(不推荐常用)
- 命令 :
ospf database-filter export。 - 作用 :在接口出方向直接拦截所有 LSA 的泛洪。这通常用于特殊拓扑,操作不当会导致邻居关系异常。
4. 关键对比总结
| 特性 | Filter-Policy (Import) | ABR/ASBR 过滤 (Filter/Policy) |
|---|---|---|
| 影响对象 | 本地路由表(RIB) | 全网/全区域 LSDB |
| LSA 是否存在 | 存在(LSDB 保持同步) | 不存在(不生成/不转发) |
| 应用位置 | 任意 OSPF 路由器 | 必须在 ABR 或 ASBR 上 |
| 核心目的 | 控制本地主机的访问路径 | 优化网络流量、减小数据库规模 |
专家提示 (HCIE Perspective)
在面试或排障时,一定要记住:filter-policy import 只能影响自己,不能影响邻居。 因为你的邻居依然拥有完整的 LSA,它们依然会正常计算并转发流量