之前看到过一个案例,一个园区中的AB两栋楼之间用的是OSPF连接,突然通信发生了故障,无法正常访问,后面发现是AB栋的某路由器之间OSPF邻居关系没有建立成功。这里也是尝试模拟一下这个案例,同时顺便将OSPF邻居关系建立的故障因素也都列举一遍
按照真实情况来说,我们应该先检查物理线路有没有问题,是不是接口松动导致的问题;然后通过路由器检查两边设备的连通性,是否能ping通。如果不是这两个原因的话,就该进入到路由配置在观察配置是否出现问题。
这里因为就不说前两步的问题了,直接到OSPF配置的故障问题
完整配置
如上图所示,简单的配置,PC端就直接配置路由就行
接口地址配置
# AR1
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]ip address 10.10.10.1 24 # 接口地址、掩码
[AR1-GigabitEthernet0/0/0]ospf network-type p2p # 设置连接类型
[AR1-GigabitEthernet0/0/0]mtu 1500 # 生存周期
[AR1-GigabitEthernet0/0/0]ospf timer hello 10 # hello报文间隔时间
[AR1-GigabitEthernet0/0/0]ospf timer dead 40 # 路由失效间隔时间
[AR1-GigabitEthernet0/0/0]q
[AR1]int g0/0/1
[AR1-GigabitEthernet0/0/1]ip address 192.168.88.1 24
[AR1-GigabitEthernet0/0/1]q
# AR2
[AR2]int g0/0/0
[AR2-GigabitEthernet0/0/0]ip address 10.10.10.2 24
[AR2-GigabitEthernet0/0/0]ospf network-type p2p
[AR2-GigabitEthernet0/0/0]mtu 1500
[AR2-GigabitEthernet0/0/0]ospf timer hello 10
[AR2-GigabitEthernet0/0/0]ospf timer dead 40
[AR2-GigabitEthernet0/0/0]q
[AR2]int g0/0/1
[AR2-GigabitEthernet0/0/1]ip addres 172.16.88.1 24
[AR2-GigabitEthernet0/0/1]q
OSPF配置
# AR1
[AR1]ospf 1 router-id 1.1.1.1 # 设置ID
[AR1-ospf-1]area 0
[AR1-ospf-1-area-0.0.0.0]network 10.10.10.1 0.0.0.0 # 宣告网段
[AR1-ospf-1-area-0.0.0.0]authentication-mode simple cipher ren # 认证类型和密码
[AR1-ospf-1-area-0.0.0.0]q
[AR1-ospf-1]area 192
[AR1-ospf-1-area-0.0.0.192]network 192.168.88.0 0.0.0.255
[AR1-ospf-1-area-0.0.0.192]q
[AR1-ospf-1]q
[AR1]
# AR2
[AR2]ospf 1 router-id 2.2.2.2
[AR2-ospf-1]area 0
[AR2-ospf-1-area-0.0.0.0]network 10.10.10.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]authentication-mode simple cipher ren
[AR2-ospf-1-area-0.0.0.0]q
[AR2-ospf-1]area 172
[AR2-ospf-1-area-0.0.0.172]network 172.16.88.0 0.0.0.255
[AR2-ospf-1-area-0.0.0.172]q
[AR2-ospf-1]q
[AR2]
需要注意的是,接口配置完后用display this是看不到mtu、hello、dead这些设置的,可以用下面的命令来查看
display ospf int g0/0/0
其实按照上面的配置就已经完成了这个拓扑的需求,两边的PC机可以相互ping通了。
常见影响OSPF邻居关系建立的因素
- router-id冲突
- 未将接口网段宣告进OSPF
- 接口类型不一致
- 接口掩码不一致
- 接口MTU值不一致
- Hello interval(Hello间隔)不一致
- Router Dead interval(路由失效间隔)不一致
- 认证类型不一致或者密码错误
其实来说,这8个因素都可以很快地找到,就是对比两个路由器之间的配置找不同
通过dis curr这个命令就可以对比4个因素
dis curr
同时根据前面所提到的dis ip int g0/0/0命令也可以查看剩下的几个因素,除了认证密码需要抓包确定。而抓包确定问题,这个是最实用也是最便捷的一个方法
修改掩码、认证密码,模拟故障
上面这样看可能不是很明显,所以在这里修改AR2的掩码、认证密码,再次查看它们之间的区别
[AR2]int g0/0/0
[AR2-GigabitEthernet0/0/0]ip address 10.10.10.2 30 # 掩码从24改为30
[AR2-GigabitEthernet0/0/0]q
[AR2]ospf 1
[AR2-ospf-1]area 0
[AR2-ospf-1-area-0.0.0.0]authentication-mode simple cipher zhang # 密码从ren改为zhang
[AR2-ospf-1-area-0.0.0.0]q
[AR2-ospf-1]q
[AR2]
查看修改信息
认证密码由于这里是加密形式,所以看不出来,不过除了抓包还有一个可以看出哪个地方出了问题的命令
dis ospf error
由于认证密码的错误,导致hello包都接收不了,至于后面的对比掩码更是看都不看就丢了
所以最好的方法还是抓包来看的全面
更改好认证密码和掩码,又可以ping通了
最后再补充一点
本来在模拟故障这一步,我是想尝试再修改MTU的,结果修改完发现,两边的MTU不一致,却依旧可以ping通!!!
参考一些资料后,发现OSPF要求两边的MTU一致这个说法是没有错的,但是不是特别严谨。因为MTU是在DD报文中携带的,DD报文是从exstart状态开始才交互的,而且Drother之间的最高的邻居状态是Two-way。所以MTU不同,并不影响DRother之间的建立邻居,只影响DR/BDR和其它路由器建立full状态的邻接关系
而OSPF要求两侧MTU一致的原因。其实是担心一侧发出的报文太大了,另一侧无法接收。