1、 Zebra 是一个开源的 TCP/IP 路由软件,同 Cisco Internet 网络操作系统(IOS)类似。它灵活而且具有强大的功能,可以处理路由信息协议(RIP)、开放式最短路径优先协议(OSPF)和边界网关协议以及这些协议的所有变体。本文介绍了作者安装 Zebra 并且使之与真正的 Cisco 路由器配合来动态地管理路由。 动态、健壮的路由对于 Internet 网络来说极其重要,因此任何一个初涉此领域的网络工程师不仅需要理解路由的概念,而且要有能力在真正的环境下驾驭它。但是,路由领域由高端网络设备供应商(比如 Cisco)提供的产品一统天下,这就意味着对于大多数人来说,只能在学校或
2、者实验室环境中才能学习路由,而且还要一直受到实践时间和实践条件的困扰。我们在组织一门关于 TCP/IP 路由的课程时就遇到了这样的困难。在一个小型的测试环境下,我们想演示在使用路由信息协议(RIP)和开放式最短路径优先协议( OSPF)时各种不同的负载平衡情形。但是,我们手头上的 Cisco 路由器数量有限。不过我们有一些 PC 机可以使用,于是我们开始想办法用 Linux 来仿真 Cisco 路由器以解决这个问题。开始时我们尝试使用传统的路由和网关守护进程来构建我们的测试网络,但我们很快就发现对它们进行配置比较困难,而且它们的能力有限,我们的工作得不偿失。于是我们决定尝试使用更先进的方法来完
3、成我们的测试网络,很幸运,我们找到了 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 年完成。
4、现在,这个软件包主要由 IP InfusionCTO 是 Ishiguro 先生在多名网络工程师以及开源志愿者的帮助下来维持。Zebra 的设计独特,采用模块的方法来管理协议。可以根据网络需要启用或者禁用协议。Zebra 最为实用的一点是它的配置形式同 Cisco IOS 极其类似。尽管它的配置与 IOS 相比还是有一些不同,但是这对于那些已经熟悉 IOS 的网络工程师来说在这种环境下工作将相当自如。虽然 Zebra 的版本还没有到 1.0作者完成本文时版本到了 0.93b但这个产品对于需要核心路由器的小型网络来说已经足够了。 请注意本文中所用到的是版本 0.93b,新的版本的安装与配置可能会
5、有所差异。编辑注 安装 Zebra我们的 Zebra 测试平台是一台旧的但是依然很好用的 ThinkPad X20,其运行的是 Red Hat Linux 9。ThinkPad 有一个内置的以太网接口,我们又给它加了一块 PCMCIA 以太网卡,使之可以完成路由器的功能。在安装 Zebra 之前,我们确认两块网卡都已经被 Linux 认出并且正常工作。在 Red Hat 9 中已经附带了 Zebra-0.93b 的 RPM 安装包。这个版本与 Zebra 网站上提供的版本相同,因此我们决定直接使用它,而不再去从网上下载并自己编译。Zebra RPM 将安装二进制文件、脚本和配置文件,以及必需的
6、手册、例子和文档文件。Zebra 基本配置zebra 守护进程是实际的路由管理者,控制着其他模块;而且用户主要通过它进行交互。我们最先需要配置 Zebra 守护进程,对应的配置文件是 /etc/zebra/zebra.conf。Zebra RPM 包中有一个完整的配置文件样例。不过,就最简化的情形来说,我们实际上只需要创建一个包含以下几行的 /etc/zebra/zebra.conf 文件:清单 1. 一个最简的 Zebra 配置 hostname speedmetalpassword zebraenable password zebrahostname 指定了当您进入交互式配置方式时的路由器
7、名。它可以是任何一个标识,不一定要和机器的主机名相同。password 指定了登录进入交互式 Zebra 终端时需要的密码。enable password 指定了当您想要改变配置时以较高级别身份访问 Zebra 所需要的密码。创建了 /etc/zebra/zebra.conf 文件以后,我们现在可以执行下面的命令来启动 zebra 守护进程:# service zebra start现在通过 telnet 到我们的机器的 2601 端口就可以进入 Zebra 交互式会话。清单 2. 一个 Zebra 会话样例rootspeedmetal zebra# telnet 127.0.0.1 2601
8、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 VerificationPassword: zebraspeedmetal enablePassword: zebraspeedmetal# ?configure Configuration from vty interfacecopy Copy configurationdebug Debugging
9、 functions (see also undebug)disable Turn off privileged mode commandend End current mode and change to enable mode.exit Exit current mode and down to previous modehelp Description of the interactive help systemlist Print command listno Negate a command or set its defaultsquit Exit current mode and
10、down to previous modeshow Show running system informationterminal Set terminal line parameterswho Display who is on vtywrite Write running configuration to memory, network, or terminalspeedmetal#在交互式终端中操作很简单。要获得可用命令的提示,您可以在任何时刻按 ?键,然后命令的选项就会出现在屏幕上。如果您正在构建您自己的 Zebra 路由器,而且您有配置 Cisco 路由器的经验的话,您会觉得这个配置
11、过程非常熟悉。到现在为止,还只有 Zebra 被配置好并且运行起来了,但是还没有任何其他的协议。接下来将开始配置的实质内容,我们将向您介绍我们的这一过程。MRLG 的配置和使用Multi-Router Looking Glass,简称 MRLG,由 EnterZone 的 John Frazier 开发,是一个基于 Web 的工具,可以用来显示 Zebra 识别出来的接口和路由。MRLG 其实仅仅是 Zebra shell 的一个 Web 界面,只能使用有限的命令集,但是在我们的测试过程中,我们发现使用它是显示路由的一个快速而有效的途径。所以,在开始配置 Zebra 协议之前,我们先向您介绍如
12、何安装 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
13、行,将$url=“http:/ 168 行到第 174 行的部分内容,如下所示:if ($Formrouter 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(有一个内置的以太网接口和一
14、个 Home-and-Away PCMCIA 以太网卡)。两个路由器通过串行线联接起来,并且每个路由器通过以太网连接到 ThinkPad。见我们的连接图:图 2. 实验室连接图使用 Zebra 配置接口我们首先从 RIP 协议开始讲述使用 Zebra 来管理路由。如前所述,我们已经在 ThinkPad 上安装了 Zebra。由于我们在 ThinkPad 上还需要另一个网络接口,我们安装了一个虚拟的网络设备,如下:# modprobe dummy# ifconfig dummy0 我们 telnet 到 Zebra 端口来开始配置。我们按照以下顺序与 Zebra 会话:清单 3. 配置 IP 接
15、口User Access VerificationPassword: zebraspeedmetal enablePassword: zebraspeedmetal# configure terminalspeedmetal(config)# interface eth0speedmetal(config-if)# ip address 192.168.2.1/30speedmetal(config-if)# quitspeedmetal(config)# interface eth1speedmetal(config-if)# ip address 192.168.1.1/30speedme
16、tal(config-if)# quitspeedmetal(config)# interface dummy0speedmetal(config-if)# ip address 10.0.2.1/24speedmetal(config-if)# writeConfiguration saved to /etc/zebra/zebra.confspeedmetal(config-if)# endspeedmetal# show runCurrent configuration:!hostname speedmetalpassword zebraenable password zebra!int
17、erface lo!interface eth0ip address 192.168.2.1/30!interface dummy0ip address 10.0.2.1/24!interface eth1ip address 192.168.1.1/30!line vty!end要注意的是我们没有用常规的方法设置 ThinkPad 的 IP 地址;而是通过 Zebra 来设置它们。这些设置保存在 /etc/zebra/zebra.conf 配置文件中,因此每次当 Zebra 服务启动时,这些设置就会生效。Zebra.conf 文件中由 Zebra 修改的部分如下:清单 4. 由 Zebra
18、修改过的 /etc/zebra/zebra.conf 文件! Zebra configuration saved from vty! 2003/08/20 00:07:51!hostname speedmetalpassword zebraenable password zebra!interface lo!interface eth0ip address 192.168.2.1/30!interface dummy0ip address 10.0.2.1/24!interface eth1ip address 192.168.1.1/30!line vty!我们还可以用 MRLG 来检查接口
19、的状态,方法是:选择默认值,“router1“,选中单选按钮 “show interface“,然后点击 “Execute“。使用 Zebra 安装配置 RIP 路由我们已经在 ThinkPad/router 上安装配置了网络接口,接下来我们再对它进行配置,使之可以与 RIP 更新协同工作。正如我们已经提到过的,Zebra 使用单独的守护进程来实现路由协议,所以我们必须首先为 RIP 守护进程在/etc/zebra 目录下创建一个简单的配置文件ripd.conf。清单 5. 一个基本的 /etc/zebra/ripd.conf 文件hostname speedmetal-rippassword
20、 zebraenable password zebra然后我们启动 ripd 守护进程 :# service ripd start完成后,我们可以 telnet 到我们的 Zebra 路由器的 2602 端口来配置 RIP 守护进程。清单 6. 配置 RIPUser Access VerificationPassword: zebraspeedmetal-rip enablePassword: zebraspeedmetal-rip# configure terminalspeedmetal-rip(config)# router ripspeedmetal-rip(config-router
21、)# network 10.0.0.0/8speedmetal-rip(config-router)# network 192.168.0.0/16speedmetal-rip(config-router)# endspeedmetal-rip# show runCurrent configuration:!hostname speedmetal-rippassword zebraenable password zebra!interface lo!interface eth0!interface dummy0!router ripnetwork 0.0.0.0/0network 192.16
22、8.0.0/16!line vty!endspeedmetal-rip# writeConfiguration saved to /etc/zebra/ripd.confspeedmetal-rip#生成的 ripd.conf 配置文件如下所示:清单 7. 生成的 /etc/zebra/ripd.conf 文件! Zebra configuration saved from vty! 2003/08/19 13:50:30!hostname speedmetal-rippassword zebraenable password zebra!interface lo!interface eth0
23、!interface eth1!interface dummy0!router ripnetwork 10.0.0.0/8network 192.168.0.0/16!line vty!在 Cisco 路由器上安装配置 RIP 路由我们将两个 Cisco 路由器称为 “A“ 和 “B“,为了简化这两个路由器的配置,我们只配置了一些让路由器能正常运行的基本设置,包括设置接口的 IP 地址、环回地址,以及用于串口通信的串口时钟频率。 清单 8. 配置路由器 ARouter#config terminalRouter(config)#hostname RouterARouterA(config)#i
24、nt s0/0RouterA(config-if)#ip address 192.168.0.1 255.255.255.252RouterA(config-if)#no shutRouterA(config-if)# interface fastEthernet 0/0RouterA(config-if)#ip address 192.168.2.2 255.255.255.252RouterA(config-if)#no shutRouterA(config-if)#int loopback 0RouterA(config-if)#ip address 10.0.0.1 255.255.2
25、55.0RouterA(config-if)#endRouterA#write类似地,我们配置好路由器 “B“。清单 9. 配置路由器 BRouter#configure terminalRouter(config)#hostname RouterBRouterB(config)#int s0/0RouterB(config-if)#ip address 192.168.0.2 255.255.255.252RouterB(config-if)#no shutRouterB(config-if)#int fastEthernet0/0RouterB(config-if)#ip address
26、192.168.1.2 255.255.255.252RouterB(config-if)#no shutRouterB(config-if)#int loopback 0RouterB(config-if)#ip address 10.0.1.1 255.255.255.0RouterB(config-router)#endRouterB#write在 3620 路由器上配置 RIP 与 Zebra 中的命令极其类似。我们通过控制台线缆访问两台3620,执行如下命令:清单 10. 在路由器 A 上完成 RIP 所需的配置RouterA#conf tEnter configuration co
27、mmands, one per line. End with CNTL/Z.RouterA(config)#router ripRouterA(config-router)#network 10.0.0.0RouterA(config-router)#network 192.168.0.0RouterA(config-router)#network 192.168.2.0RouterA(config-router)#version 2RouterA(config-router)#endRouterA#write然后是路由器 B:清单 11. 在路由器 B 上完成 RIP 所需的配置Router
28、B#conf tEnter configuration commands, one per line. End with CNTL/Z.RouterB(config)#router ripRouterB(config-router)#network 10.0.1.0RouterB(config-router)#network 192.168.0.0RouterB(config-router)#network 192.168.1.0RouterB(config-router)#version 2RouterB(config-router)#endRouterB#writerouter rip 命
29、令启动配置 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 routeR* 10.0.0.0/24 120/2 via 192.168.2.2, eth0, 00:11:05R* 10.0.1.0/24 120/2 via 192.168.1.2, eth1, 00:02:08C* 10.0.2.0/24 is directly connected, dummy0