Linux下使用Quagga(Zebra)搭建路由器記錄


預習知識

在進行路由器的搭建之前,需要了解一些基本的知識。下面將會一一道來。

 

1、什么是路由表,路由表產生的類型有哪些?

答:路由表,指的是路由器或者其他互聯網網絡設備上存儲的表,該表中存有到達特定網絡終端的路徑,在某些情況下,還有一些與這些路徑相關的度量。

在Linux系統下的路由表是從有小網絡排列到大網絡的。我們可以使用route -n 查看主機上的路由表。參見下面的截圖:
 
 
路由表的產生類型:
靜態路由表:
由系統管理員事先設置好固定的路由表稱之為靜態(static)路由表,一般是在系統安裝時就根據網絡的配置情況預先設定的,它不會隨未來網絡結構的改變而改變。
 
動態路由表:
動態(Dynamic)路由表是路由器根據網絡系統的運行情況而自動調整的路由表。路由器根據路由選擇協議(Routing Protocol)提供的功能,自動學習和記憶網絡運行情況,在需要時自動計算數據傳輸的最佳路徑。
路由器通常依靠所建立及維護的路由表來決定如何轉發。 
 
2、什么是路由器?  
答:在局域網中,主機可以通過廣播的方式來進行網絡數據包的發送,但是在不同的網段類的主機想要互相連接時就必須通過路由器來實現。

路由器(Router)又稱網關設備(Gateway)是用於連接多個邏輯上分開的網絡,所謂邏輯網絡是代表一個單獨的網絡或者一個子網。當數據從一個子網傳輸到另一個子網時,可通過路由器的路由功能來完成。因此,路由器具有判斷網絡地址和選擇IP路徑的功能,它能在多網絡互聯環境中,建立靈活的連接,可用完全不同的數據分組和介質訪問方法連接各種子網,路由器只接受源站或其他路由器的信息,屬網絡層的一種互聯設備。

在Linux系統中,路由表和轉發數據包的功能都是Linux內核所提供。在我們的Ubuntu14.04系統中,默認情況下是沒有開啟數據包轉發功能的。需要開啟的方法主要有兩種:

第一種方法是:echo 1 > /proc/sys/net/ipv4/ip_forward,但是這樣的修改在系統重啟后失效了。

第二種方法是:編輯/etc/sysctl.conf文件,找到net.ipv4.ip_forward=1這一行,然后將前面的#號去除即可。這樣就可以一勞永逸了。具體的方法參見下面的截圖:

 

3、什么是網卡?在Linux系統下,網卡信息如何查看?   

 

答:網卡是工作在鏈路層的網絡組建,是教育網中連接計算機和傳輸介質的接口,不僅能實現與局域網傳輸介質之間的物理連接和電信號匹配,還涉及到幀的發送和接收、幀的封裝與拆封、介質訪問控制、數據的編碼與解碼以及數據緩存的功能等。

那么,我們在Linux系統如何查看網卡信息呢?很簡單使用ifconfig命令即可。eth表示的是以太網卡,參見下面的截圖。可以看到,我的電腦上一塊以太網卡eth0,可以看到它的硬件地址、ip地址等各種信息。

 

4、什么是IP地址,網段,網關,子網掩碼?在Linux系統下,我們應該如何查看和修改這些參數呢?   

 

答:

IP地址:IP地址(英語:Internet Protocol Address)是一種在Internet上的給主機編址的方式,也稱為網際協議地址。常見的IP地址,分為IPv4與IPv6兩大類。IP地址編址方案將IP地址空間划分為A、B、C、D、E五類,其中A、B、C是基本類,D、E類作為多播和保留使用。

網段:網段一般指一個計算機網絡中使用同一物理層設備(傳輸介質,中繼器,集線器等)直接通訊的那一部分。即IP地址范圍從一個到另外一個,如,192.168.1.1192.168.1.254。網關:網關(Gateway)又稱網間連接器、協議轉換器。默認網關在網絡層上以實現網絡互連,是最復雜的網絡互連設備,僅用於兩個高層協議不同的網絡互連。網關的結構也和路由器類似,不同的是互連層。網關既可以用於廣域網互連,也可以用於局域網互連。當今很多局域網采用都是路由來接入網絡的,因此通常指的網關就是路由器的IP。

子網掩碼:子網掩碼(subnet mask)又叫網絡掩碼、地址掩碼、子網絡遮罩,它是一種用來指明一個IP地址的哪些位標識的是主機所在的子網以及哪些位標識的是主機的位掩碼。子網掩碼不能單獨存在,它必須結合IP地址一起使用。子網掩碼只有一個作用,就是將某個IP地址划分成網絡地址和主機地址兩部分。

在Linux下面,我們可以通過ifconfig命令來查看網卡的IP地址,子網掩碼等信息。參見問題3的截圖。可以通過route -n命令或者netstat -r命令等來查看網關信息,參加問題1的截圖。

通常有兩種方法來修改諸如IP地址,子網掩碼之類的信息。一種方式是通過命令行的方式,即使用命令ifconfig, ip route add等命令(詳細使用這些命令的方法可以通過man或者help命令來查看)來進行修改,但是通過命令行的方式來修改並不是一勞永逸的,它們會在系統重啟后恢復原來的狀態。所以,另外一種方法便是直接修改配置文件的方法了。關於配置文件,Ubuntu主要是通過修改/etc/network/interfaces文件來實現。后面的實驗會給出修改的方法。

5、什么是RIP協議?RIPV1和RIPV2協議之間有什么關系?

 

答:在后面的動態路由搭建的實驗中,將會使用到這種古老但又簡單的路由協議。所以,我們應當提前了解下這個協議的基本知識。
 
RIP協議是一種內部網關協議(IGP),是一種動態路由選擇協議,用於自治系統(AS)內的路由信息的傳遞。RIP協議基於距離矢量算法(DistanceVectorAlgorithms),使用“跳數”(即metric)來衡量到達目標地址的路由距離。這種協議的路由器只關心自己周圍的世界,只與自己相鄰的路由器交換信息,范圍限制在15跳(15度)之內。超過15跳后自然就無法到達了。
 
RIP協議在當前有兩個版本,分別是RIPV1協議以及后來更新的RIPV2協議。
 
RIP-1是有類別路由協議(Classful Routing Protocol),它只支持以廣播方式發布協議報文。這個協議報文無法攜帶掩碼信息,它只能識別A、B、C類這樣的自然網段的路由,因此RIP-1不支持非連續子網(Discontiguous Subnet)。
 
RIP-2是一種無類別路由協議(Classless Routing Protocol)。相對與它的前身,擁有更多的優勢,比如支持路由標記,在路由策略中可根據路由標記對路由進行靈活的控制等特點。
 
由於zebra本身是支持RIP協議的兩個版本的,所以可以很輕松地搭建出一個路由器。后面的實驗中將使用RIPV2這個協議。Quagga貌似默認就是使用RIPV2協議,而zebra應當需要指定一下。
 
6、什么是OSPF協議?有什么優點?

答:簡要地來說,OSPF(Open Shortest Path First開放式最短路徑優先)是一個內部網關協議(Interior Gateway Protocol,簡稱IGP),用於在單一自治系統(autonomous system,AS)內決策路由。是對鏈路狀態路由協議的一種實現,隸屬內部網關協議(IGP),故運作於自治系統內部。著名的迪克斯加算法被用來計算最短路徑樹。與RIP相比,OSPF是鏈路狀態協議,而RIP是距離矢量協議。

它有很多優點,比如:
 
1、OSPF是真正的LOOP- FREE(無路由自環)路由協議。源自其算法本身的優點。(鏈路狀態及最短路徑樹算法)
2、OSPF收斂速度快:能夠在最短的時間內將路由變化傳遞到整個自治系統。
3、提出區域(area)划分的概念,將自治系統划分為不同區域后,通過區域之間的對路由信息的摘要,大大減少了需傳遞的路由信息數量。也使得路由信息不會隨網絡規模的擴大而急劇膨脹。
4、將協議自身的開銷控制到最小。
5、通過嚴格划分路由的級別(共分四極),提供更可信的路由選擇。
6、良好的安全性,ospf支持基於接口的明文及md5 驗證。
7、OSPF適應各種規模的網絡,最多可達數千台。
 
7、什么是BGP協議?有什么主要特征?

答:BGP協議即邊界網關協議,而上面的兩種協議——RIP協議和OSPF協議則屬於內部網關協議。

邊界網關協議(BGP)是運行於 TCP 上的一種自治系統的路由協議。 BGP 是唯一一個用來處理像因特網大小的網絡的協議,也是唯一能夠妥善處理好不相關路由域間的多路連接的協議。 BGP 構建在 EGP 的經驗之上。 BGP 系統的主要功能是和其他的 BGP 系統交換網絡可達信息。網絡可達信息包括列出的自治系統(AS)的信息。這些信息有效地構造了 AS 互聯的拓朴圖並由此清除了路由環路,同時在 AS 級別上可實施策略決策。

BGP路由選擇協議執行中使用4種分組:打開分組(open)、更新分組(update)、存活分組(keepalive)、通告分組(notification)。

BGP的主要特征有:
1、用屬性(Attribute)描述路徑,而不是用度量值;
2、使用TCP(端口179)作為傳輸協議,繼承了TCP的可靠性和面向連接的特性;
3、通過Keepalive信息來檢驗TCP的連接;
4、具有豐富的屬性特征,方便實現基於策略的路由;
5、擁有自己的BGP表;
6、支持VLSM和CIDR;
7、適合在大型網絡中使用。
 

靜態路由的路由器搭建方法

准備工作

1、在虛擬機(我用的是Virtual Box,若干次測試表明,在Ubuntu上使用這個虛擬機軟件比較流暢)上安裝上一個Linux系統,比如我用的Ubuntu 14.04桌面版。然后配置好系統,安裝上zebra/quagga軟件。

    

2、連續復制得到另外三個相同的虛擬。

3、配置這幾個系統。考慮到我們實際使用中需要開啟四個虛擬機系統,所以肯定會很卡頓。所以,我的做法是,把X-Window給關閉,即讓系統開機后直接進入tty1。這樣做的好處是,可以明顯減少物理內存的占用,即使開啟4個也沒有卡頓的現象。當然,前提是要熟悉基本的Linux操作。設置方法如下:修改/etc/default/grub文件如下:

    

保存配置后,在終端中輸入sudo update-grub2,重啟后即可生效。最終的效果如下:

    

實驗內容

下面我將借助於上面的四個虛擬機系統模擬構建出下面的一個網絡。
    
一般網絡:由Linux Router A,工作站和Linux Router B構成。
保護網絡:由Linux Router B和客戶端Linux所組成。

在開始實驗之前,我們先來確定下各個設備的配置信息,然后在下面配置時回到這兒參照配置系統網卡:

 

Linux Router A Linux Router B 工作站 客戶端
1、兩張網卡eth0, eth1,通過橋接方式連接。
2、Eth0(內網),IP設置為:192.168.1.254/24。
3、Eth1(外網),IP可不設定。
1、兩張網卡eth0, eth1, 通過橋接方式連接。
2、Eth0(外), IP設置為:192.168.1.100/24
3、Eth1(內),IP設置為:192.168.100.254/24
4、默認網關:192.168.1.254
1、一張網卡eth0,通過橋接方式連接。
2、Eth0,IP設置為:192.168.1.102/24
3、默認網關:192.168.1.254
1、一張網卡eth0,通過橋接方式連接。
2、Eh0, IP設置為192.168.100.12/24
3、默認網關:192.168.100.254

開始實驗

依次啟動四個虛擬機,同時登陸到系統中。接下來,切換到root模式。開始進行系統的配置。
 
1、配置Linux Router A
 
Step 1: 修改網卡0的IP地址,子網掩碼等信息。終端輸入命令: sudo vi /etc/network/interfaces,然后添加內容后如下:
    
 
Step 2: 保存上述配置。
 
Step 3:啟用IP傳遞。具體修改方法參見上面的預習知識中的問題二。若已經修改成功后,則重啟一次系統。接下來重啟一次系統。此時,Linux Router A基本配置完畢了。
 
2、配置Linux Router B:
 
Step 1: 配置網卡0和網卡1:sudo vi /etc/network/interfaces,然后在后面添加內容如下:
    
Step 2:保存修改后的配置。
Step 3:啟用IP傳遞。具體修改方法參見上面的預習知識中的問題二。若已經修改成功后,則重啟一次系統。
Step 4:使用ifconfig查看修改有沒有成功,參見下面的截圖:
    
Step 5: 查看一下路由表是否正確,終端輸入route -n,得到如下結果,重點第一行的內容確定配置無誤:
    
Step 6: ping下路由器A,看看是否能ping通。如果可以,表示路由器A和路由器B配置基本成了。見下圖:
    
3、配置客戶端Linux:
 
Step 1: 修改網卡0配置:sudo vim /etc/network/interfaces. 添加內容后如下:
 
    
Step 2:保存配置后重啟一下系統。
Step 3:查看一下路由表,route -n,並且嘗試ping 一下自己的網關和外部網關,如果成功,則表明客戶端也基本配置完了。截圖如下:
   
 
4、配置工作站(Workstation):
Step 1:同樣,修改網絡配置文件如下:
 
    
 
Step 2:保存配置,並重啟一次系統,查看一下路由規則是否如下所示:
 
 

測試這個網絡

當按照上面的步驟以此配置完成后,此時就可以進行測試了。其實主要就是測試下客戶端(在內部網絡中)和工作站(Workstation,在外部網絡中)之間能否相互ping通,如果可以的的話,說明我們的系統搭建成功了。測試分別如下:

測試1:在客戶端中ping工作站的IP地址:
  
 
測試2:在工作站中ping客戶端的IP地址:  
    

結束語

通過上面的實驗可以發現,在Linux下面做個靜態的路由很簡單。只需要將網絡IP與網絡接口對應啟動好即可,然后加上IP Forward的功能,讓Linux內核支持數據包傳遞,接下來其他的工作就交給Linux的內核來解決了。
 

動態路由的路由器搭建方法——使用RIP協議

前面在搭建靜態的路由器時,並沒有使用到zebra/quagga這個軟件。因為系統自帶的工具已經足夠配置了。但是當需要架設一個動態路由器的時候,還是借助於zebra/quagga軟件比較方便。
 
動態路由通常用在路由器和路由器之間的溝通,所以想要讓路由器具有動態的功能,必須了解到對方路由器上面所提供的動態路由協議才可以,這樣兩台路由器才能夠通過該協議來溝通彼此的路由規則。下面的實驗將基於較為簡單的RIPV2協議來實現。不論啟動什么樣的路由協議,都必須要先啟動zebra才可以。主要原因如下:
zebra這個daemon的功能是更新內核的路由規則;
rip這個daemon則是用於向附近的其他路由器溝通協調路由規則的傳送與否。
 

准備工作

准備四個不同的虛擬機系統,具體見上面的靜態路由器搭建的准備工作。

實驗內容

本次實驗的網絡連接如下圖所示,其中共有三個局域網的網段,其中最大的是192.168.1.0/24這個外部局域網,另外有兩個內部局域網,分別是192.168.100.0/24和192.168.200.0/24。
在開始實驗之前,還是需要敲定一下各個虛擬機的配置信息:
Router A:
1、兩張網卡,通過橋接方式連接
2、IP1:192.168.1.200/24
3、IP2:192.168.200.254/24
4、默認網關:192.168.1.254
 
Router B:
1、兩張網卡,通過橋接方式連接
2、IP1:192.168.1.100/24
3、IP2:192.168.100.254/24
4、默認網關:192.168.1.254
 
Client A:
1、一張網卡,通過橋接的方式連接
2、IP:192.168.200.10/24
 
Client B:
1、一張網卡,通過橋接的方式連接
2、IP:192.168.100.10/24
 

開始實驗

在開始實驗之前,先依次啟動四個虛擬機系統。
1、配置路由器A(Router A)
Step 1:修改網絡參數,具體修改方法參見實驗一。修改的配置文件內容如下:
 
Step 2:保存配置信息,並且重啟一次系統讓配置生效。
Step 3:配置路由器上的zebra。在Ubuntu下面,zebra的配置文件在目錄:/usr/local/etc/下。在終端中切換到上面的目錄中。
Step 4:新建一個zebra用的配置文件:sudo vi zebra.conf。然后在文本編輯器中填寫如下內容,包括名稱,密碼。然后保存這個配置文件。接下來運行命令:zebra -d來啟動zebra。
    
Step 5:運行命令:netstat -tnupl | grep zebra,可以看到zebra這個服務的主要任務就是要修改Linux系統內核內的路由,所以它僅僅就是監聽本機接口罷了,並不會監聽外部接口。
 
    
Step 6:登陸到端口2601中,可以在其中輸入?或者help來顯示幫助的命令提示。此外可以用show ip route 來顯示路由規則。具體見下圖。
      
上面的圖片就顯示了目前的接口和默認路由。顯示中的具體含義如下:
K:代表以類似route命令加入內核的路由規則,包括route-ethN所產生的規則。
C:代表由網絡接口所設置的IP而產生的相關的路由規則。
S:以zebra功能所設置的靜態路由信息。
R:就是通過RIP協議所增加的路由規則。
 
Step 7:設置並啟用ripd服務。ripd服務可以在兩台路由器之間進行路由規則的交換與溝通。具體設置方法如下:
接下來進行配置文件的填寫,內容如下:
   
Step 8:保存上述配置,並啟動ripd服務,輸入sudo ripd -d即可。這樣就完成了基本的RIP路由器的配置了。
 
2、配置路由器B(Router B)
 
由於路由器B的配置和路由器A配置基本步驟一致,在此就省略了。參見上面的配置方法。
網絡參數配置信息(/etc/network/interfaces):
    
zebra.conf配置信息:
    
ripd.conf的配置信息:
    
 
配置客戶端A(Client A)
 
客戶端的配置步驟在此不再贅述,在實驗一中已經詳細說明了。下面給出相關的配置信息。配置時要注意網關的填寫,不然可能會導致最后ping測試時不能通過。
 
網絡參數配置信息(/etc/network/interfaces):
    
 
配置客戶端B(Client B)
 
客戶端的配置步驟在此不再贅述,在實驗一中已經詳細說明了。下面給出相關的配置信息。
 
網絡參數配置信息(/etc/network/interfaces):
    

測試這個網絡

1、檢查RIP協議的溝通是否正常
 
以路由器1為例,在終端中輸入route -n查看有沒有新添加的路由規則,見下圖,看到倒數第二條顯示的就是增加的路由規則。
   
然后登陸到端口2601中進行查看,如果出現了下面R>* 的輸出就表明配置成功了。同樣也可以在路由器B中查看得到類似的結果。
 
此外,還可以觀察ripd的日志輸出來確認。日志輸出如下截圖所示。可以看到RECV packet之類的日志信息。
    
2、進行ping測試。
 
當沒有路由器A和路由器B之間的相互溝通,位於兩個不同的網段的客戶端A和客戶端B是不能進行通信的。也就是說在進行ping測試時,是無法通過的,但是有了路由器A和路由器B,兩個不同網段的路由器就可以進行正常通信了。接下來將給出ping測試的結果。
 
客戶端A上的測試:
1、ping路由器A的IP2地址
    
 
2、ping路由器A的IP1地址
 
 
3、ping路由器B的IP2地址
 
4、ping 路由器B的IP1地址
 
 
5、ping 客戶端B的IP地址
    
 
客戶端B上的測試:
 
1、ping路由器B的IP2地址
 
 
2、ping 路由器B的IP1地址   
 
 
3、ping 路由器A的IP2地址   
 
 
4、ping路由器A的IP1地址   
 
 
5、ping 客戶端A的IP地址   
    

結束語

上述的幾個測試結果表明,無論怎么ping,網絡總是通的。這也就表明,實驗取得了成功。可見使用zebra軟件的RIPv2協議,可以很輕松地將路由規則分享到附近局域網的其他路由器上面。比起單純地使用route來修改Linux內核路由表要輕松許多。
 

動態路由的路由器搭建方法——使用OSPF協議

上面已經成功演示了如何使用zebra/quagga工具配合ripd服務搭建路由器的簡要方法。接下來需要演示的就是zebra/quagga支持的另外一種路由協議——OSPF。關於OSPF協議的簡要介紹在預習知識中已經提到,不再贅述。下面的實驗將會演示基於這個路由協議的簡單使用方法。
 
為了方便起見,我仍然使用了上面的那個實驗(即“動態路由的路由器搭建方法——使用RIP協議”)的虛擬機系統。所以,實驗的內容就不再贅述,這里僅僅換成OSPF協議來實現。此外,關於實驗的前期准備工作也和上面的實驗相同,不再贅述。
 
最后,需要說明的是,由於ospf這個daemon在運行時需要從zebra程序中獲得接口信息,故zebra程序必須先於ospfd運行。ospfd不支持多個OSPF進程,不能指定OSPF進程號。下面開始實驗。
 

開始實驗

在開始實驗之前,需要確保四台虛擬機系統正常運行。如果ripd服務正在運行,需要將它關掉。
1、配置路由器A(Router A)
Step 1:配置網絡參數以及zebra.conf文件。這些參數和上面的那個實驗是相同的,在此不再贅述。配置完畢后在終端中運行zebra -d即可。如下圖:
 
 
Step 2:配置ospfd服務需要的配置文件,即ospfd.conf。首先切換到配置文件所在的目錄,使用vi編輯器創建一個新的文件ospfd.conf,並輸入相關的配置信息(第二個截圖)。
    
   
 
Step 3:保存上一步創建的配置文件,然后關閉vi編輯器。在終端中執行ospfd -d開啟服務。緊接着,查看端口2604有沒有成功開啟。同時,可以查看路由表(輸入sh ip ospf route),還有ospf接口設置(輸入sh ip ospf interface)。如下面的截圖所示。
    
    
 
Step 4:再到端口2601中查看一些關鍵信息。具體步驟如下圖所示。我們需要重點關注的是路由表顯示信息。可以看到在下面的截圖中,路由表信息中有O 192.168.1.0/24 is directly connected之類的字樣,那是由ospfd產生的。
    
 
Step 5:查看日志輸出,步驟見下面的截圖。通過日志的輸出,我們可以在配置路由器2之后,輕松判定兩個路由器之間的有沒有收到來自對方的hello數據包。在下面這個日志截圖中,我們可以看到,路由器每10s就會發送出去一個hello數據包。
好了,關於路由器A的配置到此結束了。
 
2、配置路由器B(Router B)
由於在配置路由器B時,操作的步驟基本同路由器A配置相同,只是在網段和IP地址等方面有稍許區別。所以不再贅述,詳細設置步驟參見路由器A的設置。非常容易。還要注意,在開啟ospfd之前,要保證zebra先運行。
 
下面給出一些重要的配置文件參數和其他重要信息的截圖。
1.    ospfd.conf文件內容:
 
 
2.    查看路由表,同樣,我們可以看到O 192.168.1.0/24 之類的兩行,它們是由ospfd服務產生的。   
 
 
3.    查看一下日志輸出,首先進入到tty2中,運行命令:tail -f /usr/local/etc/ospfd.log。截圖如下。仔細觀察日志輸出,我們可以看到,路由器B已經接收到來自路由器A(192.168.1.200)發送過來的hello數據包了。可見,我們已經成功了。
   
 
4.    接下來,進入端口2604中。輸入命令sh ip ospf neighbor,見下面的截圖。從截圖中,我們可以看到,路由器A的ID已經顯示出來了。可見,路由器A已經被當做為鄰居而被識別了。同樣的方法,我們可以在路由器A中可以看到路由器B的ID也在鄰居列表中。可見,二者相互識別了。
 
 
5.    輸入show ip ospf database,可以看到更為詳細的信息被輸出了。由此,我們可以進一步確認,兩個路由器成功地相互識別了。好了,大功告成。接下來我們將會進入測試階段。
 

測試這個網絡

又到了最后測試的環節了。還是和前面一樣,使用ping的方式進行測試。如果可以ping通,表明測試成功。兩個處於不同網段的客戶端可以正常通信了。下面給出詳細ping測試的截圖。

客戶端A上的ping測試:
1.    Ping路由器A上的IP1地址
 
 
2.    Ping 路由器A上的IP2地址
 
3.    Ping 路由器B上的IP1地址
 
4.    Ping 路由器B上的IP2地址
 
5.    Ping 客戶端B的IP地址
 
客戶端B上的ping測試   
由於測試方法和客戶端A的ping測試相同,為了節省篇幅,在此就省略了。

結束語

上面的ping測試結果表明,我們的路由器都已經成功工作了。兩個不同網段的客戶端也成功相互通信了。
 
使用OSPF路由協議搭建路由器的方法到此結束了。實驗也取得了成功。可以看到,實際操作起來非常簡單,和上一個實驗,即使用RIP協議搭建路由器,操作類似。可見,zebra/quagga中將不同的協議進行模塊化設計后,使用的時候就非常方便了,可以輕松地啟用一種協議,也可以關閉一個協議。非常方便使用。
 
查看了zebra的源碼后,發現別人寫的代碼非常規范,也很喜歡那樣的風格,正在學習。此外,還可以從代碼中學到別人是如何進行日志管理和輸出的。
 

動態路由的路由器搭建方法——使用BGP協議

在上面的兩個實驗中,已經演示了zebra/quagga軟件支持的兩種內部網關協議構建路由器的方法。使用起來也很簡單。接下來的實驗,我將會使用zebra/quagga支持的邊界網關協議——BGP協議,來構建兩台路由器進行測試。關於什么是BGP協議,在前面的預習知識中已經給出了簡要的介紹,在此不再贅述。下面的實驗將會演示使用zebra/quagga的BGP協議來構建動態路由的路由器的簡要方法。主要是掌握構建的基本方法,當然,也有更多的功能值得挖掘。
 
在開始實驗之前,我們依然要做一些准備工作。但為了方便,我們直接使用了第二個實驗(即“動態路由的路由器搭建方法——使用RIP協議”)框圖以及部分設置。要做的僅僅是改變路由器協議罷了。詳細的准備工作參見第二個實驗開始的部分。

開始實驗

在開始實驗之前,我們需要確定zebra已經在后台運行,可以使用命令:ps -ef | grep zebra進行查看,在此需要注意的是,zebra.conf的配置文件不要改動,我們繼續使用上面的實驗用的配置文件。
 
 
配置路由器A(Router A)   
Step 1:進入目錄/usr/local/etc下面,創建配置文件:bgpd.conf,或者也可以復制那個sample配置文件。接下來,在vi編輯器中編輯配置文件,我配置的內容如下:
 
 
Step 2 :保存上面的配置文件,同時在終端中輸入:bgpd -d來啟動bgpd服務。接下來,我們進入到端口2605中,來查看一些關於bgp的信息,詳細的操作見下面的截圖:
 
Step 3:和前面的實驗一樣,我們可以在另外一個終端標簽頁中打開日志的輸出,方便后面觀察,可以看到,此時它嘗試連接到鄰居是失敗的,因為我們還沒有配置路由器B,待完成后回來觀察即可看到差別。操作如下:
 
配置路由器B(Router B)   
考慮到路由器B和路由器A的配置過程基本相同,無非就是在配置文件方面有些差別,在此就不再重復步驟了,詳細步驟參見路由器A的配置。對了,在啟動bgpd之前,還是要記得先保證zebra這個daemon在運行中。好了,下面會給出一些重要的截圖:
1、bgpd.conf文件:
 
 
2、進入2605端口后查看有關bgp的信息:

測試這個網絡

 如果上面的步驟都是正確無誤,且保證zebra和bgpd這兩個daemon都在兩個路由器上正常運行的話,就可以進行下面的一些測試了。

路由器A或者B上的信息:
1、日志輸出:
根據輸出的日志可以判斷兩個路由器其實已經能夠相互識別了。
 
 
 
2、端口2601中的路由表信息:
可以看到,有一條路由規則:B>* 192.168.100.0/24這一行。這個便是bgpd產生的。
 
3、端口2605中的鄰居顯示:
下面的截圖中,可以很清楚的看到,路由器A已經識別到了鄰居192.168.1.100,即路由器B的eth0的IP地址。所以說,我們已經配置成功了。
 
客戶端上的ping測試:
由於ping測試方法與前幾個實驗是一樣的,下面僅給出截圖說明兩個不同網段的客戶端可以通信即可。
其中客戶端A的IP地址設置為:192.168.200.10/24,客戶端B為:192.168.100.10/24。
客戶端A使用ping命令測試客戶端B的IP地址:   
 

結束語

上面的測試結果表明,我們使用BGP協議搭建的路由器已經可以工作了。位於兩個不同網段的客戶端A和B之間也可以相互ping通,所以,整個實驗也就完成了。

上面的三個實驗分別使用了RIP協議、OSPF協議、BGP協議來搭建路由器。演示了使用zebra/quagga搭建路由器的基本方法。可以看到,其實總的來說並不是特別困難,同時,也可以看到zebra/quagga軟件卻是很強大!  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM