OSPF邻居Full但路由表没有目标前缀:LSA与RIB排查指南
先保存邻居、接口、area 和目标前缀的状态,确认查询的是 OSPFv2/IPv4 还是 OSPFv3/IPv6 及正确 VRF。到起源路由器确认前缀如何进入 OSPF:connected network、stub link、summary、external redistribution 或 default originate;记录相应 LSA type、LS ID、Advertising Router、sequence/age。随后在每个区域边界逐跳查询 LSDB,找出 LSA 首次消失的位置。若本机 LSDB 已有 LSA但没有 OSPF route,检查 SPF、area reachability、forwarding address、route-
本文目录(36 节)
直接答案
先保存邻居、接口、area 和目标前缀的状态,确认查询的是 OSPFv2/IPv4 还是 OSPFv3/IPv6 及正确 VRF。到起源路由器确认前缀如何进入 OSPF:connected network、stub link、summary、external redistribution 或 default originate;记录相应 LSA type、LS ID、Advertising Router、sequence/age。随后在每个区域边界逐跳查询 LSDB,找出 LSA 首次消失的位置。若本机 LSDB 已有 LSA但没有 OSPF route,检查 SPF、area reachability、forwarding address、route-
一、先固定协议与VRF
OSPFv2通常承载 IPv4,OSPFv3通常用于 IPv6等地址族;FRR还可在多个 VRF运行实例。邻居 Full 可能属于另一个实例或地址族。
记录 router ID、process/
二、选择一个精确前缀
保存完整 prefix length,例如 10.10.20.0/24,不要只搜索 10.10.20。默认路由、summary 与更具体前缀的来源不同。
同时记录预期 advertising router 和 area。没有预期来源,就无法判断是缺失还是本来不应通告。
三、Full只表示邻接完成
Full 表示邻居数据库描述交换和同步完成;同步的数据库内容仍受区域类型、LSA scope和配置影响。两台路由器可以 Full,但某外部前缀因 stub area 设计根本不会进入。
先确认邻居稳定、无频繁重建,再追踪目标 LSA。邻接抖动会让 LSDB/route 状态不断变化。
四、确认起源路由器本地有该网络
到预期起源设备查看 connected/
如果前缀由 loopback/stub link产生,确认接口被 OSPF启用且 area 正确。
五、network语句不是直接发布任意前缀
在常见 OSPF 实现中,network 配置主要用于选择哪些接口参与 OSPF并归属 area,不等同 BGP network 直接发布 RIB 前缀。匹配到错误接口或 wildcard 会让预期链路未启用。
查看运行时 OSPF interface 列表和 area,而不是只阅读配置语句。
六、Passive Interface仍可发布网络
Passive interface 通常不发送 Hello、不建立邻居,但其连接网络仍可作为 stub network 被通告(依实现/配置语义)。不要因为接口 passive 就断定路由必然缺失。
确认接口确实进入 OSPF,且 prefix/area 与设计一致。Passive 是邻接控制,不是通用 route filter。
七、识别目标LSA类型
OSPFv2中 Router-LSA、Network-LSA、Summary-LSA、AS-external-LSA 和 NSSA LSA 承担不同信息与 scope。先确定目标前缀应由哪种 LSA表达。
如果把 external 前缀当 inter-area summary 查询,会误判数据库缺失。保存 type、link state ID和 advertising router。
八、在起源LSDB确认LSA
若起源路由器 LSDB中没有目标 LSA,问题在接口、redistribution、summary/default 配置或本地 route eligibility。此时不用检查远端 SPF。
查看 LSA age、sequence 和 checksum,确认不是 MaxAge/正在 flush 的旧条目。
九、逐跳比较LSDB
从起源 area 内部、ABR 两侧、目标 area内部逐点查询同一 LSA。第一台缺失设备之前的边界就是过滤、area scope或泛洪故障位置。
保持查询字段一致。Router/Network LSA 的 scope 不跨 area,ABR 会生成摘要信息,不是原 LSA原样穿越。
十、Area边界改变表示
Intra-area 拓扑由该 area LSA构成,跨区前缀由 ABR通过 summary LSA传播。目标 area看不到源 area的 Router-LSA 是正常的,应寻找对应 inter-area LSA。
检查 ABR在两边的 area membership、backbone connectivity 与 summary生成。
十一、Backbone Area要求
OSPF inter-area 路由通常通过 backbone area 0协调。非骨干区域连接设计错误、virtual link故障或 ABR拓扑异常会影响跨区路由。
确认 area 0连通和 ABR角色。不要为了单前缀临时把接口改 area 0而不评估全网收敛。
十二、Stub Area的限制
Stub area 通常不接收 AS-external LSA,而由 ABR提供默认或摘要路由。邻居仍可 Full,但外部明细前缀不会出现,这是设计行为。
检查 area 两端 stub 设置一致,以及业务是否需要明细还是默认。不要把 stub 改普通 area只为看到更多路由,可能扩大 LSDB和策略边界。
十三、Totally Stubby实现差异
某些实现提供进一步抑制 inter-area summary 的扩展行为,仅保留默认。它不是基础 RFC中所有厂商统一命令。
记录 FRR实际配置与文档,跨厂商时不要只按名称推断。验证目标前缀在设计上是否应被隐藏。
十四、NSSA与Type-7翻译
NSSA允许区域内部 ASBR产生 Type-7 LSA,由合适 ABR翻译为 Type-5传播到其他 area。若翻译器选择、P-bit、forwarding address或配置异常,区域内可见、外部不可见。
分别检查 Type-7和翻译后的 Type-5,记录 advertising router与 translator 状态。
十五、Redistribution是否真正匹配
外部前缀通常由 redistribute connected/
用精确前缀代入 route-map sequence,检查隐式 deny。修改后观察 LSA生成,不要硬重置邻居。
十六、Default Originate条件
默认路由通告可能要求本机 RIB已有默认,除非配置 always 等行为。上游默认撤销后,OSPF默认也可能消失。
明确目标是条件发布还是强制发布,并验证黑洞风险。不要为“保持默认”无条件 always而没有真实出口。
十七、Summarization可能隐藏明细
ABR/ASBR summary 会用较短前缀替代多个明细。远端没有 /24 但有覆盖 /16,可能符合设计,不等于丢路由。
检查 area range/
十八、过滤的作用位置
不同 filter-list、prefix-list、route-map可能影响 summary生成、RIB安装或 redistribution,但并非都能阻止所有 LSA在 area内泛洪。要按 FRR文档确认作用层。
不要看到 route filter就假设 LSDB一定没有。分别查询 LSDB与 route table确定过滤发生阶段。
十九、LSA存在但路由不生成
如果 LSDB含目标信息,检查 advertising router是否可通过 SPF到达、LSA是否合法、路径是否经过当前 area、forwarding address是否可达,以及相关网络/路由器 LSA是否完整。
单条 external LSA存在不代表到 ASBR/forwarding address有路。建立依赖链。
二十、Forwarding Address
External/NSSA LSA可携带 forwarding address。非零时,数据流量可能应直接发往该地址;本地必须有内部 OSPF路径解析,否则外部路由可能不被采用。
检查地址所在网络、OSPF可达性和生成条件。不要手工添加静态路由长期绕过错误 ASBR配置。
二十一、SPF状态与错误
查看 SPF运行时间、次数、last run、计算结果和 daemon日志。持续拓扑抖动会频繁触发 SPF,路由可能短暂出现/撤销。
不要只在一次快照中查看。记录 LSA change与 route change时间线,定位触发源。
二十二、Cost与路径优选
同一前缀可有 intra-area、inter-area、external等候选,OSPF有明确路径类型与 cost选择。你期待的某邻居路径可能不是最终最优,但路由仍通过另一出口存在。
查看详细 route 的 path type、cost、type-2 cost和 nexthops,不要只看总 metric数字。
二十三、E1与E2差异
External Type 1通常把内部到 ASBR/forwarding address成本计入总 metric;Type 2主要比较外部 metric并在需要时用内部成本决胜。错误类型会让路径选择与直觉不同。
统一 ASBR redistribution策略并测试双出口故障切换,不能仅调小 metric解决所有场景。
二十四、主RIB同前缀竞争
OSPF已经计算出 route,但 connected/
这时问题从 OSPF LSDB/SPF进入 RIB策略。不要误删 LSA或重置邻居。
二十五、管理距离配置
FRR可调整 OSPF route distance,甚至按前缀/来源细化。不当历史配置会让 OSPF系统性失去竞争。
读取运行时 distance和 route-map,精确评估影响。全局降低 distance会改变大量路由。
二十六、Zebra与内核FIB
ospfd通常通过 Zebra提交路由。OSPF route命令有前缀,但 ip route/内核没有时,检查 ospfd-zebra连接、ZAPI、目标 VRF/table与 netlink错误。
不要手工永久添加内核路由。控制面与 FIB双重管理会漂移。
二十七、ECMP与Nexthop限制
多条等价 OSPF路径可能受 maximum-paths、Zebra或内核 nexthop限制。只安装部分路径不等于完全缺失。
比较 OSPF计算的 nexthops与内核组,验证故障切换和流哈希,而不是期待逐包轮询。
二十八、策略路由与实际转发
主 FIB有 OSPF路由,但 Linux policy rules、VRF、源地址或 mark可能让业务查询另一 table。用真实源、接口和 mark执行 route lookup。
控制面正确仍需数据平面抓包,确认出接口、下一跳和回程。
二十九、邻居Full但LSDB不同
同 area Full邻居理论上应同步适用 LSAs;若持续差异,检查你比较的 area/LSA scope、MaxAge、数据库过滤扩展、daemon bug或抓取时序。
保存两端同一 LSA header与序列号,再考虑受控邻接重建。不要先 clear全网 OSPF。
三十、安全恢复步骤
冻结批量路由变更;固定前缀;确认起源 RIB和 LSA;逐 area追踪 LSDB;修复最小 interface/
所有变更准备带外访问和回滚。路由错误可能切断管理路径。
三十一、常见错误
常见误区包括:邻居 Full就认为所有前缀必有;查询错误 VRF/AF;把 network语句当任意前缀发布;passive就不通告;在目标 area寻找源 area Router-LSA;忽略 stub/NSSA;LSDB有 LSA就认定 RIB必有;只看 OSPF不看主 RIB;全局改 distance;clear全部邻居;手工 ip route掩盖 Zebra故障。
另一个危险做法是把 stub area改普通 area来解决一条路由,可能突破原有外部路由隔离与容量设计。
三十二、修复后的验收清单
确认协议/VRF/area正确;起源路由存在;预期 LSA生成;各 scope/area传播符合设计;stub/
最后撤回并恢复目标前缀,验证 LSA、SPF、RIB、FIB和监控按预期收敛。
FAQ
1. 邻居Full为什么仍没有某条路由?
Full只证明邻接与数据库同步完成。前缀可能未起源、受 area/过滤/summary影响、SPF不可达,或在主 RIB被其他协议压过。
2. LSDB里有目标LSA为何路由表没有?
检查 advertising router/
3. Stub Area看不到外部明细正常吗?
通常符合设计。Stub area一般不接收 AS-external LSA,而依赖 ABR提供默认/摘要。应按区域设计判断。
4. Passive Interface上的网络会消失吗?
不一定。Passive通常禁止建立邻接,但接口网络仍可被通告,前提是接口被 OSPF启用并归属正确 area。
5. 可以重置OSPF邻居解决吗?
只有证据指向数据库同步异常时才考虑受控重建。起源、area、过滤或 RIB策略错误不会被 reset永久修复。
总结
OSPF 邻居 Full 与目标路由安装之间还有多层状态。可靠排查从精确前缀和起源开始,沿 LSA type/scope、area/ABR、stub/NSSA、过滤、SPF、RIB、Zebra和内核 FIB逐段取证。区分“设计上被汇总/隔离”“OSPF未算出”“主 RIB未选”和“FIB未安装”,才能避免通过清邻居或全局改 distance制造更大的收敛事故。