動態、健壯的路由對于 Internet 網絡來說極其重要,因此任何一個初涉此領域的網絡工程師不僅需要理解路由的概念,而且要有能力在真正的環境下駕馭它。但是,路由領域由高端網絡設備供應商(比如 Cisco)提供的產品一統天下,這就意味著對于大多數人來說,只能在學校或者實驗室環境中才能學習路由,而且還要一直受到實踐時間和實踐條件的困擾。
我們在組織一門關于 TCP/IP 路由的課程時就遇到了這樣的困難。在一個小型的測試環境下,我們想演示在使用路由信息協議(RIP)和開放式最短路徑優先協議(OSPF)時各種不同的負載平衡情形。但是,我們手頭上的 Cisco 路由器數量有限。不過我們有一些 PC 機可以使用,于是我們開始想辦法用 Linux 來仿真 Cisco 路由器以解決這個問題。
開始時我們嘗試使用傳統的路由和網關守護進程來構建我們的測試網絡,但我們很快就發現對它們進行配置比較困難,而且它們的能力有限,我們的工作得不償失。于是我們決定嘗試使用更先進的方法來完成我們的測試網絡,很幸運,我們找到了 Zebra。
什么是 Zebra?
Zebra 是一個 TPC/IP 路由軟件,支持 BGP-4、BGP-4+、OSPFv2、OSPFv3、RIPv1、RIPv2 和 RIPng。它的發行遵循 GNU 通用公共許可協議,可以運行于 Linux 以及其他一些 Unix 變體操作系統上。Zebra 是那些系統最新的發行版本中的路由軟件。最新版本的 Zebra 以及文檔可以從 GNU Zebra 網站上下載(參閱
參考資料
中的鏈接)。
最初的 Zebra 軟件包由 Kunihiro Ishiguro 和 Yoshinari Yoshikawa 于1996年完成。現在,這個軟件包主要由 IP Infusion――CTO 是 Ishiguro 先生――在多名網絡工程師以及開源志愿者的幫助下來維持。
Zebra 的設計獨特,采用模塊的方法來管理協議。可以根據網絡需要啟用或者禁用協議。
Zebra 最為實用的一點是它的配置形式同 Cisco IOS 極其類似。盡管它的配置與 IOS 相比還是有一些不同,但是這對于那些已經熟悉 IOS 的網絡工程師來說在這種環境下工作將相當自如。
雖然 Zebra 的版本還沒有到 1.0――作者完成本文時版本到了 0.93b――但這個產品對于需要核心路由器的小型網絡來說已經足夠了。
[請注意本文中所用到的是版本 0.93b,新的版本的安裝與配置可能會有所差異。-編輯注]
安裝 Zebra
我們的 Zebra 測試平臺是一臺舊的但是依然很好用的 ThinkPad X20,其運行的是 Red Hat Linux 9。ThinkPad 有一個內置的以太網接口,我們又給它加了一塊 PCMCIA 以太網卡,使之可以完成路由器的功能。在安裝 Zebra 之前,我們確認兩塊網卡都已經被 Linux 認出并且正常工作。
在 Red Hat 9 中已經附帶了 Zebra-0.93b 的 RPM 安裝包。這個版本與 Zebra 網站上提供的版本相同,因此我們決定直接使用它,而不再去從網上下載并自己編譯。Zebra RPM 將安裝二進制文件、腳本和配置文件,以及必需的手冊、例子和文檔文件。
Zebra 基本配置
zebra 守護進程是實際的路由管理者,控制著其他模塊;而且用戶主要通過它進行交互。我們最先需要配置 Zebra 守護進程,對應的配置文件是 /etc/zebra/zebra.conf。
Zebra RPM 包中有一個完整的配置文件樣例。不過,就最簡化的情形來說,我們實際上只需要創建一個包含以下幾行的 /etc/zebra/zebra.conf 文件:
清單 1.一個最簡的 Zebra 配置文件
hostname speedmetal
password zebra
enable password zebra
|
hostname 指定了當您進入交互式配置方式時的路由器名。它可以是任何一個標識,不一定要和機器的主機名相同。
password 指定了登錄進入交互式 Zebra 終端時需要的密碼。
enable password 指定了當您想要改變配置時以較高級別身份訪問 Zebra 所需要的密碼。
創建了 /etc/zebra/zebra.conf 文件以后,我們現在可以執行下面的命令來啟動 zebra 守護進程:
# service zebra start
現在通過 telnet 到我們的機器的 2601 端口就可以進入 Zebra 交互式會話。
清單 2. 一個 Zebra 會話樣例
[root@speedmetal zebra]# telnet 127.0.0.1 2601
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Hello, this is zebra (version 0.93b).
Copyright 1996-2002 Kunihiro Ishiguro.
User Access Verification
Password: zebra
speedmetal> enable
Password: zebra
speedmetal# ?
configure Configuration from vty interface
copy Copy configuration
debug Debugging functions (see also 'undebug')
disable Turn off privileged mode command
end End current mode and change to enable mode.
exit Exit current mode and down to previous mode
help Description of the interactive help system
list Print command list
no Negate a command or set its defaults
quit Exit current mode and down to previous mode
show Show running system information
terminal Set terminal line parameters
who Display who is on vty
write Write running configuration to memory, network, or terminal
speedmetal#
|
在交互式終端中操作很簡單。要獲得可用命令的提示,您可以在任何時刻按 ?鍵,然后命令的選項就會出現在屏幕上。如果您正在構建您自己的 Zebra 路由器,而且您有配置 Cisco 路由器的經驗的話,您會覺得這個配置過程非常熟悉。
到現在為止,還只有 Zebra 被配置好并且運行起來了,但是還沒有任何其他的協議。接下來將開始配置的實質內容,我們將向您介紹我們的這一過程。
MRLG 的配置和使用
Multi-Router Looking Glass,簡稱 MRLG,由 EnterZone 的 John Frazier 開發,是一個基于 Web 的工具,可以用來顯示 Zebra 識別出來的接口和路由。MRLG 其實僅僅是 Zebra shell 的一個 Web 界面,只能使用有限的命令集,但是在我們的測試過程中,我們發現使用它是顯示路由的一個快速而有效的途徑。所以,在開始配置 Zebra 協議之前,我們先向您介紹如何安裝 MRLG。
MRLG 需要 Net::Telnet Perl 軟件包的支持才能與 Zebra shell 通信。不過,這個軟件包沒有包含在常規的 Red Hat 9 發行版本中,所以我們只好自己去下載它(參閱
參考資料
中的鏈接)。
由于 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(有一個內置的以太網接口和一個 Home-and-Away PCMCIA 以太網卡)。兩個路由器通過串行線聯接起來,并且每個路由器通過以太網連接到 ThinkPad。見我們的連接圖:
圖 2. 實驗室連接圖
使用 Zebra 配置接口
我們首先從 RIP 協議開始講述使用 Zebra 來管理路由。如前所述,我們已經在 ThinkPad 上安裝了 Zebra。由于我們在 ThinkPad 上還需要另一個網絡接口,我們安裝了一個虛擬的網絡設備,如下:
# modprobe dummy
# ifconfig dummy0
|
我們 telnet 到 Zebra 端口來開始配置。我們按照以下順序與 Zebra 會話:
清單 3. 配置 IP 接口
User Access Verification
Password: zebra
speedmetal> enable
Password: zebra
speedmetal# configure terminal
speedmetal(config)# interface eth0
speedmetal(config-if)# ip address 192.168.2.1/30
speedmetal(config-if)# quit
speedmetal(config)# interface eth1
speedmetal(config-if)# ip address 192.168.1.1/30
speedmetal(config-if)# quit
speedmetal(config)# interface dummy0
speedmetal(config-if)# ip address 10.0.2.1/24
speedmetal(config-if)# write
Configuration saved to /etc/zebra/zebra.conf
speedmetal(config-if)# end
speedmetal# show run
Current configuration:
!
hostname speedmetal
password zebra
enable password zebra
!
interface lo
!
interface eth0
ip address 192.168.2.1/30
!
interface dummy0
ip address 10.0.2.1/24
!
interface eth1
ip address 192.168.1.1/30
!
!
line vty
!
end
|
要注意的是我們沒有用常規的方法設置 ThinkPad 的 IP 地址;而是通過 Zebra 來設置它們。這些設置保存在 /etc/zebra/zebra.conf 配置文件中,因此每次當 Zebra 服務啟動時,這些設置就會生效。
Zebra.conf 文件中由 Zebra 修改的部分如下:
清單 4. 由 Zebra 修改過的 /etc/zebra/zebra.conf 文件
!
! Zebra configuration saved from vty
! 2003/08/20 00:07:51
!
hostname speedmetal
password zebra
enable password zebra
!
interface lo
!
interface eth0
ip address 192.168.2.1/30
!
interface dummy0
ip address 10.0.2.1/24
!
interface eth1
ip address 192.168.1.1/30
!
!
line vty
!
|
我們還可以用 MRLG 來檢查接口的狀態,方法是:選擇默認值,"router1",選中單選按鈕 "show interface",然后點擊 "Execute"。
使用 Zebra 安裝配置 RIP 路由
我們已經在 ThinkPad/router 上安裝配置了網絡接口,接下來我們再對它進行配置,使之可以與 RIP 更新協同工作。正如我們已經提到過的,Zebra 使用單獨的守護進程來實現路由協議,所以我們必須首先為 RIP 守護進程在/etc/zebra 目錄下創建一個簡單的配置文件ripd.conf。
清單 5. 一個基本的 /etc/zebra/ripd.conf 文件
hostname speedmetal-rip
password zebra
enable password zebra
|
然后我們啟動 ripd 守護進程
:
# service ripd start
完成后,我們可以 telnet 到我們的 Zebra 路由器的 2602 端口來配置 RIP 守護進程。
清單 6. 配置 RIP
User Access Verification
Password: zebra
speedmetal-rip> enable
Password: zebra
speedmetal-rip# configure terminal
speedmetal-rip(config)# router rip
speedmetal-rip(config-router)# network 10.0.0.0/8
speedmetal-rip(config-router)# network 192.168.0.0/16
speedmetal-rip(config-router)# end
speedmetal-rip# show run
Current configuration:
!
hostname speedmetal-rip
password zebra
enable password zebra
!
interface lo
!
interface eth0
!
interface dummy0
!
router rip
network 0.0.0.0/0
network 192.168.0.0/16
!
line vty
!
end
speedmetal-rip# write
Configuration saved to /etc/zebra/ripd.conf
speedmetal-rip#
|
生成的 ripd.conf 配置文件如下所示:
清單 7. 生成的 /etc/zebra/ripd.conf 文件
!
! Zebra configuration saved from vty
! 2003/08/19 13:50:30
!
hostname speedmetal-rip
password zebra
enable password zebra
!
interface lo
!
interface eth0
!
interface eth1
!
interface dummy0
!
router rip
network 10.0.0.0/8
network 192.168.0.0/16
!
line vty
!
|
在 Cisco 路由器上安裝配置 RIP 路由
我們將兩個 Cisco 路由器稱為 "A" 和 "B",為了簡化這兩個路由器的配置,我們只配置了一些讓路由器能正常運行的基本設置,包括設置接口的 IP 地址、環回地址,以及用于串口通信的串口時鐘頻率。
清單 8. 配置路由器 A
Router#config terminal
Router(config)#hostname RouterA
RouterA(config)#int s0/0
RouterA(config-if)#ip address 192.168.0.1 255.255.255.252
RouterA(config-if)#no shut
RouterA(config-if)# interface fastEthernet 0/0
RouterA(config-if)#ip address 192.168.2.2 255.255.255.252
RouterA(config-if)#no shut
RouterA(config-if)#int loopback 0
RouterA(config-if)#ip address 10.0.0.1 255.255.255.0
RouterA(config-if)#end
RouterA#write
|
類似地,我們配置好路由器 "B"。
清單 9. 配置路由器 B
Router#configure terminal
Router(config)#hostname RouterB
RouterB(config)#int s0/0
RouterB(config-if)#ip address 192.168.0.2 255.255.255.252
RouterB(config-if)#no shut
RouterB(config-if)#int fastEthernet0/0
RouterB(config-if)#ip address 192.168.1.2 255.255.255.252
RouterB(config-if)#no shut
RouterB(config-if)#int loopback 0
RouterB(config-if)#ip address 10.0.1.1 255.255.255.0
RouterB(config-router)#end
RouterB#write
|
在 3620 路由器上配置 RIP 與 Zebra 中的命令極其類似。我們通過控制臺線纜訪問兩臺3620,執行如下命令:
清單 10. 在路由器 A 上完成 RIP 所需的配置
RouterA#conf t
Enter configuration commands, one per line. End with CNTL/Z.
RouterA(config)#router rip
RouterA(config-router)#network 10.0.0.0
RouterA(config-router)#network 192.168.0.0
RouterA(config-router)#network 192.168.2.0
RouterA(config-router)#version 2
RouterA(config-router)#end
RouterA#write
|
然后是路由器 B:
清單 11. 在路由器 B 上完成 RIP 所需的配置
RouterB#conf t
Enter configuration commands, one per line. End with CNTL/Z.
RouterB(config)#router rip
RouterB(config-router)#network 10.0.1.0
RouterB(config-router)#network 192.168.0.0
RouterB(config-router)#network 192.168.1.0
RouterB(config-router)#version 2
RouterB(config-router)#end
RouterB#write
|
router rip 命令啟動配置 RIP 的過程。network 命令告訴路由器哪些是 RIP 要傳播的網段。
RIP 傳播路由
現在 Cisco 路由器和 Zebra 都已經配置好,我們接下來檢驗傳播的路由。在 MRLG 中,我們選擇 "show ip route" 然后點擊 "Execute"。生成如下報告:
清單 12. Zebra 反映的 RIP 路由
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
B - BGP, > - selected route, * - FIB route
R>* 10.0.0.0/24 [120/2] via 192.168.2.2, eth0, 00:11:05
R>* 10.0.1.0/24 [120/2] via 192.168.1.2, eth1, 00:02:08
C>* 10.0.2.0/24 is directly connected, dummy0
K * 127.0.0.0/8 is directly connected, lo
C>* 127.0.0.0/8 is directly connected, lo
R>* 192.168.0.0/30 [120/2] via 192.168.2.2, eth0, 00:11:05
C>* 192.168.1.0/30 is directly connected, eth1
C>* 192.168.2.0/30 is directly connected, eth0
|
通過 RIP 得到的路由用一個 R 來標記。
要注意的是,通過路由器 A 和路由器 B 的廣播,Zebra 現在知道了 10.0.0.0/24 和 10.0.1.0/24 兩個網段。測試時,我們從 ThinkPad Zebra 路由器上 ping 10.0.0.1 和 10.0.1.1,并從兩個路由器上 ping 10.0.2.1(ThinkPad 的虛擬網絡接口)。
為了測試路由的 failover,我們把連接網段 10.0.0.0/24 的路由器 A 上的網絡連接斷開。經過總計約兩分鐘的過期時間以后,Zebra 得到了另一個可達 10.0.0.0/24 的路由,這個新的路由是通過路由器 B 得到的。注意在下面的清單中,Zebra 通過 192.168.1.2 到達 10.0.0.0/24,而不是先前的路徑。
清單 13. Zebra 反映的 RIP 路由
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
B - BGP, > - selected route, * - FIB route
R>* 10.0.0.0/24 [120/3] via 192.168.1.2, eth0, 00:00:26
R>* 10.0.1.0/24 [120/2] via 192.168.1.2, eth1, 00:06:02
C>* 10.0.2.0/24 is directly connected, dummy0
K * 127.0.0.0/8 is directly connected, lo
C>* 127.0.0.0/8 is directly connected, lo
R>* 192.168.0.0/30 [120/2] via 192.168.1.2, eth1, 00:00:26
C>* 192.168.1.0/30 is directly connected, eth1
C>* 192.168.2.0/30 is directly connected, eth0
|
為什么總的過期時間大于兩分鐘?RIP 默認的過期時間是 30 秒,但是 RIP 協議指定了在確認一個路由已經失效之前要進行 3 次重試(共 90 秒),并且還要有一段時間來清空無效的路由(還需要 240 秒)。眾所周知,RIP 協議對連接失敗反應遲鈍,這一點在這里得到了明確的論證。
這里是在 failover 發生之前路由器 A 的路由表的輸出。
清單 14. Failover 之前路由器 A 的路由表
RouterA#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is not set
10.0.0.0/24 is subnetted, 3 subnets
R 10.0.2.0 [120/1] via 192.168.2.1, 00:00:11, FastEthernet0/0
C 10.0.0.0 is directly connected, Loopback0
R 10.0.1.0 [120/1] via 192.168.0.2, 00:00:18, Serial0/0
192.168.0.0/30 is subnetted, 1 subnets
C 192.168.0.0 is directly connected, Serial0/0
192.168.1.0/30 is subnetted, 1 subnets
R 192.168.1.0 [120/1] via 192.168.0.2, 00:00:18, Serial0/0
[120/1] via 192.168.2.1, 00:00:11, FastEthernet0/0
192.168.2.0/30 is subnetted, 1 subnets
C 192.168.2.0 is directly connected, FastEthernet0/0
|
failover 之后:
清單 15. Failover 之后路由器 A 的路由表
RouterA#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is not set
10.0.0.0/24 is subnetted, 3 subnets
R 10.0.2.0 [120/2] via 192.168.0.2, 00:00:09, Serial0/0
C 10.0.0.0 is directly connected, Loopback0
R 10.0.1.0 [120/1] via 192.168.0.2, 00:00:09, Serial0/0
192.168.0.0/30 is subnetted, 1 subnets
C 192.168.0.0 is directly connected, Serial0/0
192.168.1.0/30 is subnetted, 1 subnets
R 192.168.1.0 [120/1] via 192.168.0.2, 00:00:09, Serial0/0
192.168.2.0/30 is subnetted, 1 subnets
R 192.168.2.0 [120/2] via 192.168.0.2, 00:00:10, Serial0/0
|
使用 Zebra 配置 OSPF 路由
完成 RIP 的配置后,我們開始配置 OSPF 路由。盡管 OSPF 和 RIP 可以同時使用,不過為了配置的簡化,我們現在只使用 OSPF。我們只需要把 ripd 服務停掉,就可以在 Zebra 中將 RIP 禁用。
# service ripd stop
和前面一樣,我們從 OSPF 的一個基本的配置文件開始,這次是 ospfd.conf,文件所在目錄仍是 /etc/zebra。
清單 16. 一個基本的 /etc/zebra/ospfd.conf 文件
hostname speedmetal-ospf
password zebra
enable password zebra
|
然后,我們啟動 OSPF 服務:
# service ospfd start
對 OSPF 的配置比 RIP 簡單:基本上我們僅僅需要告訴 OSPF 去廣播所有它知道的路由。
配置 OSPF 的端口是 2604。
下面是我們配置 OSPF 的會話。
清單 17. OSPF 配置會話
[root@speedmetal zebra]# telnet 127.0.0.1 2604
User Access Verification
Password: zebra
speedmetal-ospf> enable
Password: zebra
speedmetal-ospf# configure terminal
speedmetal-ospf(config)# router ospf
speedmetal-ospf(config-router)# network 0.0.0.0/0 area 0
speedmetal-ospf(config-router)# end
speedmetal-ospf# write
Configuration saved to /etc/zebra/ospfd.conf
speedmetal-ospf# show run
Current configuration:
!
hostname speedmetal-ospf
password zebra
enable password zebra
!
!
router ospf
network 0.0.0.0/0 area 0
!
line vty
!
end
speedmetal-ospf#
|
ospfd.conf 配置文件的修改結果如下:
清單 18. Zebra 修改后的 /etc/zebra/ospfd.conf 文件
!
! Zebra configuration saved from vty
! 2003/08/19 14:22:17
!
hostname speedmetal-ospf
password zebra
enable password zebra
!
!
!
interface lo
!
interface eth0
!
interface eth1
!
interface dummy0
!
router ospf
network 0.0.0.0/0 area 0
!
line vty
!
|
在 Cisco 路由器上配置 OSPF
我們用以下命令來移除 RIP 協議并添加 OSPF 協議:
清單 19. 移除 RIP 協議,添加 OSPF 協議
RouterA#conf term
RouterA(config)no router rip
RouterA(config)#router ospf 100
RouterA(config-router)#network 0.0.0.0 255.255.255.255 area 0
RouterA(config-router)end
|
我們在路由器 A 和路由器 B 上執行同樣的步驟。
使用 OSPF 傳播路由
我們的 MRLG 報告是這樣的:
清單 20. Zebra 反映的 OSPF 路由
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
B - BGP, > - selected route, * - FIB route
O>* 10.0.0.0/32 [110/11] via 192.168.2.2, eth0, 00:00:01
O>* 10.0.1.1/32 [110/11] via 192.168.1.2, eth1, 00:02:53
O 10.0.2.0/24 [110/10] is directly connected, dummy0, 00:03:31
C>* 10.0.2.0/24 is directly connected, dummy0
K * 127.0.0.0/8 is directly connected, lo
C>* 127.0.0.0/8 is directly connected, lo
O>* 192.168.0.0/30 [110/58] via 192.168.2.2, eth0, 00:00:01
via 192.168.1.2, eth1, 00:00:01
O 192.168.1.0/30 [110/10] is directly connected, eth1, 00:03:21
C>* 192.168.1.0/30 is directly connected, eth1
O 192.168.2.0/30 [110/10] is directly connected, eth0, 00:03:31
C>* 192.168.2.0/30 is directly connected, eth0
|
請注意 10.0.0.1/32 和到 10.0.1.1/32 的路由被標記為 O,說明這些路由是通過 OSPF 得到的。
當我們把從 Zebra 路由器到路由器 A 的連接斷開時,路由自動更新。MRLG 生成的報告如下:
清單 21. Failover 之后 Zebra 反映的 OSPF 路由
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
B - BGP, > - selected route, * - FIB route
O>* 10.0.0.1/32 [110/59] via 192.168.2.2, eth0, 00:01:10
O>* 10.0.1.1/32 [110/11] via 192.168.1.2, eth1, 00:09:46
O 10.0.2.0/24 [110/10] is directly connected, dummy0, 00:10:24
C>* 10.0.2.0/24 is directly connected, dummy0
K * 127.0.0.0/8 is directly connected, lo
C>* 127.0.0.0/8 is directly connected, lo
O>* 192.168.0.0/30 [110/58] via 192.168.1.2, eth1, 00:01:10
O 192.168.1.0/30 [110/10[ is directly connected, eth1, 00:10:14
C>* 192.168.1.0/30 is directly connected, eth1
O 192.168.2.0/30 [110/10] is directly connected, eth0, 00:10:24
C>* 192.168.2.0/30 is directly connected, eth0
|
由于 OSPF 是基于鏈路狀態的,所以 failover 速度快得多:新的路由在 30 秒內就可以傳播完成。
結束語
我們的出發點是一個簡單的需求,那就是我們的網絡課程受設備條件所限,需要尋找一個 Cisco 路由器的替代品。Zebra 是一個明智的選擇,它在網絡上得到了諸多的好評。正如前面我們的實驗所示,Zebra 在簡單網絡環境中完全可以取代 Cisco 路由器,可能也能用于一些更復雜的情形。
無可否認,要轉而使用 Zebra 需要一定程度的學習。使用單獨的守護進程及單獨的配置文件在剛開始時令人費解,但是當我們把這些理順了以后,感覺它幾乎和 Cisco IOS 沒什么區別。
總的來說,Zebra 使得在 Linux 上實現動態路由成為一項簡單的任務。如果您需要盡快構建一個路由器,而您的預算卻有限,不妨試試 Zebra。
在 Linux 上構建網絡路由器