Linux下使用Quagga搭建軟路由-OSPFv2學習

一、背景

在學習路由協議如OSPF協議時,需要進行一個實操的練習,若手裏又沒有核心交換機,怎麼破?

本文講述瞭如何在Linux系統上搭建軟路由環境,並使用OSPF路由協議完成路由表的學習。

二、相關知識

2.1 Quagga

Quagga是一款開源路由軟件套件,它可以用來將你的Linux設備變成一個功能完備的路由器,支持RIP,RIPNG,OSPFv2,OSPFv3,BGP等路由協議[1]。

2.2 OSPF

OSPF(Open Shortest Path First開放式最短路徑優先)是一個內部網關協議(Interior Gateway Protocol,簡稱IGP),用於在單一自治系統(autonomous system,AS)內決策路由。
OSPF相關概念比較多,以下挑幾個重要知識點進行說明。
LSA(Link-State Advertisement是鏈接狀態協議使用的一個分組,它包括有關鄰居和通道成本的信息。 LSAs被路由器接收用於維護它們的路由選擇表。
OSPF從報文的結構上劃分,可以分爲以下幾種[2]:
  1. Hello報文(Hello Packet):週期性地發送,用於維護鄰居關係以及DR/BDR選舉;
  2. DD報文(Database Description Packet):用於兩臺路由器進行數據庫同步,包含自己的LSDB(LSA集合)信息;
  3. LSR報文(Link State Request Packet):在交換DD報文後續,使用該報文向對方請求所需的LSA信息;
  4. LSU報文(Link State Update Packet):向對方發送所需的LSA信息集合。
  5. LSAck報文(Link State Acknowledgment Packet):用於對LSU報文進行確認。

另一個重要的知識點就是鄰居建立過程,如下圖所示:
對於圖上的7種狀態進行說明:
  1. Down:在Down狀態下,OSPF進程還沒有與任何鄰居交換信息。OSPF在等待進入Init狀態;
  2. Init:OSPF路由器以固定的時間間隔(缺省10s)發送Hello分組,以便與鄰居路由器建立特殊的關係;
  3. Two-Way:每臺OSPF路由器都使用分組試圖與同一個IP網絡中的所有鄰居路由器建立雙向狀態或雙向通信。Hello分組中含有發送者已知的OSPF鄰居列表。當路由器看到它自己出現在一個鄰居路由器的Hello分組中時,它就進入了雙向狀態;
  4. ExStart:當路由器與它的鄰居進入到ExStart狀態後,他們之間的會話就表徵爲一種毗鄰關係,但這時路由器還沒有變成全毗鄰狀態。ExStart狀態是使用DD(數據庫描述)分組建立的,兩個路由器用Hello分組協商出“主從關係”;
  5. Exchange:在交換狀態下,鄰居路由器使用類型2的DD分組來互相發送它們的鏈路狀態信息,也就是說路由器相互描述它們的鏈路狀態數據庫。路由器將它們所學到的信息與其現存的鏈路狀態數據庫進行比較,並且單獨確認每個DD分組,如果任何一臺路由器接收到不在其數據庫中的鏈路信息,該路由器就向其鄰居請求有關該鏈路的完整更新信息。完整的路由信息在“Loading”狀態下被交換;
  6. Loading:在相互描述過各自的鏈路狀態數據庫之後,路由器可以用LSR(鏈路狀態請求)分組來請求更完整的信息。當路由器接收到一個LSR的時候,它會用一個LSU(鏈路狀態更新)分組進行迴應。這些LSU分組含有確切的LSA,而LSA是鏈路狀態型路由選擇協議的核心,LSU分組由LSAck分組所確認;
  7. Full Adjacency:加載狀態結束之後,路由器就進入全毗鄰狀態。每臺路由器都保存着一張毗鄰路由器列表,它就是稱爲毗鄰數據庫。

三、配置過程

配置的拓撲如下,使用兩個CentOS 分別模擬 Rt170、Rt171:


3.1 Quagga安裝

CentOS下可以直接使用yum install quagga進行安裝,也可以源碼安裝,但是要注意第三方庫的依賴。
安裝完成後,需要在 /etc/quagga 把 zebra.conf、vtysh.conf、ospfd.conf 拷貝出來。
啓動命令使用 service zebra start、service ospfd start進行啓動,若對端收不到報文,可能還需要關閉防火牆 iptables。

3.2 OSPF配置

進入vtysh進行初始配置,設置日誌文件 /var/log/quagga/quagga.log
配置接口 分別對應拓撲


設置OSPF ,router ospf、route-id、network 192.168.50.0/24 area 0

配置成功後,查看鄰居信息,可以看見狀態分別從 init -> two-way ->... full 進行切換,最終可以看出主從關係

查看路由表,發現可以學習到各自對端的路由表信息

同時,使用 Wireshark 抓包,可以驗證報文交換的過程


參考文章:
[1] Quagga安裝 http://os.51cto.com/art/201410/453623.html
[2] OSPF報文格式 鴻鵠論壇
[3] OSPF鄰居關係建立過程詳解 http://blog.sina.com.cn/s/blog_77f868250101jbcb.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章