对于网络互联工程师们来说,建立一个互联网动态路由是非常重要的。这不仅需要了解路由的概念,而且还必须知道如何付诸实践。就目前而言,网络设备主要由Cisco这样的大公司来提供。大多数独立的路由开发者们经常受到学校或实验室环境的制约,无法充分利用现有的资源。而利用Cisco技术设备打造网络需要大量的成本。为了打破这种局面,我们利用一个小型的实验网络,应用路由信息协议(Rip)和开放式最短路径优先(OSPF)两种技术,展示各自不同的平衡加载方案。
在我们使用的三个路由器中,有一个是利用linux技术模拟的。最初,我们试图利用传统的路由和选通无交互后台程序来组建测试网络,但很快发现这种方法设置起来十分复杂而且功能有限。最后,我们决定找一个更先进的方法建立测试网络,幸运的是我们找到了Zebra。
什么是Zebra
Zebra是一种TCP/IP路由软件,它支持BGP-4、BGP-4+、OSPFv2、OSPFv3、RIPv1、RIPv2和RIPng。它符合GNU的GPL标准,可以运行在Linux和其它Unix变体系统上。Zebra是最先进的路由软件之一,最新版本可以从GUN Zebra Web站点上下载。
最早的Zebra套件是由Kunihiro Ishiguro和Yoshinari Yoshikawa在1996年开发的。目前,Zebra套件主要由IP Infusion公司负责维护,软件的创始人之一Ishiguro是公司的CTO。
Zebra可以利用模块法对各种协议进行治理,这种设计是独一无二的。它可以根据网络的需要激活或者停止协议。到目前为止,我们发现Zebra最有用的地方在于它与Cisco IOS设置格式十分相近。尽管它与IOS之间存在着一些差异,但是那些熟悉IOS的网络工程师们会很快适应Zebra网络环境的。目前,Zebra 1.0还没有推出,最新的版本是Zebra 0.93b,它对于一个小型网络已经足够了。
Zebra的安装
我们选择了性能稳定的ThinkPad X20作为Zebra的硬件测试平台,Red Hat Linux 9作为其软件测试平台。ThinkPad X20拥有一个内置的以太网接口。为了使其能充当路由器使用,我们为它增加了一个PCMCIA以太网卡。在安装Zebra前,首先要确定所有的网卡都能被Linux系统识别。
Red Hat 9中已经集成了Zebra 0.93b的RPM。当然,你也可以从网上下载Zebra 软件。为了方便起见,我们决定安装 Zebra 0.93b RPM。Zebra RPM的安装过程与其它软件基本相同。安装的项目包括二进制设置命令、小型程序、配置文件以及必需项目菜单、实例和文档等。
Zebra的基本设置
Zebra无后台交互程序是实实在在的路由治理程序。它控制着其它的软件模块,同时还提供与客户交互的主端口。Zebra RPM套件中包括一个完整的参考设置文件。但是,我们只需要建立一个包括以下内容的/etc/zebra/zebra.conf文件就可以对Zebra进行设置了。
最简单的Zebra设置文件:
无论何时,当你进入交互式设置模式时,Hostname指令将指定路由器的名称。该名称可以任意设置,不一定和主机的名称相符。Password指令则确定交互式Zebra终端的登陆密码。
/etc/zebra/zebra.conf建立后,我们可以执行下列指令来启动zebra无后台交互程序:
现在我们可以通过连接机器的2601端口进入Zebra交互对话模式。
Zebra对话模式实例:
我们很轻易就能对此了如指掌,因为可以通过点击屏幕上的?键随时了解某一命令的含义。假如有过配置Cisco路由器的经验,相信对这一设置过程并不生疏。
到目前为止,我们只完成了Zebra自身的设置和运行,对各种协议的设置还没有开始,假如你预备好了,就让我们继续吧。
设置和使用MRLG
MRLG(Multi-Router Looking Glass)是EnterZone公司John Frazier编写的一种网基工具。它可以用来显示可被Zebra识别的接口和路径。MRLG实际上只是一个由有限命令组成的Zebra指定命令行处理程序的Web接口。但是我们在测试过程中,发现它可以快速显示路径。这一点对于网络协议来说十分重要,因此,在设置协议前要先安装MRLG。
MRLG需要Net::Telnet Per套件才能与Zebra指定命令行处理程序进行通信。不幸的是我们在Red Hat 9 中无法找到Net::Telnet Per套件,因此只有在网上下载了。
由于MRLG是作为一个CGI应用程序来运行的,因此我们还需要安装一个网络服务器软件。用户可以作用Red Hat 9中集成的HTTPD RPM。
我们将/usr/share/doc/zebra-0.93b/tools中的mrlg.cgi文件复制到/var/www/cgi-bin中,然后再对mrlg.cgi的第36行进行修改,由$url="http://www.sample.com/mrlg.cgi";改为$url=http://127.0.0.1/cgi-bin/mrlg.cgi。另外,我们还要对168到174行间的指令块进行修改,修改后的指令块如下:
最后,要连接MRLG,还要将浏览器中的地址栏中输入http://127.0.0.1/cgi-bin/mrlg.cgi.,结果如图1所示。
实验室配置
我们的实验室配置包括2台Cisco 3620路由器和一台ThinkPad X20。ThinkPad X20除了具备内置以太网端口,还装有一个Home-and-Away PCMCIA以太网卡。两台Cisco 3620路由器之间的通信主要靠串口连接来实现,它们与ThinkPad X20的连接则是靠以太网来实现的,总体架构如图2所示。
# modprobe dummy# ifconfig dummy0
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/30speedmetal(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!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
!! Zebra configuration saved from vty! 2003/08/20 00:07:51!hostname speedmetalpassword zebraenable 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!
hostname speedmetal-rippassword zebraenable password zebra
# service ripd start
User Access VerificationPassword: zebraspeedmetal-rip> enablePassword: zebraspeedmetal-rip# configure terminalspeedmetal-rip(config)# router ripspeedmetal-rip(config-router)# 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 rip network 0.0.0.0/0 network 192.168.0.0/16!line vty!endspeedmetal-rip# writeConfiguration saved to /etc/zebra/ripd.confspeedmetal-rip#
!! Zebra configuration saved from vty! 2003/08/19 13:50:30!hostname speedmetal-rippassword zebraenable 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!
Router#config terminalRouter(config)#hostname RouterARouterA(config)#int 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.255.0RouterA(config-if)#endRouterA#write
Router#configure terminalRouter(config)#hostname RouterBRouterB(config)#int s0/0RouterB(config-if)#ip address 192.168.0.2 255.255.255.252
RouterB(config-if)#no shutRouterB(config-if)#int fastEthernet0/0RouterB(config-if)#ip address 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
RouterA#conf tEnter configuration commands, 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
RouterB#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#write
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, dummy0K * 127.0.0.0/8 is directly connected, loC>* 127.0.0.0/8 is directly connected, loR>* 192.168.0.0/30 [120/2] via 192.168.2.2, eth0, 00:11:05C>* 192.168.1.0/30 is directly connected, eth1C>* 192.168.2.0/30 is directly connected, eth0
新闻热点
疑难解答