最近有人遇到OSPF鄰居建立不起來,本期龍哥就與大家分享個人見解。如有講錯地方或有更好的見解歡迎評論區見哈~
拓撲圖
本期我講以此拓撲圖為基礎,來示範幾種常見OSPF鄰居建立不起來的情況,實體層面的原來暫無法示範,比如光衰問題,網線老化等。
1、接口未宣告到OSPF程序
R1關鍵配置如下:
#
interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.0
#
ospf 1
area 0.0.0.1
network 1.1.1.1 0.0.0.0
network 12.1.1.1 0.0.0.0
#
return
[R1-ospf-1]
R2關鍵配置如下:
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.0
#
#
ospf 1
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 24.1.1.2 0.0.0.0
area 0.0.0.1
network 12.1.1.2 0.0.0.0
area 0.0.0.2
network 23.1.1.2 0.0.0.0
#
現象:R1的OSPF鄰居表為空。
原因:大家回顧一下,我們學OSPF時,有提到封包類型,是不是有個Hello包,那回顧一下,Hello是幹嘛用的? 不管你學到什麼P,什麼E,不管你是不是大神級别,初心一定不能忘!忘了就沒法玩了。Hello是用于建立和維護鄰接關系。 本執行個體中,R2沒有把G0/0/0的接口IP宣告到OSPF程序中的區域中,那麼意思就是該接口也沒有參與到OSPF程序,就不會去發Hello包。R2的G0/0/0不發hello包,R1就不會收到,沒有收,怎麼握手,怎麼建立OSPF鄰居呢 是吧~
解決辦法:R2的接口宣告到OSPF程序中的區域1下。
檢查:
2、接口雖然參與到OSPF程序了但被靜默了
R1關鍵配置不變,如上。
R2關鍵配置如下:
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.0
#
#
ospf 1
silent-interface GigabitEthernet0/0/0
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 24.1.1.2 0.0.0.0
area 0.0.0.1
network 12.1.1.2 0.0.0.0
area 0.0.0.2
network 23.1.1.2 0.0.0.0
#
現象:R1的OSPF鄰接表為空,R2對應接口也宣告到OSPF程序了。
原因:R2的OSPF程序下,使用了silent-interface指令用來禁止G0/0/0接口接收和發送OSPF封包。OSPF封包都不能發,更何況是Hello包了,是以鄰居也就無法建立了。
解決辦法:删除silient-interface指令即可。
檢查:
3、廣播網絡中,OSPF程序反掩碼寫錯了。
R1關鍵配置不變,如例1。
R2關鍵配置如下:
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.0
#
#
ospf 1
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 24.1.1.2 0.0.0.0
area 0.0.0.1
network 12.1.0.0 0.0.0.255
area 0.0.0.2
network 23.1.1.2 0.0.0.0
#
現象:R1的OSPF鄰接表為空
原因:OSPF程序area1宣告的網絡掩碼寫錯了,宣告OSPF時,反掩碼的0表示精确比對,255表示不檢查。從配置可以看出,OSPF程序精确去查找,将這個12.1.0.x宣告到程序中,但是R2沒有哪一個接口屬于這個網段的,是以等同于G0/0/0沒有宣告到OSPF程序中。
解決辦法:要麼精确比對,寫4個0,即0.0.0.0,要麼修改反掩碼為0.0.255.255。
檢查:這時就有鄰居了。
4、兩端的hello間隔和dead間隔時間不比對
R1關鍵配置不變,如例1。
R1的hello、dead間隔時間還是預設,沒有修改:
R2關鍵配置如下,修改了G0/0/0的OSPF hello間隔時間。
R1和R2兩端的Hello間隔和dead間隔不一樣,會收到如下日志:
我們有也可以抓包看看:
很明顯可以看出兩端的封包,hello和dead間隔時間不一緻,兩邊裝置收到對端hello封包,檢查發現不一緻,丢棄,于是鄰居無法建立。
我們也可以使用display ospf error 更加快速地定位出問題:
解決辦法:
R2的G0/0/0的Hello間隔改回預設,或者R1的G0/0/0 OSPF的Hello間隔也改為20秒。
檢查:
5、區域ID不一緻
R1關鍵配置不變,如例1。
R2關鍵配置如下:
#
ospf 1
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 12.1.1.2 0.0.0.0
network 24.1.1.2 0.0.0.0
area 0.0.0.2
network 23.1.1.2 0.0.0.0
#
return
[R2-ospf-1]
現象也是:R1的OSPF鄰居表為空。
分析:
排查錯,有時候,如果你不知道該如何入手?建議可以從Hello封包格式來,根據封包格式,檢查一下是不是哪些不比對?
現在我們再來抓包,看一下R1和R2的hello:
R1的hello包如下:
R2的Hello包如下:
很明顯可以看出,R1和R2的區域id字段不一緻,R1在區域1,R2在區域0,兩邊區域ID不一緻,雙方收到對端hello包,發現不一緻,握手失敗,是以鄰居也就無法建立了。
當然,你也可以使用display ospf error來得快一些:
解決辦法:
ospf 1
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 24.1.1.2 0.0.0.0
area 0.0.0.1
network 12.1.1.2 0.0.0.0
area 0.0.0.2
network 23.1.1.2 0.0.0.0
#
檢查:
6、認證類型活密碼不一緻
R1關鍵配置如下:
interface GigabitEthernet0/0/0
[R1-GigabitEthernet0/0/0]ospf authentication-mode simple along123
R2關鍵配置如下:
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ospf authentication-mode simple along456
現象:R1的OSPF 鄰居清單為空,與R2OSPF鄰居建立不起來。
分析:
抓包的話,由于是明文,很容易看出密碼不一樣:
R1:
R2:
7、廣播網絡中,接口IP掩碼寫錯了
R1的接口IP如下:
#
interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.0
R2的接口IP如下:
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.128
OSPF配置均沒變化。
現象:R1的OSPF鄰居清單為空,建立失敗。
分析:
從封包的字段去分析,廣播網絡中會檢查掩碼,發現不一緻,就無法成功建立OSPF鄰居,可以使用如下指令快速定位。
解決辦法:修改正确的掩碼即可。
8
特殊區域類型不比對,比如stub區域
R2的OSPF配置如下:
#
ospf 1
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 24.1.1.2 0.0.0.0
area 0.0.0.1
network 12.1.1.2 0.0.0.0
area 0.0.0.2
network 23.1.1.2 0.0.0.0
stub
#
return
[R2-ospf-1]
R3的OSPF配置如下:
#
ospf 1
area 0.0.0.2
network 3.3.3.3 0.0.0.0
network 23.1.1.3 0.0.0.0
#
return
[R3-ospf-1]
現象:R2和R3無法建立OSPF鄰居關系。
分析:
可知,Hello包裡面的option字段不比對,應該是一邊可以支援外部路由,一邊不支援外部路由。
咱們,也可以抓個包看看,到底什麼情況呢?
再看看R3,
到這來,你應該知道配特殊區域,是需要兩端都要配了吧。
解決辦法:
将R3也配置為stub
[R3-ospf-1]area 2
[R3-ospf-1-area-0.0.0.2]stub
[R3-ospf-1-area-0.0.0.2]
驗證:
好了,本期就與大家分享到這,當然還有很多原因導緻OSPF鄰居建立不起來,大家還遇到過什麼情況?歡迎在評論區留下,一起交流。