电脑技术学习

Linux下建立网络路由器

dn001

对于网络互联工程师们来说,建立一个互联网动态路由是非常重要的。这不仅需要了解路由的概念,而且还必须知道如何付诸实践。就目前而言,网络设备主要由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 speedmetal
passWord zebra
enable password zebra


无论何时,当你进入交互式设置模式时,Hostname指令将指定路由器的名称。该名称可以任意设置,不一定和主机的名称相符。Password指令则确定交互式Zebra终端的登陆密码。

/etc/zebra/zebra.conf建立后,我们可以执行下列指令来启动zebra无后台交互程序:

# service zebra start


现在我们可以通过连接机器的2601端口进入Zebra交互对话模式。

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#




我们很轻易就能对此了如指掌,因为可以通过点击屏幕上的?键随时了解某一命令的含义。假如有过配置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行间的指令块进行修改,修改后的指令块如下:

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所示。

Linux下建立网络路由器

图1 连接MRLG,输入地址的显示



实验室配置

我们的实验室配置包括2台Cisco 3620路由器和一台ThinkPad X20。ThinkPad X20除了具备内置以太网端口,还装有一个Home-and-Away PCMCIA以太网卡。两台Cisco 3620路由器之间的通信主要靠串口连接来实现,它们与ThinkPad X20的连接则是靠以太网来实现的,总体架构如图2所示。

Linux下建立网络路由器

图2 总体架构示意图

利用Zebra设置网络端口

我们利用Zebra软件对网络进行治理首先要靠RIP来实现。上文提到我们已经在ThinkPad上安装了Zebra。由于我们需要在ThinkPad上建立另外一个网络接口,为此我们必须首先设置一个虚拟网络设备,如:

# modprobe dummy
# ifconfig dummy0


接下来,我们就可以连接进入Zebra程序端口开始设置。我们与Zebra的对话须按下列顺序进行。

端口设置顺序:

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文件的主要内容如下:

/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路由器上设置了网络端口,接下来我们就可以对路由器进行设置使它与RIP同步工作了。Zebra使用不同的无后台交互程序支持不同的路由协议,因此我们要先建立一个简单的设置文件/etc/zebra /ripd.conf。

基本/etc/zebra/ripd.conf文件:

hostname speedmetal-rip
password zebra
enable password zebra


运行ripd 无后台交互程序:

# service ripd start


然后,我们就可以通过连入Zebra路由器的2602接口,对RIP无后台交互程序进行设置了。

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#


设置后的/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 3620路由器的设置更加简便,我们将其命名为“A”和“B”,我们这里只对做最基本的设置以便它们可以正常工作。这些设置包括设置端口IP地址、回送地址和用于正常串口通信的串口时钟频率。

对路由器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进行设置:

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路由器,并执行下列命令。

为路由器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设置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


路由器的rip命令主要负责激活RIP进程,该网络命令可以告知路由器RIP将向哪个网络蔓延。

用RIP进行路径拓展

现在我们已经完成了Cisco路由器和Zebra软件的设置,接下来我们可以查看那些正在拓展的路径。在MRLG状态下,我们选择“show ip route”项,点击“Execute”,我们将获得一些报告。

利用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


有R标志的路径是通过RIP获得的。

Zebra现在已经识别了基于路由器A和路由器B的两个网络10.0.0.0/24 和 10.0.1.0/24。我们可以在ThinkPad上运行ping 10.0.0.1和ping 10.0.1.1对网络连通情况进行检测。

为了检验网络发生故障时的应对措施,我们将连接路由器A的网络断开,大约超时2分钟后,Zebra开始通过路由器B绕道连接入10.0.0.0/24网。我们将在下期文中详解。