
做 OSPF 综合实验最怕的不是命令不会敲而是整个网络看起来是通的却说不清每条路由为什么这样选。我自己在实验室里复现过很多次 OSPF 搭建网络单区域单路由器的配置其实没什么难点真正考验理解的是多区域、ABR、特殊区域以及把 OSPF 和 MSTP、VRRP 放在同一套拓扑里联动时三层选路和二层冗余怎么互相咬合。这篇笔记就以一个三区域 OSPF 网络为骨架把 Area0、Area1、Area2 的邻居建立、ABR 行为、Stub 和 NSSA 特殊区域全部串起来再叠加 MSTP 加 VRRP 的接入层网关冗余适合正在备考网络工程师、准备 H3C 实验或者在公司园区网改造前想验证思路的人参考。1. 实验整体设计与拓扑规划1.1 核心需求与实验目标大部分初学者做 OSPF 实验时习惯把几台路由器扔进同一个 Area 0配完 network 之后邻居起来了路由表也有了就认为“会 OSPF 了”。实际上这种实验只验证了 OSPF 最基础的部分完全没碰到区域间路由和 LSA 类型这些核心内容。这个综合实验需要覆盖四件事第一OSPF 多区域之间怎么通过 ABR 传递路由第二Stub 区域和 NSSA 区域在路由传递上有什么本质区别第三OSPF 外部路由如何通过 ASBR 引入第四接入层交换机上的 MSTP 和 VRRP 怎么与 OSPF 配合让网关冗余和路由选路不打架。把这四件事放在一张拓扑图里比分开做四个小实验更能理解协议之间的协作关系。1.2 拓扑结构与 IP 规划实验拓扑以三台骨干路由器为核心R1、R2、R3。R1 同时连接 Area 1R2 同时连接 Area 2所以 R1 和 R2 都是 ABR。R3 完全在 Area 0 里作为骨干区域内部路由器。R4 放在 Area 1 的 Stub 区域里R5 放在 Area 2 的 NSSA 区域里并且负责引入外部路由。接入侧用两台汇聚交换机 S1、S2 跑 MSTP 和 VRRPS3 作为纯二层接入交换机接终端不参与 OSPF。设备所在区域角色定位关键地址R1Area 0 Area 1ABRLoopback 1.1.1.1R2Area 0 Area 2ABR 兼 NSSA 转换Loopback 2.2.2.2R3Area 0骨干路由器Loopback 3.3.3.3R4Area 1Stub 区域内路由器Loopback 4.4.4.4R5Area 2NSSA 内部路由器兼 ASBRLoopback 5.5.5.5S1Area 0汇聚交换机VLAN10 主网关Loopback 6.6.6.6S2Area 0汇聚交换机VLAN20 主网关Loopback 7.7.7.7链路地址规划用得比较规整所有路由器之间的互连都用 /30 地址段便于后面用通配符掩码匹配。R1 与 R2 之间是 10.0.12.0/30R1 与 R3 之间是 10.0.13.0/30R2 与 R3 之间是 10.0.23.0/30。R1 通向 R4 的 Area 1 链路是 10.0.14.0/30R2 通向 R5 的 Area 2 链路是 10.0.25.0/30。R1 连 S1 的上行链路是 10.0.1.0/30R2 连 S2 的上行链路是 10.0.2.0/30S1 与 S2 之间的三层互联走 VLAN100 的 10.0.100.0/30。终端侧的网段是 VLAN10 的 192.168.10.0/24 和 VLAN20 的 192.168.20.0/24这两个网段由 S1 和 S2 通过 VRRP 提供虚拟网关。PC1 接在 VLAN10 里网关是 192.168.10.1PC2 接在 VLAN20 里网关是 192.168.20.1。1.3 为什么选三区域而不是单区域如果只用单一区域OSPF 的所有路由器都会学到完整的链路状态信息区域内路由自然也是通的但你完全看不到 ABR 的作用。ABR 是理解 OSPF 的关键它同时维护骨干区域和一个非骨干区域的路由器 LSDB并且负责把非骨干区域的路由汇总成 Type 3 LSA 通告到骨干区域。实验里规划两个非骨干区域是为了对比 Stub 和 NSSA 两种特殊区域。Area 1 做成 Stub用来验证“不允许 ASBR、不允许外部路由、只有 ABR 下发默认路由”的场景Area 2 做成 NSSA用来验证“区域内允许 ASBR、外部路由以 Type 7 LSA 存在、ABR 再转换成 Type 5 LSA”的场景。这两种区域在日常园区网中很常见但很多资料只讲理论不告诉你配置错一个选项后会发生什么。2. OSPF 基础配置与关键原理2.1 路由器基础配置Router-ID、Network 与通配符掩码所有路由器开启 OSPF 之前先确认 Router-ID。实验里手工指定避免回环接口和物理接口地址自动选举带来的不确定。H3C Comware 的命令风格是进入 OSPF 进程后在区域视图下用 network 网段加通配符掩码宣告接口。以 R1 为例sysname R1 interface LoopBack0 ip address 1.1.1.1 255.255.255.255 interface GigabitEthernet0/0 ip address 10.0.12.1 255.255.255.252 ospf network-type p2p interface GigabitEthernet0/1 ip address 10.0.13.1 255.255.255.252 ospf network-type p2p interface GigabitEthernet0/2 ip address 10.0.1.1 255.255.255.252 ospf network-type p2p interface GigabitEthernet0/3 ip address 10.0.14.1 255.255.255.252 ospf network-type p2p ospf 1 router-id 1.1.1.1 area 0.0.0.0 network 1.1.1.1 0.0.0.0 network 10.0.12.0 0.0.0.3 network 10.0.13.0 0.0.0.3 network 10.0.1.0 0.0.0.3 area 0.0.0.1 stub network 10.0.14.0 0.0.0.3这里有几个细节经常被忽略。通配符掩码是掩码的反码/30 对应的掩码是 255.255.255.252反码就是 0.0.0.3。/32 环回口对应的通配符是 0.0.0.0。network 10.0.14.0 0.0.0.3并不是宣告“这一条链路”而是匹配接口地址落在 10.0.14.0 到 10.0.14.3 范围内的所有接口。R1 的 Area 1 里必须写stub因为 Stub 区域要求该区域所有路由器都保持一致。如果只有 R4 配了 stubR1 没配两边 Hello 报文携带的 Stub 标志不一致邻居关系会一直卡在 ExStart 或者反复震荡这个问题在排错部分会详细说。2.2 邻居建立与 DR/BDR换一种链路类型能少一事OSPF 在广播链路默认要选举 DR 和 BDR所有路由器只和 DR、BDR 建立完整邻接关系。实验室里如果直接用以太网口模拟两台路由器之间的点对点链路不强制改网络类型会有选举过程也会出 hello 报文多发、收敛慢的问题。虽然不影响最终结果但对综合实验来说会分散注意力。所以我习惯在互连路由器的物理接口下加一行ospf network-type p2p。改成 p2p 之后链路不再选举 DR 和 BDR邻居关系建立得更快LSDB 也更干净。这个配置在 H3C 和华为设备上都有真实网络中如果两个路由器之间就是一条物理专线也推荐这样做。R4 的配置相对简单它只有一个 Area 1 接口和一个环回口sysname R4 interface LoopBack0 ip address 4.4.4.4 255.255.255.255 interface GigabitEthernet0/0 ip address 10.0.14.2 255.255.255.252 ospf network-type p2p ospf 1 router-id 4.4.4.4 area 0.0.0.1 stub network 4.4.4.4 0.0.0.0 network 10.0.14.0 0.0.0.3配置完成后在 R1 上执行display ospf peer brief可以看到与 R2、R3、S1、R4 的邻居状态为 Full。重点检查 Area 1 这一段R1 与 R4 的邻居状态稳定在 Full说明 Stub 区域的 Hello 选项匹配成功。2.3 ABR 与区域间路由的传递机制ABR 是 OSPF 多区域设计里最容易被低估的角色。一个路由器只有同时连接 Area 0 和至少一个非骨干区域才叫 ABR。它维护多个 LSDB把 Area 1 里学到的区域内路由转换成 Type 3 LSA通告进 Area 0反过来也会把 Area 0 里的路由转换成 Type 3 LSA通告进 Area 1。这个过程不是简单的“转发 LSA”而是重新生成 LSA。ABR 在非骨干区域和骨干区域之间的角色有点像两个区域之间的翻译官。R4 回环口 4.4.4.4/32 这条路由在 Area 1 里是 Type 1 LSA 加 Type 2 LSA 体现的经过 R1 转换后到达 Area 0 时变成一条 Type 3 汇总 LSA通告者是 R1 的 Router-IDcost 等于 R1 到 4.4.4.4 的区域内开销。这也解释了为什么 OSPF 强约束所有非骨干区域必须直接连接到骨干区域。如果有一个区域只挂在 ABR 上而 ABR 本身没有接入 Area 0那么该区域和其他区域之间不会有任何路由传递因为没人能执行“翻译”动作。3. 特殊区域配置Stub 和 NSSA 的实操3.1 Stub 区域配置与默认路由Stub 区域的设计目的是减少 LSDB 规模和路由表条目。它不允许外部路由进入不允许存在 ASBR也不允许 Type 4、Type 5 LSA 进入。区域内只保留 Type 1、Type 2 和 Type 3 LSA而 ABR 会自动向 Stub 区域下发一条 Type 3 的默认路由。R1 作为 Area 1 的 ABR已经在区域视图下配置了stub。R4 同样配置stub两端选项匹配后邻居才能正常建立。默认路由会由 R1 自动生成不需要手工写静态默认路由。如果想控制这条默认路由的开销可以在 ABR 的区域视图下使用default-cost命令例如area 0.0.0.1下面设置default-cost 10。这个值会直接影响 Stub 区域内路由器访问外部网络时的路由优先级实际工程里常用来做出口调度不过实验环境保持默认值就够。验证 Stub 区域效果时在 R4 上执行display ospf lsdb正常情况只能看到 Router LSA、Network LSA 和 Summary LSA不应该出现 External LSA。再看路由表display ip routing-table里会有一条由 OSPF 下发的默认路由下一跳指向 R1。3.2 NSSA 区域配置与 Type7 到 Type5 转换NSSA 区域和 Stub 区域最大的区别是NSSA 允许区域内存在 ASBR允许引入外部路由但这些外部路由在区域内部以 Type 7 LSA 存在。Type 7 LSA 不会直接扩散到其他区域必须由 NSSA 的 ABR 转换成 Type 5 LSA 后才进入骨干区域。R2 的配置里Area 2 要写nssaR5 同样要写nssa。R5 同时作为 ASBR把一条外部静态路由引入 OSPFsysname R5 ip route-static 172.16.100.0 255.255.255.0 NULL0 interface LoopBack0 ip address 5.5.5.5 255.255.255.255 interface GigabitEthernet0/0 ip address 10.0.25.2 255.255.255.252 ospf network-type p2p ospf 1 router-id 5.5.5.5 import-route static area 0.0.0.2 nssa network 5.5.5.5 0.0.0.0 network 10.0.25.0 0.0.0.3这里用指向 NULL0 的静态路由来模拟一条外部网段实际网络中应该指向真实下一跳。import-route static让 OSPF 把这个外部网段以 Type 7 LSA 放进 Area 2。由于 R2 是 Area 2 连接 Area 0 的 ABR它会执行 Type 7 到 Type 5 的转换所以 R1、R3 这些 Area 0 路由器最终看到的是 Type 5 LSA。如果 NSSA 区域里存在多个 ABR默认只会有一个转换者。若某台 ABR 因为故障无法转换或者想固定让某台设备承担转换任务可以在这台 ABR 上配置nssa translate-always强制它无条件执行转换。多 ABR 冗余场景下这个选项能避免外部路由在两次转换之间“悬空”。3.3 特殊区域的路由验证特殊区域配完不能只看邻居状态 Full 就收工。我需要分别在 R4、R5、R3 上做三组检查。R4 上检查默认路由是否由 ABR 下发同时查看 LSDB 确认没有外部 LSA。R5 上执行display ospf lsdb nssa应该能看到 Type 7 LSA通告者是 5.5.5.5描述的外部网段是 172.16.100.0/24。R3 上执行display ospf lsdb external此时应该能看到 172.16.100.0/24 的 Type 5 LSA通告者通常已经是 R2 的 Router-ID。这个细节很值得注意同一条外部路由在 Area 2 里是 Type 7在 Area 0 里变成 Type 5这不是配置重复而是协议规定。很多人在排错时发现 R5 上明明有外部路由R3 的路由表里却没有原因就是没意识到 ABR 转换这一步或者在 R5 上只写 network 没有写 import-route。4. 接入层协同OSPF MSTP VRRP 联调4.1 MSTP 多实例与流量分担接入层如果只有一台交换机不存在环路STP 没什么可玩的。但综合实验一般都有两台汇聚交换机和一台接入交换机物理链路形成三角形必须靠生成树阻塞冗余链路。MSTP 相比 STP、RSTP 的价值是可以用多个生成树实例承载不同的 VLAN。实验中 VLAN10 和 VLAN20 分别映射到 Instance 1 和 Instance 2。S1 在 Instance 1 里做根桥在 Instance 2 里做备份根桥S2 反过来。这样 VLAN10 的主用上联路径经过 S1VLAN20 的主用上联路径经过 S2两条上行链路都能传流量而不是一条链路满载、另一条全程阻塞。S1 的 STP 部分配置sysname S1 stp enable stp region-configuration region-name LAB instance 1 vlan 10 instance 2 vlan 20 active region-configuration stp instance 1 root primary stp instance 2 root secondaryS2 对应把stp instance 1 root secondary和stp instance 2 root primary反过来。MSTP 区域名、修订级别和 VLAN 实例映射必须一致否则交换机不认为它们在同一个 MST 区域生成树计算会出问题。4.2 VRRP 网关冗余与主备切换VRRP 解决的是用户网关冗余问题。两个汇聚交换机在 VLAN10 里配置同一个虚拟 IP 192.168.10.1谁的优先级高谁就是 Master承担网关转发另一台是 Backup监听 Master 状态。一旦 Master 故障Backup 升级为 Master用户网关地址不用变。S1 的 VRRP 和 OSPF 配置interface Vlan-interface10 ip address 192.168.10.2 255.255.255.0 vrrp vrid 10 virtual-ip 192.168.10.1 vrrp vrid 10 priority 120 interface Vlan-interface20 ip address 192.168.20.2 255.255.255.0 vrrp vrid 20 virtual-ip 192.168.20.1 vrrp vrid 20 priority 100 interface Vlan-interface100 ip address 10.0.100.1 255.255.255.252 ospf 1 router-id 6.6.6.6 area 0.0.0.0 network 10.0.1.0 0.0.0.3 network 10.0.100.0 0.0.0.3 network 192.168.10.0 0.0.0.255 network 192.168.20.0 0.0.0.255 silent-interface Vlan-interface10 silent-interface Vlan-interface20S2 上 VLAN10 优先级保持 100VLAN20 优先级设成 120IP 地址分别为 192.168.10.3 和 192.168.20.3虚拟 IP 与 S1 一致OSPF 进程用的 Router-ID 是 7.7.7.7。这里有两个关键点。第一VLAN10 和 VLAN20 的用户侧接口在 OSPF 里要配silent-interface否则 S1 和 S2 会通过用户 VLAN 建立不必要的 OSPF 邻居而且用户侧广播域里会出现大量 Hello 报文。做了 silent 之后OSPF 仍然会宣告对应的直连网段但不再往这个接口发送协议报文。第二VRRP 的主备角色要和 MSTP 的根桥角色保持一致VLAN10 的根桥和 Master 都在 S1VLAN20 的根桥和 Master 都在 S2这样用户流量从接入交换机上行后走的是同一个主用设备不会出现二层根桥在一台、三层网关在另一台的情况。4.3 三层路由与二层冗余的衔接OSPF 配置在 S1、S2 上等于把汇聚交换机也当成三层设备。R1 通过上行链路学习到 S1R2 通过学习到 S2而 192.168.10.0/24 和 192.168.20.0/24 这两个用户网段由 S1、S2 同时通告进 Area 0。这样骨干路由器可以计算出访问用户网段的路由PC 也可以访问核心区域的回环口地址。在生产网络里通常还会配置 VRRP 与上行接口的联动。比如 S1 的上行接口断开VRRP 依然认为自己是 Master用户网关不会切换但上行链路其实已经不可用。这时候需要通过 Track 功能监控上行接口一旦接口 down就把 VRRP 优先级降下来让 S2 接管网关。实验环境可以先把基础配置做完再给 S1 的 VLAN10 接口加一个vrrp vrid 10 track联动观察优先级变化这个动作对理解故障切换非常有帮助。5. 综合验证与故障排查5.1 验收清单从邻居到路由的一步步验证整套配置完成后我不建议直接拿 PC 去 ping 一圈就结束。更可靠的验证步骤是先看邻居再看 LSDB最后看路由表和实际连通性。第一步在 R1、R2、R3 上执行display ospf peer brief确认邻居数量符合预期。R1 应该与 R2、R3、S1、R4 都是 FullR2 应该与 R1、R3、S2、R5 都是 Full。第二步在 R3 上用display ospf routing看 4.4.4.4 和 5.5.5.5 是否出现前者是 R1 转换的 Type 3 路由后者是 R5 环回口经 R2 转换后形成的 Type 3 路由。第三步在 R3 的路由表里找 172.16.100.0/24它应该由 OSPF 以 Type 5 外部路由的形式存在。第四步在 S1 上执行display vrrp确认 VLAN10 的状态是 Master、VLAN20 是 Backup在 S2 上则相反。最后再用 PC 分别 ping 自己的网关再从 PC ping R3 的环回口 3.3.3.3验证跨区域和跨 VLAN 连通性。5.2 常见问题速查表现象排查方向处理建议邻居一直停在 Init 或 2-WayHello 参数、区域 ID、接口掩码检查两端区域是否相同hello/dead 时间是否一致接口掩码是否造成网络范围理解不一致邻居卡在 ExStart 或 ExchangeMTU 不一致统一两端接口 MTU或在接口下启用 OSPF MTU 协商Stub 区域邻居起不来Stub 标志不匹配该区域所有路由器都要配置 stubABR 和内部路由器都不能漏R3 路由表看不到 172.16.100.0/24Type7 到 Type5 转换问题确认 R5 已 import-routeR2 的 Area2 是 nssa必要时在 R2 上强制 translate-always非骨干区域之间路由不通区域没有连接 Area0确认 ABR 同时接入骨干区域否则无法生成区域间路由VRRP 主备切换后网络仍不通上行链路没有联动配置 track 监控上行接口让 VRRP 优先级随链路状态变化MSTP 根桥和 VRRP 主设备不一致规划问题重新配置实例根桥让每个 VLAN 的根桥和主网关落在同一台设备5.3 一点排错心得做这种综合实验我最常用的一句话是“邻居 Full 只代表邻居关系正常不代表路由正确”。如果路由表缺少某条路由先别急着怀疑 import 或 network应该看 LSDB。用display ospf lsdb确认这条路由对应的 LSA 到底有没有出现在本设备上如果 LSA 没出现问题大概率在通告端的区域配置如果 LSA 出现了但路由表没有再看是不是 cost 计算有问题或者路由被策略过滤。还有一个小技巧排查 OSPF 邻居问题时display ospf error很有用。区域不匹配、认证失败、时间参数不一致这些错误通常会被记录在里面比逐条对比两端配置快得多。做完一个区域的变化后记得在两端同时 clear 一下 OSPF 进程避免旧邻居状态干扰判断。这套实验做完我对 OSPF 区域设计的理解比看十遍理论都更深。特别是 Stub 和 NSSA 的区别只有亲手配过一遍看到 Type 7 LSA 转换前后通告者发生变化才算真正记住。以后再做园区网改造我会先画清楚根桥、主网关和路由开销三张表再把 OSPF、MSTP、VRRP 一层一层往上叠这样即使出问题也知道该去哪一层排查。