原理概述
OSPF 是一种应用非常广泛的路由协议,掌握 OSPF 协议的故障诊断和排除方法显得尤为重要。
OSPF 协议故障问题可以大致分为三类,第一类是涉及 OSPF 邻居关系的建立问题,第二类是涉及 OSPF LSA 的泛洪问题,第三类是涉及 OSPF 路由的计算问题。第一类问题最为常见,所也是本次实验所关注的问题。
实验目的
发现和解决区域号不匹配的问题
发现和解决 Router-ID 冲突的问题
发现和解决掩码不匹配的问题
发现和解决 Hello Timer 时间不匹配的问题
发现和解决认证类型不匹配的问题
实验内容
实验拓扑如图所示。本实验模拟了一个企业的 OSPF 网络,其中R1与R2、R1与R3、R2与R4之间的链路属于区域0,R3与R4、R3与R5、R4与R6之间的链路属于区域1。显然,如果R1与R2之间的链路出现故障,则整个骨干区域会被分割,因此需要在R3与R4之间建立一条虚链路作为区域0的一条备份链路。实验过程中,会人为地制造一些故障点,然后再一步一步地进行故障排除。
实验拓扑
1.基本配置
根据拓扑图进行相应的基本配置,并使用ping命令检测R1与R3之间的连通性。
其余直连网段的连通性测试过程在此省略。
2.配置OSPF路由协议
配置OSPF协议,其中R1与R2、R1与R3、R2与R4之间的链路属于区域0,R3与R4、R3与R5、R4与R6之间的链路属于区域1,R3与R4配置虚链路,每台路由器使用Loopback 0接口的IP地址作为自己的Router-ID。
[r1] router id 10.0.1.1
[r1]ospf 10
[r1-ospf-10]area 0
[r1-ospf-10-area-0.0.0.0]network 10.0.12.1 0.0.0.0
[r1-ospf-10-area-0.0.0.0]network 10.0.13.1 0.0.0.0
[r1-ospf-10-area-0.0.0.0]network 10.0.1.1 0.0.0.0[r2]router id 10.0.2.2
[r2]ospf 10
[r2-ospf-10]area 0
[r2-ospf-10-area-0.0.0.0]network 10.0.12.2 0.0.0.0
[r2-ospf-10-area-0.0.0.0]network 10.0.24.2 0.0.0.0
[r2-ospf-10-area-0.0.0.0]network 10.0.2.2 0.0.0.0
[r3]router id 10.0.3.3
[r3]ospf 10
[r3-ospf-10]area 0
[r3-ospf-10-area-0.0.0.0]network 10.0.13.3 0.0.0.0
[r3-ospf-10-area-0.0.0.0]network 10.0.3.3 0.0.0.0
[r3-ospf-10-area-0.0.0.0]area 1
[r3-ospf-10-area-0.0.0.1]network 10.0.35.3 0.0.0.0
[r3-ospf-10-area-0.0.0.1]network 10.0.34.3 0.0.0.0
[r3-ospf-10-area-0.0.0.1]vlink-peer 10.0.4.4
[r4]router id 10.0.4.4
[r4]ospf 10
[r4-ospf-10]area 0
[r4-ospf-10-area-0.0.0.0]net 10.0.24.4 0.0.0.0
[r4-ospf-10-area-0.0.0.0]net 10.0.4.4 0.0.0.0
[r4-ospf-10-area-0.0.0.0]area 1
[r4-ospf-10-area-0.0.0.1]net 10.0.46.4 0.0.0.0
[r4-ospf-10-area-0.0.0.1]net 10.0.34.4 0.0.0.0
[r4-ospf-10-area-0.0.0.1]vlink-peer 10.0.3.3
[r5]router id 10.0.5.5
[r5]ospf 10
[r5-ospf-10]area 1
[r5-ospf-10-area-0.0.0.1]net 10.0.35.5 0.0.0.0
[r5-ospf-10-area-0.0.0.1]net 10.0.5.5 0.0.0.0
[R6]router id 10.0.6.6
[R6]ospf 10
[R6-ospf-10]area 1
[R6-ospf-10-area-0.0.0.1]net 10.0.46.6 0.0.0.0
[R6-ospf-10-area-0.0.0.1]net 10.0.6.6 0.0.0.0
配置完成后,在R2、R3、R4上查看OSPF邻居建立情况。
可以看到,邻居邻接关系都已成功建立。
在R5上查看OSPF路由信息。
可以看到,R5已经获得了所有网段的路由。
在R6上查看OSPF路由信息。
可以看到,R6也已获得了所有网段的路由。
查看R5和R6的LSDB。
可以看到,R5和R6的LSDB内容是完全相同的。
3.添加OSPF故障点
目前企业网络的配置是正确的,通信也是正常的。为了模拟故障现象,接下来将人为地制造一些故障点。
故障点1:将路由器R5的GE0/0/1接口通告进区域2。
[r5]ospf 10
[r5-ospf-10]area 2
[r5-ospf-10-area-0.0.0.2]network 10.0.35.5 0.0.0.0
说明:OSPF协议规定,不同区域(Area)之间的边界是路由器而不是链路。如果R3的GE0/0/2接口属于区域1,而R5的GE0/0/1接口属于区域2,就意味着R3与R5之间的链路成了区域1与区域2的边界,这违背了OSPF关于区域划分的原则,也将导致R3与R5的邻居关系无法建立。
故障点2:将路由器R2的Router-ID修改为10.0.1.1,并重启OSPF进程。
[r2]router id 10.0.1.1
[r2]q
<r2>reset ospf processWarning: The OSPF process will be reset. Continue? [Y/N]:y
说明: Router-ID 唯一地标识了 OSPF 路由器的身份, OSPF 路由器之间通过交换 Hello 报文来协商成为邻居,而 Hello 报文中就包含Router-ID 等信息。如果R2与 RI 的 Router-ID 发生了冲突,则它们的邻居关系是无法建立的。
故障点3:将R2的 GE 0/0/0接口的 IP 地址掩码改成255.255.255.128。
[r2]int g0/0/0
[r2-GigabitEthernet0/0/0]ip add 10.0.12.2 25
说明:将R2的GE0/0/0接口的 IP 地址掩码改成255.255.255.128后,马上会有日志信息弹出, OSPF 邻居状态变成 Down 。原来, Hello 报文中携带了掩码信息,如果链路两端接口的掩码不匹配,则邻居关系无法建立。
故障点4:将R1的 GE 0/0/1接口的 Hello Timer 的时间修改成100s。
[r1]int g0/0/1
[r1-GigabitEthernet0/0/1]ospf timer hello 100
说明: OSPF 协议依靠 Hello 报文来建立和维护邻居关系,缺省情况下, Hello Timer 的时间为10s,该信息也包含在 Hello 报文中。如果相邻路由器的 Hello 报文中的 Hello Timer 的时间不一致,则将导致双方无法建立邻居关系。
故障点5:将R4的 GE 0/0/2接口配置为简单明文认证类型,R6的 GE 0/0/1接口配置为MD5加密认证类型。
[r4]int g0/0/2
[r4-GigabitEthernet0/0/2]ospf auth
[r4-GigabitEthernet0/0/2]ospf authentication-mode simple
[r4-GigabitEthernet0/0/2]ospf authentication simple huawei[R6]int g0/0/1
[R6-GigabitEthernet0/0/1]ospf auth
[R6-GigabitEthernet0/0/1]ospf authentication-mode md5
[R6-GigabitEthernet0/0/1]ospf authentication md5 1 huawei
说明:在 OSPF 协商建立邻居关系的过程中,双方认证类型的不匹配(例如:一方使用简单明文认证,而另一方使用MD5加密认证)将导致邻居关系无法建立。
故障点6:配置R3与R4之间的虚链路时,使用不一致的认证类型。
[r3]ospf 10
[r3-ospf-10]area 1
[r3-ospf-10-area-0.0.0.1]vlink-peer 10.0.4.4 simple huawei hello 10 dead 40[r4]ospf 10
[r4-ospf-10]area 1
[r4-ospf-10-area-0.0.0.1]vlink-peer 10.0.3.3 md5 1 huawei hello 10 dead 40
说明:在虚链路上也会交换 Hello 报文,但与普通的 Hello 报文不一样,虚链路的 Hello 报文是单播报文而并非是组播报文。如果需要建立虚链路的双方所发送的 Hello 报文中的认证类型不匹配,则双方不能建立虚链路关系。
4.排除OSPF的邻居关系故障
现在,由于上述故障的存在,网络已无法进行正常的通信了。在开始排除故障之前,先熟悉一下每台路由器有哪几个邻居。
在R5上使用 display ospf peer 命令查看邻居关系。
结果发现R5没有任何邻居。使用 reset ospf counter 命令清空 OSPF 计数器,然后使用display ospf peer命令查看错误报文信息。
可以看到,在Bad area id处显示有错误数据包计数。查看R5的OSPF配置情况。
可以看到,R5的OSPF区域配置有误,R5的GE0/0/1接口(10.0.35.5)本应该属于区域1,而现在是属于区域2。
修改R5的GE0/0/1接口的区域配置。
[r5]ospf 10
[r5-ospf-10]area 1
[r5-ospf-10-area-0.0.0.1]network 10.0.35.5 0.0.0.0
修改之后,在R5上查看邻居关系是否能正常建立。
可以看到,现在邻居关系已经正常,R5只有一个邻居R3,这与实际情况是相符的。
查看R3的邻居关系。
观察发现,R3上已建立了两个OSPF邻居关系,而实际上R3应该有3个邻居,目前R3与R1还没有建立起邻居关系。
查看R3接收到的错误数据包。
可以看到,在Hello timer mismatch处有错误数据包计数,说明Hello Timer时间不匹配。
查看R1的GE0/0/1接口以及R3的GE0/0/1接口的OSPF状态。
可以看到,这两个接口上配置的Hello Timer时间不匹配。修改R1的GE0/0/1接口的Hello Timer的值为10s,稍等片刻后,查看R1的邻居关系。
[r1]int g0/0/1
[r1-GigabitEthernet0/0/1]ospf timer hello 10
可以看到,现在R1和R3已经建立了正常的邻居关系,但是却发现,R1还没有与R2建立邻居关系。
在R2上查看是否接收到错误数据包。
可以看到,在Router id confusion处有错误数据包计数,显示Router-ID有错误。
使用display ospf routing router-id 命令查看R1与R2的Router-ID。
可以看到,R2与R1具有相同的Router-ID,发生了冲突。修改R2的Router-ID,并重启R2上的OSPF进程,然后查看R2上的邻居情况。
[r2]router id 10.0.2.2
[r2]q
<r2>reset ospf process
Warning: The OSPF process will be reset. Continue? [Y/N]:y
可以看到,R2的Router-ID修改正确之后,R2与R1仍然没有建立起邻居关系。再次查看R2是否接收到错误数据包。
可以看到,在Netmask mismatch处有错误数据包计数。查看R2的接口信息。
可以看到,R2的GE0/0/0接口的子网掩码是255.255.255.128,导致了不能与R1建立邻居关系。
修改R2的GE0/0/0接口的子网掩码,使链路两端接口的掩码一致。
[r2]int g0/0/0
[r2-GigabitEthernet0/0/0]ip add 10.0.12.2 24
修改掩码后,可以看到如下的日志提示信息。
上面的信息说明了现在R2与R1已经建立起了邻居关系。
在R4上查看邻居情况。
可以看到,R4与R6还没有建立起邻居关系。查看R4是否接收到错误数据包。、
可以看到,在Bad authentication type处有错误数据包计数。
在R4上查看G0/0/2接口下的认证配置。
在R6上查看GE0/0/1接口下的认证配置。
可以看到,R4的GE0/0/2接口与R6的GE0/0/1接口的认证类型配置不一致,导致无法建立邻居关系。修改R4的GE0/0/2接口的认证类型。
[r4]int g0/0/2
[r4-GigabitEthernet0/0/2]ospf authentication-mode md5
[r4-GigabitEthernet0/0/2]OSPF authentication md5 1 huawei
在R4上查看邻居关系。
可以看到,R4与相邻的路由器都建立起了邻居关系。在R6上查看邻居建立情况。
可以看到,R6的OSPF邻居关系是正常的。
测试R5和R6的Loopback 0接口间的连通性。
至此,故障点1至故障点5都已经得到了排除。
5.排除OSPF的虚链路故障
在R3和R4上使用display ospf vlink命令查看虚链路的建立情况。
可以看到,R3和R4之间的虚链路状态出现了问题,状态为Down。
在R3和R4上查看错误数据包信息。
可以看到,在Bad authentication type 处有错误数据包计数。查看虚链路的配置以核实是否真的存在错误。
可以看到,虚链路上配置的认证类型不匹配。修改R4的GE0/0/0接口的认证类型。
[r4]ospf 10
[r4-ospf-10]area 1
[r4-ospf-10-area-0.0.0.1]vlink-peer 10.0.3.3 simple huawei hello 10 dead 40
然后,在R4上查看虚链路状态。
可以看到,R4与R3之间的虚链路状态为FULL,说明虚链路的邻居关系已经正常。至此,所有故障点都已得到了排除。