网站运维、系统运维管理研究
2007/12/10路由网络

没有评论
42 views

专用Cisco路由器的替代品Zebra

动态、健壮的路由对于 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网站上下载http://www.zebra.org/

最初的 Zebra 软件包由 Kunihiro Ishiguro 和 Yoshinari Yoshikawa 于1996年完成。现在,这个软件包主要由 IP Infusion――CTO 是 Ishiguro 先生――在多名网络工程师以及开源志愿者的帮助下来维持。

Zebra 的设计独特,采用模块的方法来管理协议。可以根据网络需要启用或者禁用协议。

Zebra 最为实用的一点是它的配置形式同 Cisco IOS 极其类似。尽管它的配置与 IOS 相比还是有一些不同,但是这对于那些已经熟悉 IOS 的网络工程师来说在这种环境下工作将相当自如。

安装 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 指定了当您进入交互式配置方式时的路由器名。它可以是任何一个标识,不一定要和机器的主机名相同。

assword 指定了登录进入交互式 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 通信。

由于 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;

图 1. Multi-Router Looking Glass

http://www.vlan9.com/ArtImage/20051012/92_1.jpg

基本的实验室配置

我们的实验室配置包括两个 Cisco 3620 路由器和一个 ThinkPad X20(有一个内置的以太网接口和一个 Home-and-Away PCMCIA 以太网卡)。两个路由器通过串行线联接起来,并且每个路由器通过以太网连接到 ThinkPad。见我们的连接图:

图 2. 实验室连接图

http://www.vlan9.com/ArtImage/20051012/92_2.gif

使用 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。

Zebra路由软件介绍

前言

Zebra是一个路由软件包,提供基于TCP/IP路由服务,支持RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, BGP- 4,

和 BGP-4+等众多路由协议。Zebra还支持BGP特性路由反射器(Route Reflector)。除了传统的 IPv4路由协议

,Zebra也支持IPv6路由协议。如果运行的SNMP守护进程(需要ucd-sn mp)支持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。

前言:

安装软件:

1. jdk-1_5_0_06-linux-i586.bin

2. httpd-2.2.4.tar.gz

3. apache-tomcat-6.0.13.tar.gz

4. jakarta-tomcat-connectors-1.2.15-src.tar.gz

并且放置在/usr/local目录下。

参考资料:

http://www.chinaunix.net/jh/13/236685.html

http://blog.beaplat.com/?n=888888&t=a&a=955

主要与以前的整合不一样是使用连接软件是jakarta-tomcat-connectors,其下载地址是:

http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/

一、安装JDK

大家从网上下载的JDK的LINUX版本一般是bin格式

1. 使bin文件可执行。

[root@localhost local]# chmod +x jdk-1_5_0_06-linux-i586.bin

2. 安装

[root@localhost loacl]# ./ jdk-1_5_0_06-linux-i586.bin

3. 为了操作简单,有必要为刚刚安装的jdk1.5.0_06建立一个JDK的同步目录

[root@localhost local]# ln -s jdk1.5.0_06 jdk

4. 设置环境变量JAVA_HOME(这个变量会在后面的Tomcat中用到)。

[root@localhost local]# vi /etc/profile

在该文件的末尾加上下面两行

export JAVA_HOME=/usr/local/jdk

export CLASSPATH=$JAVA_HOME/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

保存退出

5. 验证该变量的设置。如果感觉安装顺利的话,可以跳过此步。

[root@localhost local]# echo $JAVA_HOME

大家会发现返回的是空行

不要惊慌,退出去重新登录系统就可以了

或者执行命令是环境变量立即生效

[root@localhost local]source /etc/profile

[root@localhost /]# echo $JAVA_HOME

/usr/ local /jdk

[root@localhost /]java –version

java version "1.5.0_06"

Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)

Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)

如果返回这行,就说明设置成功。至此您的JDK安装完毕。

二、安装Tomcat

Tomcat的安装比较简单,解压后运行即可。

1. 将安装包拷贝到/usr/local目录下安装,

[root@localhost local]# tar -zxvf apache-tomcat-6.0.13.tar.gz

2. 为解压后得到的apache-tomcat-6.0.13创建一个名为tomcat的同步目录。

[root@localhost local]# ln -s apache-tomcat-6.0.13 tomcat

3. 设置环境变量CATALINA_HOME,并验证

[root@localhost local]# vi /etc/profile

在文件最后加入如下一行

export CATALINA_HOME=/usr/local/tomcat

保存退出

验证CATALINA_HOME的过程跟上面验证JAVA_HOME的过程相同。

4. 启动并测试安装结果

[root@localhost local]# cd ./tomcat/bin

[root@localhost bin]# ./startup.sh

Using CATALINA_BASE: /usr/local/tomcat

Using CATALINA_HOME: /usr/local/tomcat

Using CATALINA_TMPDIR: /usr/local/tomcat/temp

Using JAVA_HOME: /usr/java/jdk

[root@localhost bin]# netstat -tnl

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN

tcp 0 0 192.168.1.254:53 0.0.0.0:* LISTEN

tcp 0 0 192.168.2.254:53 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN

tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN

tcp 0 0 :::8009 :::* LISTEN

tcp 0 0 :::8080 :::* LISTEN

tcp 0 0 :::22 :::* LISTEN

port 8080 and 8009已经LISTEN了

6.打开浏览器,敲入主机地址和端口号8080,回车

如:http://192.168.1.254:8080

如果出现如下画面则说明,安装成功。

三、安装Apache

apache安装也是非常简单具体每个步骤操作都很简单。

1. 拷贝安装包到/usr/local,并在目标目录下进行解压。

[root@localhost local]# cd /usr/local

[root@localhost local]# tar -zxvf httpd-2.2.4.tar.gz

2. 配置安装参数,安装的目标目录为/usr/local/apache,建议设置enable-mods-shared=all,不用的module注释掉就行了!

[root@localhost local]# cd httpd-2.2.4

[root@localhost httpd-2.2.4]# ./configure –prefix=/usr/local/apache –enable-so –enable-mods-shared=all

3. 编译并安装。

[root@localhost httpd-2.2.4]# make

[root@localhost httpd-2.2.4]# make install

4. 启动Apache,并测试。

[root@localhost httpd-2.2.4]# cd /usr/local/apache/bin

[root@localhost bin]# ./apachectl start

打开浏览器,并在地址栏中输入主机的IP地址

http://192.168.1.254

如果出现以下画面则说明安装成功。

It works!

四、生成mod_jk.so连接器

1. 拷贝源包到/usr/local并在目标目录中解压(当然在原来的目录中解压也是可以的,作者是为了规范所以安装的程序都放在/usr/local下)。

[root@localhost bin]# cd /usr/local

[root@localhost local]# tar -zxvf jakarta-tomcat-connectors-1.2.15-src.tar.gz

2. 创建一个connector同步目录,目的是为了简化操作。

[root@localhost local]# ln -s jakarta-tomcat-connectors-jk2-2.0.4-src connector

3. 进行编译配置。大家一定要注意这几个参数中前三个是很重要的,必要时可以去相应的目录看看相关的文件是否存在。

[root@localhost local]# cd connector/native

[root@localhost native]# ./ buildconf.sh

[root@localhost native]#./configure –with-apxs=/usr/local/apache/bin/apxs –with-tomcat=/usr/local/tomcat –with-java-home=/usr/java/jdk –with-jni

4. 编译

[root@localhost apache]# make

5. 运行apache下的apxs,如果返回如下结果,证明正常。

[root@localhost native]# cd apache-2.0

[root@localhost apache-2.0]# /usr/local/apache/bin/apxs -n jk2 -i mod_jk.so

/usr/local/apache/build/instdso.sh SH_LIBTOOL='/usr/local/apache/build/libtool' mod_jk2.so /usr/local/apache/modules

/usr/local/apache/build/libtool –mode=install cp mod_jk.so /usr/local/apache/modules/

cp mod_jk.so /usr/local/apache/modules/mod_jk.so

Warning! dlname not found in /usr/local/apache/modules/mod_jk.so.

Assuming installing a .so rather than a libtool archive.

chmod 755 /usr/local/apache/modules/mod_jk.so

[root@localhost apache-2.0]#

ll /usr/local/apache/modules/mod_jk.so

-rwxr-xr-x 1 root root 709215 08-14 10:22 /usr/local/apache/modules/mod_jk.so

mod_jk.so生成成功了。

五 配置解释jsp

1. 对Tomcat的jk2.properties进行配置

[root@localhost apache]# cd /usr/local/tomcat/conf

[root@localhost conf]# vi jk2.properties

# channelUnix.file=${jkHome}/work/jk2.socket

# Just to check if the the config is working

shm.file=/usr/local/apache/logs/jk2.shm

# In order to enable jni use any channelJni directive

# channelJni.disabled = 0

# And one of the following directives:

2. 在Apache的conf目录中创建文件workers.properties,其中加入如下几行

[root@localhost conf]# vi workers.properties

其中可以添加Tomcat的虚拟目录

[uri:/examples/*]

这样你就可以访问examples

#——start ———

[shm]

file=/usr/local/apache/logs/shm.file

size=1048576

[channel.socket:localhost:8009]

tomcatId=localhost:8009

[uri:/examples/*]

# ——–end ————

保存退出

3. 配置Apache的/usr/local/apache/conf/httpd.conf,在LoadModule后添加一行,

LoadModule jk_module modules/mod_jk.so

在Apache启动的时候会装载mod_jk.so

[root@localhost conf]# cd /usr/local/apache/conf

[root@localhost conf]# vi httpd.conf

LoadModule jk_module modules/mod_jk.so

JkWorkersFile /usr/local/apache/conf/workers.properties

JkShmFile /usr/local/apache/logs/k2.shm

4. apache2.2.4可以用扩展文件的方式配置虚拟主机去掉Include conf/extra/httpd-vhosts.conf

# Virtual hosts

Include conf/extra/httpd-vhosts.conf

打开:/usr/local/apache/conf/extra/httpd-vhosts.conf

加入如下内容(根据自己的需要修改吧)

<Directory /var/www/html/www>

Options FollowSymLinks

AllowOverride None

o&#114;der allow,Deny

allow from all

</Directory>

<VirtualHost 192.168.1.254:80>

ServerAdmin hacder@hstc.edu.cn

DocumentRoot &#34;/var/www/html/www&#34;

ServerName www.mc333.com

UserDir &#34;/var/www/html/www&#34;

JkMount /*.jsp ajp13

CustomLog logs/www.mc333.com-access_log common

</VirtualHost>

<Location &#34;/WEB-INF/&#34;>

o&#114;der allow,deny

deny from all

</Location>

5. 拷贝tomcat例子到apache例子目录测试:

#cp –R /usr/local/tomcat/webapps/examples/ /usr/local/apache/htdocs/

6. 启动tomcat,apache并进行测试

[root@localhost conf]# cd /usr/local/tomcat/bin

[root@localhost bin]# ./shutdown.sh

[root@localhost bin]# ./startup.sh

Using CATALINA_BASE: /usr/local/tomcat

Using CATALINA_HOME: /usr/local/tomcat

Using CATALINA_TMPDIR: /usr/local/tomcat/temp

Using JAVA_HOME: /usr/local/jdk

[root@localhost bin]# cd /usr/local/apache/bin

[root@localhost bin]# ./apachectl restart

打开浏览器,输入http://主机地址/ examples

http://192.168.1.254/examples/jsp

测试jsp文件是否可以正常打开,如果都可以,恭喜你整合成功!

linux路由软件:zebra

路由:

1.简介

2.静态路由:

添加:

route add -host 10.0.2.1 gw 172.16.100.1

route add -net 202.1.1.0 netmask 255.255.255.0 gw 172.16.4.1

错误: gw必须和本机器在一个网段内.如果要跨网,设置跳数M.

或者指定ETHO出去:

add -net 202.1.1.0 netmask 255.255.255.0 gw dev eth0

?????????

删除:

route del -net 202.1.1.0 netmask 255.255.255.0

备注:

手工添加的路由命令,写入/etc/rc.d/rc.local

3.动态路由:

quagga: rhel4里的路由服务

是zebra的一个分支,更新速度快于zebra.

查看安装的服务:

cat /etc/services |grep rip

查看zebra安装的模板:

ls /etc/quagga

bgpd.conf.sample

bgpd.conf.sample2

ospf6d.conf.sample

ospfd.conf.sample

ripd.conf.sample

ripngd.conf.sample

vtysh.conf

vtysh.conf.sample

zebra.conf

zebra.conf.sample

无论开什么路由服务,都必须开zebra+协议服务.

如zebra+bgpd

—————-

hpstgmgr 2600/tcp zebrasrv # HPSTGMGR

discp-client 2601/tcp zebra # discp client

[root@szx quagga]# cat /etc/services |grep rip

ripng 521/tcp

ripng 521/udp

discp-server 2602/tcp ripd # discp server

servicemeter 2603/tcp ripngd # Service Meter

—————–

配置路由器的方法:

telnet 0 2601

o&#114;

telnet 路由器

4.启动zebra

1)复制模板

cd /etc/quagga

cp zebra.conf.samples zebra.conf

cp ripd.conf.samples ripd.conf

2)启动服务

service zebra start

service ripd start

rip(V2版本) 最高15跳 ???

ospf 最高255跳 ???

5.配置

cp ripd.conf.sample ripd.conf

———————–

! -*- rip -*-

!

! RIPd sample configuration file

!

! $Id: ripd.conf.sample,v 1.1.1.1 2002/12/13 20:15:30 paul Exp $

!

hostname ripd

password zebra

!

! debug rip events

! debug rip packet

!

router rip

! network 11.0.0.0/8

! network eth0

! route 10.0.0.0/8

! distribute-list private-only in eth0

!

!access-list private-only permit 10.0.0.0/8

!access-list private-only deny any

!

!log file ripd.log

!

log stdout 日志文件

————

————-

# more zebra.conf.sample

! -*- zebra -*-

!

! zebra sample configuration file

!

! $Id: zebra.conf.sample,v 1.1.1.1 2002/12/13 20:15:30 paul Exp $

!

hostname Router 用户名

password zebra 普通模式密码

enable password zebra 全局模式密码

!

! Interface&#39;s description.

!

!interface lo

! description test of desc.

!

!interface sit0

! multicast

!

! Static default route sample.

!

!ip route 0.0.0.0/0 203.181.89.241

!

!log file zebra.log

————-

5.2

启动服务

zebra 2601

ripd 2602

5.3连接设置路由

vtysh–>telnet 0 2601

rip —>telnet 0 2602

rip发音:瑞扑

5.4

linux> 用户模式

linux# 特权模式

.

.

.

常用命令:

在LINUX>模式下:

en 进入特权模式

conf t 进入全局模式

list 显示当前模式下命令格式 (no xxx:清除xxx命令的设置)

? 显示当前模式下命令

router rip 进入RIP路由配置模式

router ospf

router bgp 7675

write

tab键 命令补全

exit 退出

6.虚拟模块实验(讲义里没有)

#modprobe dummy

#lsmod |grep dummy

#ifconfig dummy0 192.168.11.1

————

如果不能加载,则:

#vi /etc/modprobe.conf 添加新的别名

eth2 dummy

————

show ip route??

7.实验

ip route 192.168.1.0/24 eth0 设置静态路由

hostname linux 设置主机名

password linux 设置进入用户模式密码

enable password linux 设置进入特权模式密码

write(or copy run start) 保存

8。

show ip route

route -n

返回顶部