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

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