2、OSPF基础回顾:OSPF工作原理、邻居状态机、LSA类型、区域设计
聊到路由安全,OSPF 绝对是绕不开的一个坎。为什么?因为它是内网用得最广的IGP协议,没有之一。你想想看,一个企业核心网要是OSPF被人动了手脚,那基本等于城门大开。
我个人习惯,在讲安全加固之前,一定先带团队把OSPF的底裤扒干净。说白了,你连邻居怎么建立、LSA怎么泛洪都搞不清楚,谈何审计?谈何修复?
好,咱们今天就把OSPF的四个核心模块过一遍。嗯,这里要注意,我讲的都是实战中必须烂熟于心的东西。
2.1 OSPF工作原理:链路状态的核心思想
OSPF 全称是 Open Shortest Path First,开放最短路径优先。它跟RIP那种“听说隔壁老王能到北京,我就记下来”的玩法完全不同。
OSPF 的核心思想就一句话:每个路由器都知道整个网络的拓扑图。
怎么做到的?三步走:
- 发现邻居:通过Hello报文,跟直连的路由器打个招呼。
- 交换链路状态:把自己知道的链路信息(比如接口IP、开销、连接了谁)告诉邻居。
- 计算最短路径:每台路由器都有一张完整的LSDB(链路状态数据库),然后自己用SPF算法算出一棵无环的最短路径树。
我在项目中遇到过好几次这样的情况:新来的同事总觉得OSPF比EIGRP复杂,其实你只要抓住“邻居 -> 数据库 -> 路由表”这条主线,一切都顺了。
核心要点:OSPF是链路状态协议,不是距离矢量。它不关心“跳数”,只关心“链路开销”。默认的参考带宽是100Mbps,计算公式:开销 = 参考带宽 / 接口带宽。
2.2 邻居状态机:从Down到Full的七步曲
OSPF的邻居关系建立,不是一蹴而就的。它有一套严谨的状态机,一共7个状态。我建议你把这个状态机背下来,因为排错的时候,看一眼邻居状态,基本就知道问题出在哪。
| 状态 | 含义 | 实战排错点 |
|---|---|---|
| Down | 初始状态,没收到任何Hello | 接口没启用OSPF?网络类型不匹配? |
| Attempt | 仅用于NBMA网络,主动向邻居发送Hello | NBMA环境下邻居配置遗漏 |
| Init | 收到Hello,但Hello报文中没有自己的Router ID | 单通问题,检查ACL或反向路由 |
| 2-Way | 双方Hello中都看到了对方Router ID | DR/BDR选举在此阶段完成 |
| ExStart | 主从选举,协商DD报文的序列号 | 接口MTU不匹配会导致卡在这里 |
| Exchange | 交换DD报文,描述各自的LSDB摘要 | DD报文丢失?检查网络稳定性 |
| Loading | 请求缺失的LSA,对方回复LSR、LSU | LSA泛洪受阻?检查区域边界 |
| Full | 邻接关系建立完成,LSDB同步 | 恭喜,可以收工了 |
我曾经在某个数据中心割接时,发现两台核心交换机邻居状态一直卡在ExStart。查了半天,最后发现是接口MTU不一致——一台是1500,另一台是9000。你想想看,DD报文都发不过去,怎么可能建立邻接?
避坑指南:我曾经因为忘记修改接口的Hello间隔和Dead间隔,导致邻居频繁震荡。记住,广播网和P2P网络的默认计时器不同,如果你手动改了,一定要确保两端一致。
2.3 LSA类型:OSPF的“情报”分类
OSPF之所以强大,是因为它用不同类型的LSA来传递不同范围的路由信息。我刚开始学的时候,被11种LSA搞得头晕。其实实战中,你只要搞懂最常见的6种就够了。
| 类型 | 名称 | 传播范围 | 谁生成的 |
|---|---|---|---|
| Type 1 | Router LSA | 本区域 | 每台路由器 |
| Type 2 | Network LSA | 本区域 | DR(指定路由器) |
| Type 3 | Summary LSA | 跨区域 | ABR(区域边界路由器) |
| Type 4 | ASBR Summary LSA | 跨区域 | ABR |
| Type 5 | AS External LSA | 整个AS | ASBR(自治系统边界路由器) |
| Type 7 | NSSA External LSA | NSSA区域 | ASBR(在NSSA中) |
这里有个关键点:Type 1和Type 2只在区域内泛洪。ABR会把Type 1/2的信息汇总成Type 3,然后发给其他区域。这样做的好处是什么?说白了,就是减少路由条目,降低CPU负担。
我记得有一次审计客户网络,发现骨干区域(Area 0)里居然有几百条Type 5 LSA。一问才知道,他们把所有外部路由都重分布进了OSPF,而且没有做汇总。结果就是,全网所有路由器都要维护一张巨大的LSDB,CPU飙升到80%。
安全警告:Type 5 LSA默认会泛洪到整个AS。如果你不希望某些外部路由被所有人知道,可以考虑用NSSA区域或者做路由过滤。我曾经见过攻击者通过注入虚假的Type 5 LSA来劫持流量,这就是典型的OSPF欺骗攻击。
2.4 区域设计:OSPF的“分而治之”
OSPF的区域设计,说白了就是为了解决两个问题:减少LSA泛洪范围和提高网络稳定性。
一个标准的OSPF网络,必须有一个骨干区域(Area 0)。其他区域必须直接或通过虚链路连接到Area 0。为什么?因为所有跨区域的路由都必须经过Area 0转发。
常见的区域类型有:
- 标准区域:接收所有LSA,包括Type 1/2/3/4/5。
- Stub区域:不允许Type 5进入,ABR会自动生成一条默认路由。
- Totally Stub区域:连Type 3都不让进,只有一条默认路由。
- NSSA区域:不允许Type 5,但允许Type 7,用于引入外部路由。
我建议你在设计区域时,遵循以下原则:
- Area 0 一定要稳定:所有ABR都连在Area 0上,它要是挂了,整个网络就瘫痪了。
- 尽量用Stub或Totally Stub:对于末端区域,用Stub可以大幅减少LSDB大小。
- 避免虚链路:虚链路是OSPF的“创可贴”,能不用就不用。我见过太多因为虚链路配置错误导致的环路问题。
嗯,这里要特别提一下:区域边界上的安全。ABR是OSPF的“咽喉”,如果ABR被攻破,攻击者可以随意伪造Type 3 LSA,把流量引向恶意路径。所以,ABR的认证和过滤一定要做扎实。
实战建议:我个人习惯在ABR上配置路由过滤,只允许必要的Type 3 LSA进入骨干区域。同时,开启OSPF认证(MD5或HMAC-SHA256),防止伪造的LSA注入。
2.5 知识体系总览
为了让你更直观地理解OSPF的四大模块,我画了一张图。这张图涵盖了从邻居建立到路由计算的全流程。
这张图把OSPF的四个核心模块串在了一起。你从左上角开始看:先理解工作原理,然后掌握邻居状态机,再熟悉LSA类型,最后学会区域设计。每一步都是下一步的基础。
好了,OSPF的基础回顾就到这里。记住,这些内容不是让你背的,是让你在排错和安全审计时能快速定位问题的。下一节,我们会深入OSPF的安全威胁,看看攻击者到底是怎么利用这些机制的。
公众号:蓝海资料掘金营,微信deep3321