理解 filter-policy 的关键在于区分 “控制平面(LSDB)”“路由表(RIB)”

直接回答你的核心问题:在 OSPF 中,filter-policy 是在协议计算出路由之后、注入本地路由表(RIB)之前生效的。它不能过滤区域内的 LSA。

以下是基于 HCIE-Datacom 技术标准的深度拆解:


1. Filter-Policy 的生效位置:路由表之前

OSPF 是链路状态协议(Link-State),其核心逻辑是:

  1. 同步 LSDB :所有路由器通过 LSA 泛洪,拥有完全一致的地图。
  2. SPF 计算 :每台路由器独立运行算法,算出最优路径。
  3. 路由计算结果 :计算出的结果先进入 OSPF 的内部路由表。
  4. 注入全局 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,它们依然会正常计算并转发流量