OSPF故障诊断

OSPF:路由器无法建立邻居关系

OSPF:路由丢失

 

OSPF:路由器无法建立邻居关系

现象描述:OSPF路由器没有建立起正确的邻居关系,导致路由信息无法交换。

 

可能造成这个故障的原因和解决方法列表:

可能的原因

判断方法和解决方案

没有配置network命令或者配置了错误的network 步骤1 使用命show ip ospf interfaces检查在哪些端口上运行了OSPF

步骤2 如果输出中没有包含应当运行OSPF的接口,使用命令show running-config检查路由器的配置

步骤3 确保对每个应当运行OSPF的端口用network命令进行了指定。

例如,如果以太网端口的IP地址是192.168.52.42,子网掩码是255.255.255.0,输入下述命令在该端口上运行OSPF:

ROUTER_config#router ospf 100
ROUTER_config_ospf_100#net 192.168.52.0 255.255.255.0 area 0

确保指定了正确的进程ID,地址,子网掩码和其它变量。

步骤4 应用上述步骤检查其它OSPF路由器。确保所有相邻的路由器上正确配置了OSPF的运行参数,在它们之间建立邻居关系。

配置了错误的Hello或者dead定时间隔、E比特(stub区域中设置)、区域ID、认证类型或者网络掩码 Hello定时器和dead定时器的间隔、E比特(如果路由器处于stub区域,该比特被置位)、区域ID、认证类型和网络掩码在整个OSPF区域范围(某种情况下整个OSPF网络范围)内必须相同

步骤1 使用命令show ip ospf neighbor检查每台路由器的OSPF邻居。

步骤2 如果输出中没有出现所预期的邻居,则在该路由器以及所预期的邻居上使用命令show ip ospf interface。检查OSPF端口上配置的Hello和dead定时间隔。

ROUTER#show ip ospf interface

 [...]

Hello interval is 12, Dead timer is 48, Retransmit is 5

步骤3 对每台路由器上的定时器配置参数进行比较。如果有不一致的地方,需要重新配置,保证与邻居的定时器参数相同。

例如,输入下列命令可以把以太网端口e1/1的Hello定时间隔设置为10。

ROUTER_config#interface e1/1
ROUTER_config_e1/1#ip ospf hello-interval 10

步骤4 使用debug ip ospf events命令,检查输出中不匹配的配置参数。

下面示例中网络掩码不匹配。从路由器141.108.10.3收到的掩码是255.255.255.0,而在路由器ROUTER上配置的掩码是255.255.255.252:

ROUTER#debug ip ospf events

OSPF: invalid src and mask in received hello packet from 141.108.10.3

步骤5 如果在调试输出表明存在不匹配的参数,需要重新配置,使它们的参数保持一致。关于配置OSPF的详细信息,请参考路由器配置手册。

步骤6 对所有参数执行类似的步骤。检查同一区域内的路由器具有相同的区域ID,该区域内的路由器是否都被配置成stub路由器,是否都配置了相同的认证类型,等等。关于配置这些参数的详细信息,请参考本公司路由器配置手册。

注意: 当本公司路由器与其它厂商的路由器交互时,定时器的配置参数非常重要。

配置了错误的访问列表 步骤1 使用命令show access-list检查路由器上是否配置了IP访问列表。

步骤2 如果路由器上配置了IP访问列表,使用适当的命令使配置无效。例如,使用下列命令使输入访问列表10无效:

ROUTER_config_s1/0#no ip access-group 10 in

步骤3 将路由器上配置的所有访问列表无效后,判断路由器是否能正常地建立其邻居关系。使用命令show ip ospf neighbor。如果建立了邻居关系,可以断定某个访问列表可能过滤掉了OSPF的hello报文。

步骤4 要找出导致问题的访问列表,可以访问列表一条一条地激活,直至在加上某条访问列表后,路由器不能建立邻居关系。

步骤5 检查访问列表是否过滤了端口号为89(为OSPF所使用)的IP报文。切记每个访问列表的最后都隐含着一条语句deny any。如果某个访问列表禁止OSPF报文,输入一条针对端口号89的显式permit语句,确保建立正确的邻居关系。(在配置访问列表时可以使用ospf关键词。)

例如,输入以下语句配置输入访问列表101允许OSPF报文通过:

ROUTER_config#ip access-list extended 101

ROUTER_config_ext_nacl#permit ospf any any

步骤6 如果你改变了某个访问列表,应当重新激活这个列表。然后输入命令show ip ospf neighbors观察是否建立了正确的邻居关系。

步骤7 如果路由器能够建立邻居关系,对路径上的其它路由器也执行上述步骤,直至所有的访问列表都被激活并且路由器能够建立正确的邻居关系。

关于配置访问列表的更多信息,请参考本公司路由器配置手册。

虚链路和stub区域的配置不匹配 步骤1 虚链路不能穿过stub区域进行配置。检查那些即位于stub区域内又位于虚链路一端(ABR)的路由器的配置。使用命令show running-config检查与下面相似的配置语句:

area 2 stub
area 2 virtual-link 192.169.100.10

步骤2 如果存在这样的语句,说明配置错误。删除其中一条命令(使用no形式的命令)来解决。


1 ABR=area border router
(区域边界路由器)

OSPF:路由丢失

现象描述:OSPF路由和网络没有向其它路由器宣告。某一区域内的路由器接收不到关于别的区域的路由信息。其它区域主机间不能进行通信,路由表不完整。

 

可能造成这个故障的原因和解决方法列表

可能的原因

判断方法和解决方案

OSPF路由器不能建立邻居关系 参见上一章节中给出的步骤和程序。
来自IGRP或者RIP的路由信息没有正确地重新分布到OSPF 步骤1 使用命令show running-config检查路由器配置。

步骤2 查找redistribute配置命令。确保配置了路由重新分布命令。

步骤3 如果没有配置redistribute,使用下列命令增加或者改变配置:

ROUTER_config#router ospf 100
ROUTER_config_ospf_100#redistribute rip

区域中没有配置区域边界路由器(ABR)将该区域和OSPF主干区域进行隔离 步骤1 使用命令show running-config验证该区域中至少应该有一个ABRABR首先属于区域0(即主干区域),同时也属于另一区域。检查network命令是否把该路由器配置为区域0的一部分。

步骤2 如果该区域中没有ABR,需要使用network命令进行相应的配置。

例如,使用下列命令配置OSPF进程100参加OSPF主干区域:

ROUTER_config#router ospf 100
ROUTER_config_ospf_100#net 192.21.3.7 255.255.255.0 area 0

在帧中继网络上端口类型不匹配 OSPF的帧中继环境中,如果链路一端是点到多点的端口类型,另一端是点到点的端口类型,在缺省情况下,点到多点端口会把链路作为非广播类型网络进行宣告,而点到点端口会把链路作为点到点类型网络进行宣告。这将在链路状态数据库中造成冲突,并可能妨碍路由信息的正确学习。

步骤1 在链路的每一端上检查路由器每个端口的网络类型是否匹配。使用命令show ip ospf interface可以检查端口的网络类型。

下面示例是命令show ip ospf interface的输出样本:

Serial1/0 is up, line protocol is up
  Internet Address: 10.0.0.1/24
  Nettype: Point-to-Point
  OSPF process is 64,  AREA 0, Router ID 172.16.1.28
  Cost: 1600, Transmit Delay is 1 sec, Priority 0
  Hello interval is 10, Dead timer is 40, Retransmit is 5
  OSPF INTF State is IPOINT_TO_POINT
  Neighbor Count is 0, Adjacent neighbor count is 0

在本例中,网络类型是点到点类型的。

步骤2 通过配置子端口把点到点类型的端口变为点到多点类型,或者使用端口配置命令ip ospf network broadcast把点到点端口的网络类型改变为广播类型。

关于配置子端口的更多信息,请参考本公司路由器配置手册。

某个区域被配置成stub类型 重新分布的路由不可能出现在OSPF的stub区域中。任何外部路由都不会向stub区域中宣告。如果使用了配置命令area area-id stub no-summary,任何汇总路由(区域间路由)也不会向stub区域中宣告。

步骤1 如果你想把汇总路由向stub区域中宣告,同时不想它们在路由表中出现,使用命令show running-config察看路由器的配置。

步骤2 检查是否配置了area area-id stub no-summary 。如果配置了这条命令,输入下列命令使其无效:

ROUTER_config#router ospf 100
ROUTER_config_ospf_100#no area 1 stub no-summary

这条命令使关键词no-summary无效,同时路由器仍被配置为stub类型。

步骤3 需要向某个区域宣告外部路由,该区域一定不能配置成stub类型。

配置了错误的路由过滤 步骤1 使用命令show running-config检查路由器的配置。

步骤2 察看路由器上是否配置了distribute-list in或者distribute-list out命令。

命令distribute-list in阻止LSA中的特定信息合并到OSPF路由表中。命令distribute-list out阻止路由器在发送路由更新时包含特定的信息。但在OSPF中,命令distribute-list out仅仅在自治系统边界路由器(ASBR)上配置用来过滤外部路由。

注意: 尽管命令distribute-list能够阻止特定信息合并到OSPF路由表中,但关于这些网络的信息仍然包含在链路状态数据库中并通过LSA在整个网络范围内进行扩散。这意味着:除非下游路由器也从路由表中过滤这些路由,否则,它们的路由表中将包含这些路由信息。

步骤3 如果路由器上配置了distribute-list命令,使用no形式的命令使其无效。

例如,使用下列命令将引用访问列表10的入栈过滤器无效:

ROUTER_config_ospf_100#no distribute-list 10 in

步骤4 在取消所有的分布列表后,使用命令clear ip route清空路由表。

步骤5 使用命令show ip route检查路由表中是否出现期望的路由。如果路由存在,命令distribute-list所引用的访问列表可能禁止了某些路由更新。

步骤6 为了定位引发问题的分布列表,将列表一条一条地激活,直至路由在路由表中消失。

步骤7 使用命令show running-config检查访问列表,确保它没有禁止期望的路由更新。如果访问列表禁止了来自特定地址的路由更新,确保它没有将应当接收其更新的路由器禁止。改变访问列表的配置,允许路由器从适当的地址处接收更新。切记每个访问列表的末尾都隐含着一条deny any语句。

如果路由器要从某些地址接收更新,要对这些地址配置显式的permit语句。

步骤8 如果你改变了访问列表,使用命令distribute-list将该列表重新激活。使用命令clear ip route检查丢失的路由是否重新出现在路由表中。

步骤9 如果路由重新出现在路由表中,在路径上的每台路由器上执行上述步骤,直至即激活了分布列表,同时期望的路由信息也出现在路由表中。

关于配置访问列表的更多信息,请参考本公司路由器配置手册。

虚链路的配置配置错误 步骤1 在虚链路的每一端器上使用命令show running-config检查路由器的配置。

检查配置语句area area-id virtual-link router-id 。这些命令用于配置虚链路。

步骤2 使用命令show ip ospf找出路由器的标识符(IP地址)。

步骤3 如果没有配置area area-id virtual-link router-id 命令,需要增加配置。如果原来的配置有错,需要将其改正。要确保命令中指定了正确的区域ID和路由器ID(IP地址)。位于虚链路两端的路由器之间必须经过传输区域进行相连。

例如,在下图所示的网络中,路由器B和A之间经过传输区域创建了一条虚链路。

在路由器A上输入下列命令:

A_config#router ospf 250
A_config_ospf_250#net 121.10.0.0 255.255.0.0 area 1
A_config_ospf_250#net 169.192.56.0 255.0.0.0 area 0
A_config_ospf_250#area 1 virtual-link 121.10.100.46

在路由器B上,输入下列命令:

B_config#router ospf 250
B_config_ospf_250#net 121.10.0.0 255.255.0.0 area 1
B_config_ospf_250#net 108.31.0.0 255.255.0.0 area 2
B_config_ospf_250#area 1 virtual-link 121.10.1.1


1 LSA=link state advertisement (
链路状态宣告)
2 ASBR=autonomous system border router(
自治系统边界路由器)


OSPF
虚链路图例