本期分享的案例是园区网的相关问题。
问题背景
某大型园区网络,内部划分多个区域,使用 OSPF 协议进行路由通信。近期,园区内部A、B楼栋网络通信出现异常,无法正常互访。网络管理员发现,A、B栋局点的某为路由器之间OSPF邻居关系未能成功建立,导致路由信息无法正常交换,进而影响了网络的连通性。
基本拓扑连接如下:
排障思路
“邻居”和“邻接”这两个概念在OSPF中很重要:
- OSPF路由器首先要建立的是“邻居关系”,这个过程是由Hello报文交互完成的;
- 邻居过程走完后,OSPF路由器最终会成为Full状态的“邻接关系”,邻接路由器的LSDB(链路状态数据库)路由信息是一致的。
本例是OSPF邻接无法正常建立,如下:
说明是Hello报文交互出现了问题,所以我们重点诊断Hello报文交互进行诊断即可,主要有硬件链路、软件分析等2个层面。
基础排查
第一步、物理链路检查
首先查看路由器之间的物理连接线路,确认网线、光纤等连接正常,无松动、损坏迹象。同时,检查端口状态,发现端口均已正常UP,排除了物理链路层面的问题。
第二步、检查连通性
物理链路检查无问题,下一步需要进入路由CLI界面,通过ping测试两端设备的连通性,这里进入R1路由的CLI界面ping对端接口:
可以看到,基本是无丢包和延时的,连通性正常。
第三步、确认影响邻居建立的要素
常见的影响OSPF邻居建立的因素主要有如下几种:
- router-id冲突
- 未将接口网段宣告进OSPF
- 接口类型不一致
- 接口掩码不一致
- 接口MTU值不一致
- Hello Interval(Hello间隔)不一致
- Router Dead Interval(路由失效间隔)不一致
- 认证类型不一致或认证密码错误
为确认各个影响因素,这边我提供2种方法供大家参考。
分析影响OSPF建邻居的因素
方法一:比对路由器配置文件结合OSPF诊断模块(需设备支持)定位根因
本例中使用的是华为设备,可通过如下命令查看配置信息:
[R1] display current-configuration
然后比对OSPF相关配置项:
可以看到一处错误:R1、R2互联接口掩码不一致,R1是10.0.1.1/24而R2是10.0.1.2/25,这是导致OSPF无法建立邻居之一。
由于认证类型是cipher密文显示,无法判断两认证密钥是否一致,所以还需要根据OSPF诊断模块判断,在R1或R2上输入命令:
[R1] display ospf error
显示如下:
可以从回显看到2处错误:
- 错误原因1:对端发的Hello包中认证密钥与本端不一致,这个通过密文的配置信息看不出来的;
- 错误原因2:对端发来的Hello中接口掩码与本段不一致,这个在上述中通过配置信息已经明确。
所以通过查看路由配置和OSPF诊断信息可以定位问题原因,但OSPF诊断模块并非所有设备都支持,不支持的设备可通过方法二尝试定位解决。
方法二:对比R1、R2的OSPF报文字段定位根因(通用)
抓取R1和R2之间的链路报文:
比对R1和R2发出来的OSPF Hello报文:
很显性的就能看到“掩码不一致”和“认证密码不一致”两处错误,这种方法适用于任何设备和场景,不依赖于设备诊断工具,我个人比较倾向该方法,同时还可以进一步学习协议。
解决方案
修正接口子网掩码:将R2的G0/0/0接口掩码修正10.0.1.2/24
统一认证密码:两端认证密码统一为huawei12
经过上述操作,相关路由器之间的 OSPF 邻居关系成功建立,路由信息开始正常交换,园区内各区域之间的网络通信恢复正常。