前言 Zebra是一個路由軟件包,提供基於TCP/IP路由服務,支持RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, BGP- 4, 和 BGP-4+等眾多路由協議。Zebra還支持BGP特性路由反射器(Route Reflector)。除了傳統的 IPv4路由協議,Zebra也支持IPv6路由協議。如果運行的SNMP守護進程(需要UCd-snmp)支持SMUX協 議,Zebra還能支持路由協議MIBs。 由以上可見,Zebra的確是一個很不錯的路由系統,但比起真正的路由器就簡直是小兒科,所以網絡高手 就當這文章是小孩子過家家吧,而對於象我這樣的初學者(特別是沒有真實設備或足夠設備進行實驗) 也不失為一個學習和熟悉路由配置、路由協議的好工具。我沒有實際的配置經驗,對路由的技術細節也 不是十分清晰,完全是在扔破磚頭。希望路由高手指正概念錯誤。
安裝 Zebra目前最新的版本是0.92a,它的安裝非常簡單,我們只需從http://www.zebra.org/下載zebra- 0.92a.tar.gz,然後執行以下命令安裝(本文環境是RedHat7.2): shell> tar xzf zebra-0.92a.tar.gz shell> cd zebra-0.92a shell> ./configure shell> make shell> make install 這樣Zebra就安裝好了,安裝的執行文件: shell> ls /usr/local/sbin bgpd ospfd ripd zebra 配置文件: shell> ls /usr/local/etc bgpd.conf.sample ospfd.conf.sample zebra.conf.sample bgpd.conf.sample2 ripd.conf.sample 運行 編譯安裝完Zebra後,可以看到有4個可執行文件和5個配置樣本文件,我們就使用它的配置樣本文件: shell> cd /usr/local/etc shell> cp zebra.conf.sample zebra.conf Zebra的各進程有各自的終端接口或VTY,如果我們需要給連接到它們的端口設置別名的話,在/etc/ services文件添加如下內容: zebrasrv 2600/tcp # zebra service zebra 2601/tcp # zebra vty ripd 2602/tcp # RIPd vty ripngd 2603/tcp # RIPngd vty ospfd 2604/tcp # OSPFd vty bgpd 2605/tcp # BGPd vty ospf6d 2606/tcp # OSPF6d vty 然後就可以啟動Zebra了: shell> zebra -d 這樣,Zebra就以守護進程啟動了,其它的參數請參考zebra -h。 基本路由配置命令 直接用telnet連接: shell> telnet localhost 2601 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Hello, this is zebra (version 0.92a). Copyright 1996-2001 Kunihiro Ishiguro. User Access Verification PassWord: Zebra會提示輸入口令,我們通過/usr/local/etc/zebra.conf可以看到口令是zebra,enable口令也是zebra。 輸 入口令zebra,得到路由器用戶模式提示符: Router> 進入特權模式: Router> en Password: Router# 輸入一個問號,看看Zebra提供了多少路由命令: Router# ? 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 提供的命令很少,實際路由器好多命令都沒有,我們只能用有限的命令投入到無限的實驗中去。 Router# sh run Current configuration: ! hostname Router password zebra enable password zebra ! interface lo ! interface eth0 ! line vty ! end Zebra把操作系統的網絡接口當做路由器的接口,所以在做比較復雜的路由實驗,會需要比較多的網卡。 進入全局模式,盡可能把實際可用的配置命令都實驗一遍: Router# conf t Router(config)# 自己取一個路由器名字: Router(config)# hostname r1 r1(config)# Zebra比較簡單,登陸口令不是在line下修改,而是直接在全局模式下用password修改r1(config)# password {password} Zebra不支持enable secret {password}這種MD5加密口令,只能使用enable password {password}來修改 enable口令: r1# conf t r1(config)# enable password {password} 在路由器配置中加密所有的口令: r1(config)# service password-encryption 回到特權模式: r1(config)# exit r1# sh run Current configuration: ! hostname r1 password 8 alA5.vcyMAwXQ enable password 8 ksbxOFN8xcFMc service password-encryption ! interface lo ! interface eth0 ! line vty ! end 我們看到剛才的明文密碼都進行加密了,給我們的實驗機也提高安全性。Zebra有一點比較惡心,如果我 們先設置了service password-encryption,然後再修改口令,sh run就發現口令又都是明文的了,但是由 於有service password-encryption,所以就無法登陸了。 去掉會話超時,免得10分鐘沒有動作,就把我們給踢了。但是在實際的路由器配置中,為安全起見我們 最好還是設上會話超時。 r1# conf t r1(config)# line vty r1(config-line)# exec-timeout 0 0 設置日志記錄,Zebra可以把日志記錄到標准輸出、syslog、以及指定輸出文件: r1(config-line)# exit r1(config)# log stdout r1(config)# no log stdout r1(config)# log syslog r1(config)# no log syslog r1(config)# log file /usr/local/etc/zebra.log 配置接口IP地址: r1(config)# int lo r1(config-if)# ip address 127.0.0.1/8 r1(config-if)# exit r1(config)# int eth0 r1(config-if)# ip address 192.168.5.121/24 Zebra比較奇怪,不能使用ip address 192.168.5.121 255.255.255.0這種形式設置IP。測試一下,就設置成和Linux中使用的一樣。 保存我們剛才的配置: r1(config-if)# exit r1(config)# exit r1# copy run start Configuration saved to /usr/local/etc/zebra.conf r1# 2、用Zebra做簡單的RIP實驗 RIP是應用較早、使用較普遍的IGP,適用於小型同類網絡,是典型的距離向量(distance-vector)協 議。RIP通過廣播UDP報文來交換路由信息,每30秒發送一次路由信息更新。RIP提供跳躍計數(hop count)作為尺度來衡量路由距離,跳躍計數是一個包到達目標所必須經過的路由器的數目。如果到相同 目標有二個不等速或不同帶寬的路由器,但跳躍計數相同,則RIP認為兩個路由是等距離的。RIP最多支 持的跳數為15,即在源和目的網間所要經過的最多路由器的數目為15,跳數16表示不可達。RIPv2支持 驗證、密鑰管理、路由匯總、無類域間路由(CIDR)和變長子網掩碼(VLSMs)。 Zebra支持RIPv2,使用ripd程序實現RIP路由功能,但ripd程序需要在zebra程序讀取接口信息,所以zebra 一定要在ripd之前啟動。由於條件所限,下面的RIP實驗是在兩台單網卡的RedHat7.2下做的,所以只是 最簡單的演示。 按照上面基本配置的方法初始化第一台機器: shell_1> cd /usr/local/etc shell_1> cp zebra.conf.sample zebra.conf shell_1> cp ripd.conf.sample ripd.conf shell_1> zebra -d 進入zebra設置IP shell_1> telnet localhost 2601 Password: Router> en Password: Router# conf t Router(config)# hostname r1 r1(config)# int eth0 r1(config-if)# ip address 192.168.5.121/24 r1(config-if)# ctrl+z r1# copy run start 進入第一台機器的rip設置 shell_1> ripd -d shell_1> telnet localhost 2602 Password: ripd> en ripd# conf t ripd(config)# hostname r1_ripd !改個名字好辨認 r1_ripd(config)# router rip !啟動rip r1_ripd(config-rout