llzqq,同意你的建议,我已经更改了标题 :D
继续转帖如下:
基本的实验室配置
我们的实验室配置包括两个 Cisco 3620 路由器和一个 ThinkPad X20(有一个内置的以太网接口和一个 Home-and-Away PCMCIA 以太网卡)。两个路由器通过串行线联接起来,并且每个路由器通过以太网连接到 ThinkPad。见我们的连接图:
图 2. 实验室连接图
|
| andyliu 回复于:2004-09-06 14:41:44
| 使用 Zebra 配置接口
我们首先从 RIP 协议开始讲述使用 Zebra 来管理路由。如前所述,我们已经在 ThinkPad 上安装了 Zebra。由于我们在 ThinkPad 上还需要另一个网络接口,我们安装了一个虚拟的网络设备,如下:
# modprobe dummy
# ifconfig dummy0
我们 telnet 到 Zebra 端口来开始配置。我们按照以下顺序与 Zebra 会话:
清单 3. 配置 IP 接口
[color=darkblue:a30cc25b34][/color:a30cc25b34]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
[color=darkblue:a30cc25b34][/color:a30cc25b34]
要注意的是我们没有用常规的方法设置 ThinkPad 的 IP 地址;而是通过 Zebra 来设置它们。这些设置保存在 /etc/zebra/zebra.conf 配置文件中,因此每次当 Zebra 服务启动时,这些设置就会生效。
Zebra.conf 文件中由 Zebra 修改的部分如下:
清单 4. 由 Zebra 修改过的 /etc/zebra/zebra.conf 文件
[color=darkblue:a30cc25b34][/color:a30cc25b34]!
! 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
!
[color=darkblue:a30cc25b34][/color:a30cc25b34]
| andyliu 回复于:2004-09-06 14:49:24
| 我们还可以用 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
| andyliu 回复于:2004-09-06 14:54:05
| 使用 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。
参考资料
GNU Zebra 网站是查找 Zebra 相关资源的理想位置。
Multi-Router Looking Glass 需要 Net::Telnet Perl 包的支持, 可以从 CPAN 获得。
O'Reilly BGP 一书的作者 Iljitsch van Beijnum 在其文章“Running Zebra on a Unix Machine”中对 Zebra 进行了总体上的介绍。
在 Cisco's UniverCD 教程中有对 RIP 协议和 OSPF 协议更为详细的介绍。
如果您需要学习一些关于构建 Linux 局域网的基本知识,请参考“局域网的组建 ” (developerWorks, 2001年2月).
正在使用无线? 请参考“在 Linux 上构建无线接入点” (developerWorks, 2003年7月)。
在我们的网络列表中可以找到更多的 IBM 网络软件。
要获得所有 IBM 网络硬件的信息,请访问网络产品主页。
在 developerWorks Linux 专区可以找到更多为 Linux 开发者准备的参考资料。
关于作者
Dominique Cimafranca 是 IBM Philippines 的一个 Linux IT 专家。 他为几个企业客户在所有的 IBM 硬件平台上安装了 Linux。在过去的三年中他一直致力于 Linux 以及技术话题的写作。您可以通过 dom-at-sketches.kom.ph 与他联系。
Rex Young 是 C-Cube (Philippines 的主要呼叫中心) 的网络管理员,有过大型 Cisco internet 网络和 VoIP 实现的工作经历。他是一名 Cisco 网络认证专家。您可以通过 youngrv-at-c-cubeservices.com 与他联系。
好了,转帖完毕,希望以上文档对大家能有作用 8)
| andyliu 回复于:2004-09-06 15:34:02
| 哎,怎么没人对这个工具感兴趣啊。。。。。
| andyliu 回复于:2004-09-06 17:12:48
| 兄弟们,没人看吗?帖得我好辛苦的啊,而且确实是好东西.
| feiwupiaoxue 回复于:2004-12-13 11:43:17
| 我对此感兴趣,谢谢,测试中!
| strongxxxx 回复于:2004-12-13 13:56:51
| 这篇文章我以前也看过,不错!
我再自己的RH9上也安装过Zebra也挺好用的.但是我觉得使用linux启动态路由的情况应该不多吧
| jeffreyli 回复于:2004-12-13 15:26:56
| 不错,,,帮楼主顶一下,
不过就是没有环境,先收藏吧,,,
:em02:
| ldqqxf 回复于:2005-02-03 22:08:08
| 我顶,东西非常不错,
正是我要的
|
|
|