
身边不少朋友一开始接触华为设备的OSPF都容易卡在同一个地方命令敲下去邻居也能起来但路由就是不通或者在考试、项目里一换场景就懵。其实OSPF本身不复杂难的是你知不知道每个配置背后在解决什么问题。这篇东西我就按自己平时在eNSP上做实验、帮人排查故障的习惯来写从概念到实操再到排错把你配置华为OSPF时一定会踩的坑都过一遍。适合正在备考HCIP的朋友也适合刚上手华为设备、想把路由协议真正用明白的同行。1. 配置前必须搞懂的三个基础点1.1 进程号与区域号很多人第一个坑就在这华为设备上启动OSPF要指定进程号命令长这样[Huawei] ospf 1进程号只在本地有意义相当于这台设备上跑了一个编号为1的OSPF实例。两台路由器即使进程号不同也能正常建立邻居关系因为报文里带的进程号在交互时会做匹配但真正决定邻居关系的是区域ID、认证、Hello间隔这些参数。我记得刚学的时候在这个上面绕了很久后来才明白进程号更像一个“本地标签”不是全局唯一的。区域号就不一样了。OSPF要求邻居之间的接口必须在同一个区域否则邻居关系起不来。区域号的命名规则很简单0代表骨干区域非0就是你自定义的普通区域。单区域组网建议都用area 0很多新手为了区分不同链路硬把一个网络拆成多个区域结果ABR、虚链路、区域间路由汇总全来了自找麻烦。1.2 Router ID的选择逻辑别让设备帮你做决定OSPF的Router ID是用来唯一标识一台路由器的类似人的身份证号。华为设备在没有手动配置Router ID时会按照“Loopback接口最大IP地址 物理接口最大IP地址”的顺序自动选择。这就有个隐患物理接口地址变了Router ID可能跟着变OSPF进程会重启邻居全部震荡一遍。所以规范的做法是建Loopback接口手动指定Router ID[Huawei] interface LoopBack 0 [Huawei-LoopBack0] ip address 1.1.1.1 32 [Huawei-LoopBack0] quit [Huawei] ospf 1 router-id 1.1.1.1Loopback接口永远不downRouter ID稳定后面做汇总、做认证、做路由过滤都方便。手动指定Router ID后如果要修改必须重启OSPF进程才生效这也是个项目操作上的小坑生产环境别随便改。1.3 区域规划决定了你后面省不省事区域规划这事看起来是“设计”其实决定的是你后面排障的难度。经验之谈是小网络几十台设备以内直接用单区域简单可靠没那么多类型报文CPU开销也低。中大型网络用多区域时把所有非骨干区域连着area 0挂不要让非骨干区域之间直接相连。尽量避免跨区域传递默认路由、做大量路由过滤OSPF本来不是干这个的后面维护够你喝一壶。我自己见过最乱的一张网30台设备分了十几个区域为了搞区域间路由汇总把ABR上的明细路由表看得脑子嗡嗡的。设计阶段多花半小时比上线后熬几个通宵强太多。2. 单区域OSPF基础配置实操2.1 实验环境与IP规划思路先给个最简单的三台路由器组网方便你跟着敲设备接口IP地址用途R1GigabitEthernet 0/0/010.0.12.1/24连接R2R1LoopBack 01.1.1.1/32Router ID与测试地址R2GigabitEthernet 0/0/010.0.12.2/24连接R1R2GigabitEthernet 0/0/110.0.23.2/24连接R3R2LoopBack 02.2.2.2/32Router ID与测试地址R3GigabitEthernet 0/0/110.0.23.3/24连接R2R3LoopBack 03.3.3.3/32Router ID与测试地址IP地址规划上互联地址用10.0.X.XLoopback用X.X.X.X一眼就能看出是哪台设备这个习惯在排障时非常有用。2.2 华为OSPF基础配置命令逐条拆解以R1为例完整配置如下[Huawei] sysname R1 [R1] interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0] ip address 10.0.12.1 255.255.255.0 [R1-GigabitEthernet0/0/0] quit [R1] interface LoopBack 0 [R1-LoopBack0] ip address 1.1.1.1 32 [R1-LoopBack0] quit [R1] ospf 1 router-id 1.1.1.1 [R1-ospf-1] area 0 [R1-ospf-1-area-0.0.0.0] network 10.0.12.0 0.0.0.255 [R1-ospf-1-area-0.0.0.0] network 1.1.1.1 0.0.0.0 [R1-ospf-1-area-0.0.0.0] quit [R1-ospf-1] quit这里network命令用的是通配符掩码很多人在这翻车把通配符当反掩码理解成“取反后的子网掩码”更准确的说法是“匹配位为0必须相同为1可以不同”。10.0.12.0 0.0.0.255就是精确匹配10.0.12.0到10.0.12.255这一段。Loopback地址用0.0.0.0做精确匹配保证只宣告这一条主机路由。R2处于多台设备中间配置稍微多一步[R2] ospf 1 router-id 2.2.2.2 [R2-ospf-1] area 0 [R2-ospf-1-area-0.0.0.0] network 10.0.12.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0] network 10.0.23.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0R3的配置和R1对称把Router ID和网段换成自己的就行这里不重复贴。2.3 状态验证命令不要只会看邻居配置敲完大多数人第一件事是敲display ospf peer看邻居是否Full。这没错但太粗糙了。我自己的检查习惯是按下面顺序来display ospf peer brief这条命令看邻居概要State是不是Full如果卡在Init、2-Way、ExStart这些状态说明参数有问题后面会讲怎么排查。display ospf interface这条命令看接口处于哪个区域、网络类型、Hello/Dead间隔、邻居数量是判断“接口到底有没有参与OSPF”最直接的证据。很多人配置了network命令但接口没起来一查这里就明白了。display ip routing-table protocol ospf这条看OSPF路由有没有进路由表如果邻居Full但这里没有路由就要检查接口状态、区域配置、是否有路由过滤。display ospf lsdb这条看链路状态数据库主要确认LSA有没有泛洪过来、类型对不对。排障时很有用但日常不用频繁敲。三条命令能把“邻居-数据库-路由表”三层链路全部确认一遍比只盯邻居状态靠谱得多。在eNSP里做完实验建议养成这个习惯考试也能用上。3. 多区域、认证与特殊场景配置3.1 多区域配置与ABR的行为当网络变大需要划分区域时配置逻辑不变只是在上连骨干的ABR上多挂几个区域。举个例子R2原来是区域0的设备现在要把R3划到区域1[R2] ospf 1 [R2-ospf-1] area 1 [R2-ospf-1-area-0.0.0.1] network 10.0.23.0 0.0.0.255 [R2-ospf-1-area-0.0.0.1] network 3.3.3.3 0.0.0.0 [R3] ospf 1 router-id 3.3.3.3 [R3-ospf-1] area 1 [R3-ospf-1-area-0.0.0.1] network 10.0.23.0 0.0.0.255 [R3-ospf-1-area-0.0.0.1] network 3.3.3.3 0.0.0.0R2横跨区域0和区域1自动变成ABR。ABR会为区域1生成Type-3汇总LSA把区域内的路由通告给骨干区。这里要特别注意OSPF不允许非骨干区域之间直接传递路由所有跨区域流量必须经过骨干区域。如果R2的G0/0/0接口down了区域1就彻底失联因为区域1没有物理或逻辑路径连接骨干区。这是OSPF设计上的硬约束不是配置错了。3.2 区域认证配置杜绝非授权设备接入明文网络里任何人都可以用一台路由器接入你的二三层网络然后和你建立OSPF邻居关系把你的路由表搞得天翻地覆。区域认证是基础的防护手段。华为支持简单认证和HMAC-SHA256等更强的认证方式推荐HMAC-SHA256密钥不要用明文[R1] ospf 1 [R1-ospf-1] area 0 [R1-ospf-1-area-0.0.0.0] authentication-mode hmac-sha256 [R1-ospf-1-area-0.0.0.0] authentication-key simple Huawei123同一区域内所有设备必须配置完全相同的认证模式和密钥。接口级认证优先级高于区域级如果同时配置了以接口级为准。还有一点容易忽略新加一台设备进现有区域如果忘了配认证邻居会一直卡在Init状态还不会报错排查起来只能逐接口对比配置很费时间。3.3 网络类型与开销的调整华为接口默认的OSPF网络类型是Broadcast广播或P2P具体取决于接口封装。在广播网络中OSPF会选举DR和BDR导致所有路由器只和DR建立Full邻居关系。如果你在一个只有两台路由器的链路上跑Broadcast类型DR选举反而成了多余动作还可能因为DR优先级设置不当造成路由收敛慢。这时候把它改成P2P更干净[R1-GigabitEthernet0/0/0] ospf network-type p2p开销值的计算华为默认参考带宽是100Mbps公式是开销100Mbps/接口带宽。所以千兆接口开销是1百兆接口开销也是1这让很多人误以为链路开销一样。实际上应该用auto-cost reference-bandwidth统一调整参考带宽[R1] ospf 1 [R1-ospf-1] bandwidth-reference 10000把参考带宽改成10000Mbps后千兆接口开销就是10万兆就是1区分度就出来了。注意所有路由器要配置一致否则一样的链路在两台设备上算出的开销不同路由选路会出问题。3.4 区域间路由汇总与虚链路多区域网络里区域间明细路由太多会让ABR的LSDB膨胀。手动汇总可以显著缩小路由表[R2-ospf-1] area 1 [R2-ospf-1-area-0.0.0.1] abr-summary 10.0.0.0 255.255.252.0这条命令在ABR上配置把区域1内连续的子网汇总成一条通告出去。汇总的网段必须精确匹配你实际规划的子网集合不能随便汇总否则会产生黑洞路由。我见过有人把/22汇总成/16结果未知流量被吸进黑洞排查了一下午。虚链路是OSPF最后的救命稻草当非骨干区域物理上无法直连骨干区时用一条逻辑链路穿越中间区域把它连上骨干。但虚链路配置复杂、排障困难性能也差。能用物理直连、直连光纤、隧道等方式解决的话永远别用虚链路。考试和HCIP面试里经常考虚链路概念实现上知道命令即可[R2-ospf-1] area 1 [R2-ospf-1-area-0.0.0.1] vlink-peer 3.3.3.3这条命令在穿越区域的两端ABR上都要配置对端的Router ID必须正确否则虚链路一直处于DOWN状态。4. 常见故障排查与避坑经验4.1 邻居状态卡住不动最常见的四类原因OSPF邻居状态机里有Down、Init、2-Way、ExStart、Exchange、Loading、Full几个状态。如果卡在某一步不动按下面优先级排查Hello/Dead间隔不匹配。两台设备的Hello间隔或Dead间隔不一致邻居就会在Init状态反复横跳。用display ospf interface看两端间隔不一致就改[R1-GigabitEthernet0/0/0] ospf timer hello 10 [R1-GigabitEthernet0/0/0] ospf timer dead 40区域ID不匹配。两台设备接口所在区域不同Hello报文里带的区域ID对不上邻居起不来。逐接口display ospf interface核对区域。认证失败。区域认证或接口认证不匹配时Hello报文被静默丢弃邻居一直Down。在系统视图下敲debugging ospf packet能看到auth failed的日志这是最快的定位方式。网络类型不匹配。一端是Broadcast另一端是P2PMTU协商失败会卡在ExStart。直接把两端都改成一致的网络类型或者调整接口MTU至一致即可。4.2 路由学不全或路由不优问题往往不在OSPF本身邻居Full了路由表却没有期望的路由这时候不要急着怀疑OSPF配置。我遇到过的几种典型情况接口物理状态正常但被误配置了silent-interface。华为的silent-interface会让该接口只接收不发送Hello报文邻居自然起不来。如果你刻意用它来抑制某个接口的OSPF邻居记得它不是完全禁用了OSPF只是禁用了邻居建立。路由被其他协议抢占。OSPF的管理距离华为默认10比其他协议小如果设备同时跑着静态路由或BGP而且管理距离更小OSPF学到的路由就不会出现在路由表中。display ip routing-table看优选来源就能确认。区域间汇总范围太粗。前面说的汇总问题导致明细路由被掩盖数据转发黑洞。查看LSDB里是否存在不合理的Type-3 LSA基本就能定位。4.3 DR/BDR选举引发的“假故障”在Broadcast网络中DR和BDR选举是很多怪问题的根源。最常见的情况是新加一台性能更强的路由器进网络但它迟迟不成为DR因为DR是稳定优先的不会因为新设备优先级更高就立刻抢占。这符合协议设计但业务上可能受影响。如果确实需要强制切换先把两台设备的OSPF进程都shutdown再启动新的触发重新选举[R1] ospf 1 [R1-ospf-1] shutdown [R1-ospf-1] undo shutdown优先级设置用0到255优先级为0的设备永远不参与选举适合做备份设备[R1-GigabitEthernet0/0/0] ospf dr-priority 1004.4 排错命令速查表最后整理一份我平时用的排查顺序基本能覆盖90%的OSPF故障场景命令看什么邻居没起来display ospf peer brief状态卡在哪个阶段状态卡住display ospf interface对比两端Hello/Dead、区域、网络类型认证失败debugging ospf packet是否丢弃报文、报错原因路由缺失display ip routing-table protocol ospfOSPF路由是否在表中DR选举问题display ospf peer看DR/BDR地址和优先级LSDB异常display ospf lsdb看LSA类型、生成者、序列号汇总路由异常display ospf lsdb summary确认Type-3 LSA的网段范围虚链路异常display ospf vlink看虚链路状态和邻居Router ID我刚做网络运维那会儿排障全靠抓包分析后来熟练了才发现华为的display命令本身已经把九成信息都暴露出来了。真正的高手不是会敲更多命令而是知道每一层该看什么、看到什么现象代表什么问题。这些经验在你做HCIP实验、上项目割接、甚至在客户现场救火时都是实打实能救命的东西。OSPF配置本身不复杂但把它配置得稳、配置得规范、出了问题能快速定位才是这行真正的分水岭。