動態(tài)、健壯的路由對于 Internet 網(wǎng)絡來說極其重要,因此任何一個初涉此領域的網(wǎng)絡工程師不僅需要理解路由的概念,而且要有能力在真正的環(huán)境下駕馭它。但是,路由領域由高端網(wǎng)絡設備供應商(比如 Cisco)提供的產(chǎn)品一統(tǒng)天下,這就意味著對于大多數(shù)人來說,只能在學校或者實驗室環(huán)境中才能學習路由,而且還要一直受到實踐時間和實踐條件的困擾。
我們在組織一門關于 TCP/IP 路由的課程時就遇到了這樣的困難。在一個小型的測試環(huán)境下,我們想演示在使用路由信息協(xié)議(RIP)和開放式最短路徑優(yōu)先協(xié)議(OSPF)時各種不同的負載平衡情形。但是,我們手頭上的 Cisco 路由器數(shù)量有限。不過我們有一些 PC 機可以使用,于是我們開始想辦法用 Linux 來仿真 Cisco 路由器以解決這個問題。
開始時我們嘗試使用傳統(tǒng)的路由和網(wǎng)關守護進程來構建我們的測試網(wǎng)絡,但我們很快就發(fā)現(xiàn)對它們進行配置比較困難,而且它們的能力有限,我們的工作得不償失。于是我們決定嘗試使用更先進的方法來完成我們的測試網(wǎng)絡,很幸運,我們找到了 Zebra。
Zebra 是一個 TPC/IP 路由軟件,支持 BGP-4、BGP-4+、OSPFv2、OSPFv3、RIPv1、RIPv2 和 RIPng。它的發(fā)行遵循 GNU 通用公共許可協(xié)議,可以運行于 Linux 以及其他一些 Unix 變體操作系統(tǒng)上。Zebra 是那些系統(tǒng)最新的發(fā)行版本中的路由軟件。最新版本的 Zebra 以及文檔可以從 GNU Zebra 網(wǎng)站上下載(參閱 參考資料 中的鏈接)。
最初的 Zebra 軟件包由 Kunihiro Ishiguro 和 Yoshinari Yoshikawa 于1996年完成。現(xiàn)在,這個軟件包主要由 IP Infusion――CTO 是 Ishiguro 先生――在多名網(wǎng)絡工程師以及開源志愿者的幫助下來維持。
Zebra 的設計獨特,采用模塊的方法來管理協(xié)議。可以根據(jù)網(wǎng)絡需要啟用或者禁用協(xié)議。
Zebra 最為實用的一點是它的配置形式同 Cisco IOS 極其類似。盡管它的配置與 IOS 相比還是有一些不同,但是這對于那些已經(jīng)熟悉 IOS 的網(wǎng)絡工程師來說在這種環(huán)境下工作將相當自如。
雖然 Zebra 的版本還沒有到 1.0――作者完成本文時版本到了 0.93b――但這個產(chǎn)品對于需要核心路由器的小型網(wǎng)絡來說已經(jīng)足夠了。 [請注意本文中所用到的是版本 0.93b,新的版本的安裝與配置可能會有所差異。-編輯注]
![]() ![]() |
![]() |
我們的 Zebra 測試平臺是一臺舊的但是依然很好用的 ThinkPad X20,其運行的是 Red Hat Linux 9。ThinkPad 有一個內置的以太網(wǎng)接口,我們又給它加了一塊 PCMCIA 以太網(wǎng)卡,使之可以完成路由器的功能。在安裝 Zebra 之前,我們確認兩塊網(wǎng)卡都已經(jīng)被 Linux 認出并且正常工作。
在 Red Hat 9 中已經(jīng)附帶了 Zebra-0.93b 的 RPM 安裝包。這個版本與 Zebra 網(wǎng)站上提供的版本相同,因此我們決定直接使用它,而不再去從網(wǎng)上下載并自己編譯。Zebra RPM 將安裝二進制文件、腳本和配置文件,以及必需的手冊、例子和文檔文件。
zebra 守護進程是實際的路由管理者,控制著其他模塊;而且用戶主要通過它進行交互。我們最先需要配置 Zebra 守護進程,對應的配置文件是 /etc/zebra/zebra.conf。
Zebra RPM 包中有一個完整的配置文件樣例。不過,就最簡化的情形來說,我們實際上只需要創(chuàng)建一個包含以下幾行的 /etc/zebra/zebra.conf 文件:
清單 1.一個最簡的 Zebra 配置文件
|
hostname 指定了當您進入交互式配置方式時的路由器名。它可以是任何一個標識,不一定要和機器的主機名相同。
password 指定了登錄進入交互式 Zebra 終端時需要的密碼。
enable password 指定了當您想要改變配置時以較高級別身份訪問 Zebra 所需要的密碼。
創(chuàng)建了 /etc/zebra/zebra.conf 文件以后,我們現(xiàn)在可以執(zhí)行下面的命令來啟動 zebra 守護進程:
# service zebra start
現(xiàn)在通過 telnet 到我們的機器的 2601 端口就可以進入 Zebra 交互式會話。
清單 2. 一個 Zebra 會話樣例
|
在交互式終端中操作很簡單。要獲得可用命令的提示,您可以在任何時刻按 ?鍵,然后命令的選項就會出現(xiàn)在屏幕上。如果您正在構建您自己的 Zebra 路由器,而且您有配置 Cisco 路由器的經(jīng)驗的話,您會覺得這個配置過程非常熟悉。
到現(xiàn)在為止,還只有 Zebra 被配置好并且運行起來了,但是還沒有任何其他的協(xié)議。接下來將開始配置的實質內容,我們將向您介紹我們的這一過程。
Multi-Router Looking Glass,簡稱 MRLG,由 EnterZone 的 John Frazier 開發(fā),是一個基于 Web 的工具,可以用來顯示 Zebra 識別出來的接口和路由。MRLG 其實僅僅是 Zebra shell 的一個 Web 界面,只能使用有限的命令集,但是在我們的測試過程中,我們發(fā)現(xiàn)使用它是顯示路由的一個快速而有效的途徑。所以,在開始配置 Zebra 協(xié)議之前,我們先向您介紹如何安裝 MRLG。
MRLG 需要 Net::Telnet Perl 軟件包的支持才能與 Zebra shell 通信。不過,這個軟件包沒有包含在常規(guī)的 Red Hat 9 發(fā)行版本中,所以我們只好自己去下載它(參閱 參考資料 中的鏈接)。
由于 MRLG 是作為一個 CGI 應用程序來運行,因此我們還需要安裝一個 Web 服務器。如果您是自己在嘗試這些事情,您可以直接使用 Red Hat 9 自帶的 httpd RPM。
我們將 /usr/share/doc/zebra-0.93b/tools 目錄中的 mrlg.cgi 文件拷貝到 /var/www/cgi-gin 目錄下。然后,我們修改 mrlg.cgi 文件的第36行,將
$url="http://www.sample.com/mrlg.cgi";
修改為:
$url="http://127.0.0.1/cgi-bin/mrlg.cgi";
我們還修改了第168行到第174行的部分內容,如下所示:
if ($Form{'router'} eq 'router1') { $server = '127.0.0.1'; $login_pass = 'zebra'; $bgpd = "2605"; $zebra = "2601"; $full_tables=1;
為了訪問 MRLG,將瀏覽器定向到 http://127.0.0.1/cgi-bin/mrlg.cgi。
圖 1. Multi-Router Looking Glass
![]() ![]() |
![]() |
我們的實驗室配置包括兩個 Cisco 3620 路由器和一個 ThinkPad X20(有一個內置的以太網(wǎng)接口和一個 Home-and-Away PCMCIA 以太網(wǎng)卡)。兩個路由器通過串行線聯(lián)接起來,并且每個路由器通過以太網(wǎng)連接到 ThinkPad。見我們的連接圖:
圖 2. 實驗室連接圖
我們首先從 RIP 協(xié)議開始講述使用 Zebra 來管理路由。如前所述,我們已經(jīng)在 ThinkPad 上安裝了 Zebra。由于我們在 ThinkPad 上還需要另一個網(wǎng)絡接口,我們安裝了一個虛擬的網(wǎng)絡設備,如下:
|
我們 telnet 到 Zebra 端口來開始配置。我們按照以下順序與 Zebra 會話:
清單 3. 配置 IP 接口
|
要注意的是我們沒有用常規(guī)的方法設置 ThinkPad 的 IP 地址;而是通過 Zebra 來設置它們。這些設置保存在 /etc/zebra/zebra.conf 配置文件中,因此每次當 Zebra 服務啟動時,這些設置就會生效。
Zebra.conf 文件中由 Zebra 修改的部分如下:
清單 4. 由 Zebra 修改過的 /etc/zebra/zebra.conf 文件
|
我們還可以用 MRLG 來檢查接口的狀態(tài),方法是:選擇默認值,"router1",選中單選按鈕 "show interface",然后點擊 "Execute"。
![]() ![]() |
我們已經(jīng)在 ThinkPad/router 上安裝配置了網(wǎng)絡接口,接下來我們再對它進行配置,使之可以與 RIP 更新協(xié)同工作。正如我們已經(jīng)提到過的,Zebra 使用單獨的守護進程來實現(xiàn)路由協(xié)議,所以我們必須首先為 RIP 守護進程在/etc/zebra 目錄下創(chuàng)建一個簡單的配置文件ripd.conf。
清單 5. 一個基本的 /etc/zebra/ripd.conf 文件
|
然后我們啟動 ripd 守護進程
:
# service ripd start
完成后,我們可以 telnet 到我們的 Zebra 路由器的 2602 端口來配置 RIP 守護進程。
|
生成的 ripd.conf 配置文件如下所示:
清單 7. 生成的 /etc/zebra/ripd.conf 文件
|
我們將兩個 Cisco 路由器稱為 "A" 和 "B",為了簡化這兩個路由器的配置,我們只配置了一些讓路由器能正常運行的基本設置,包括設置接口的 IP 地址、環(huán)回地址,以及用于串口通信的串口時鐘頻率。
清單 8. 配置路由器 A
|
類似地,我們配置好路由器 "B"。
清單 9. 配置路由器 B
|
在 3620 路由器上配置 RIP 與 Zebra 中的命令極其類似。我們通過控制臺線纜訪問兩臺3620,執(zhí)行如下命令:
清單 10. 在路由器 A 上完成 RIP 所需的配置
|
然后是路由器 B:
清單 11. 在路由器 B 上完成 RIP 所需的配置
|
router rip 命令啟動配置 RIP 的過程。network 命令告訴路由器哪些是 RIP 要傳播的網(wǎng)段。
現(xiàn)在 Cisco 路由器和 Zebra 都已經(jīng)配置好,我們接下來檢驗傳播的路由。在 MRLG 中,我們選擇 "show ip route" 然后點擊 "Execute"。生成如下報告:
清單 12. Zebra 反映的 RIP 路由
|
通過 RIP 得到的路由用一個 R 來標記。
要注意的是,通過路由器 A 和路由器 B 的廣播,Zebra 現(xiàn)在知道了 10.0.0.0/24 和 10.0.1.0/24 兩個網(wǎng)段。測試時,我們從 ThinkPad Zebra 路由器上 ping 10.0.0.1 和 10.0.1.1,并從兩個路由器上 ping 10.0.2.1(ThinkPad 的虛擬網(wǎng)絡接口)。
為了測試路由的 failover,我們把連接網(wǎng)段 10.0.0.0/24 的路由器 A 上的網(wǎng)絡連接斷開。經(jīng)過總計約兩分鐘的過期時間以后,Zebra 得到了另一個可達 10.0.0.0/24 的路由,這個新的路由是通過路由器 B 得到的。注意在下面的清單中,Zebra 通過 192.168.1.2 到達 10.0.0.0/24,而不是先前的路徑。
清單 13. Zebra 反映的 RIP 路由
|
為什么總的過期時間大于兩分鐘?RIP 默認的過期時間是 30 秒,但是 RIP 協(xié)議指定了在確認一個路由已經(jīng)失效之前要進行 3 次重試(共 90 秒),并且還要有一段時間來清空無效的路由(還需要 240 秒)。眾所周知,RIP 協(xié)議對連接失敗反應遲鈍,這一點在這里得到了明確的論證。
這里是在 failover 發(fā)生之前路由器 A 的路由表的輸出。
清單 14. Failover 之前路由器 A 的路由表
|
failover 之后:
清單 15. Failover 之后路由器 A 的路由表
|
![]() ![]() |
![]() |
完成 RIP 的配置后,我們開始配置 OSPF 路由。盡管 OSPF 和 RIP 可以同時使用,不過為了配置的簡化,我們現(xiàn)在只使用 OSPF。我們只需要把 ripd 服務停掉,就可以在 Zebra 中將 RIP 禁用。
# service ripd stop
和前面一樣,我們從 OSPF 的一個基本的配置文件開始,這次是 ospfd.conf,文件所在目錄仍是 /etc/zebra。
清單 16. 一個基本的 /etc/zebra/ospfd.conf 文件
|
然后,我們啟動 OSPF 服務:
# service ospfd start
對 OSPF 的配置比 RIP 簡單:基本上我們僅僅需要告訴 OSPF 去廣播所有它知道的路由。
配置 OSPF 的端口是 2604。
下面是我們配置 OSPF 的會話。
清單 17. OSPF 配置會話
|
ospfd.conf 配置文件的修改結果如下:
清單 18. Zebra 修改后的 /etc/zebra/ospfd.conf 文件
|
我們用以下命令來移除 RIP 協(xié)議并添加 OSPF 協(xié)議:
清單 19. 移除 RIP 協(xié)議,添加 OSPF 協(xié)議
|
我們在路由器 A 和路由器 B 上執(zhí)行同樣的步驟。
我們的 MRLG 報告是這樣的:
清單 20. Zebra 反映的 OSPF 路由
|
請注意 10.0.0.1/32 和到 10.0.1.1/32 的路由被標記為 O,說明這些路由是通過 OSPF 得到的。
當我們把從 Zebra 路由器到路由器 A 的連接斷開時,路由自動更新。MRLG 生成的報告如下:
清單 21. Failover 之后 Zebra 反映的 OSPF 路由
|
由于 OSPF 是基于鏈路狀態(tài)的,所以 failover 速度快得多:新的路由在 30 秒內就可以傳播完成。
![]() ![]() |
我們的出發(fā)點是一個簡單的需求,那就是我們的網(wǎng)絡課程受設備條件所限,需要尋找一個 Cisco 路由器的替代品。Zebra 是一個明智的選擇,它在網(wǎng)絡上得到了諸多的好評。正如前面我們的實驗所示,Zebra 在簡單網(wǎng)絡環(huán)境中完全可以取代 Cisco 路由器,可能也能用于一些更復雜的情形。
無可否認,要轉而使用 Zebra 需要一定程度的學習。使用單獨的守護進程及單獨的配置文件在剛開始時令人費解,但是當我們把這些理順了以后,感覺它幾乎和 Cisco IOS 沒什么區(qū)別。
總的來說,Zebra 使得在 Linux 上實現(xiàn)動態(tài)路由成為一項簡單的任務。如果您需要盡快構建一個路由器,而您的預算卻有限,不妨試試 Zebra。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
