路由器是实现内网与外网互联的重要设备,根据网络复杂程度可设置静态路由和动态路由。对于简单的网络设置静态路由可方便于管理,但路由列表设置不当会引发一些网络互联故障。
近日,我部门(下称部门A)中有人反映不能访问上级部门(部门B)的网络。我从该人所用的计算机A1(IP地址为10.20.12.11/24)上用ping命令向部门B网络中的计算机B1(IP地址为10.20.30.110/24)和B2(IP地址为10.20.30.111/24)发送测试数据包,丢包率达100%,ping本部门的其它计算机则显示连接正常。检查其计算机IP设置,发现网关设置正确(正确网关为10.20.12.1),于是怀疑路由器不能正常工作。回来我自己办公室,用本办公室计算机A2、A3测试,发现以下奇怪现象:
(1) 在计算机A2(IP为10.20.12.12/24)上用ping命令分别ping部门B网络中计算机B1和B2,发现B1有正常回应,B2的回应率在20%~50%之间;在计算机A3(IP为10.20.12.13/24)中用ping命令分别ping计算机B1和B2,回应显示连接正常,丢包率为0。
(2) 将计算机A3的IP地址改为10.20.12.12/24后测试,ping得的结果同(1)中的计算机A2测试情况。
(3) 将计算机A2的IP地址改为尚未使用过的IP地址:10.20.12.22/24,测试与B1和B2的连接,结果显示正常,丢包率为0。
(4) 将计算机A1的IP地址改为尚未使用过的IP地址:10.20.12.23/24,测试与B1和B2的连接,结果显示正常,丢包率为0。#p#不过从刚才的表述好像犯罪分子完美的利用了以太网的缺陷,掩盖了自己的罪行。但其实,以上方法也有留下了蛛丝马迹。尽管,ARP数据包没有留下HostB的地址,但是,承载这个ARP包的ethernet帧却包含了HostB的源地址。
而且,正常情况下ethernet数据帧中,帧头中的MAC源地址/目标地址应该和帧数据包中ARP信息配对,这样的ARP包才算是正确的。如果不正确,肯定是假冒的包,可以提醒!但如果匹配的话,也不一定代表正确,说不定伪造者也考虑到了这一步,而伪造出符合格式要求,但内容假冒的ARP数据包。
不过这样也没关系,只要网关这里拥有本网段所有MAC地址的网卡数据库,如果和Mac数据库中数据不匹配也是假冒的ARP数据包。也能提醒犯罪分子动手了。
二、防范措施
1.建立DHCP服务器(建议建在网关上,因为DHCP不占用多少CPU,而且ARP欺骗攻击一般总是先攻击网关,我们就是要让他先攻击网关,因为网关这里有监控程序的,网关地址建议选择192.168.10.2,把192.168.10.1留空,如果犯罪程序愚蠢的话让他去攻击空地址吧),另外所有客户机的IP地址及其相关主机信息,只能由网关这里取得,网关这里开通DHCP服务,但是要给每个网卡,绑定固定唯一IP地址。
一定要保持网内的机器IP/MAC一一对应的关系。这样客户机虽然是DHCP取地址,但每次开机的IP地址都是一样的。
2.建立MAC数据库,把网吧内所有网卡的MAC地址记录下来,每个MAC和IP、地理位置统统装入数据库,以便及时查询备案。
3.网关机器关闭ARP动态刷新的过程,使用静态路邮,这样的话,即使犯罪嫌疑人使用ARP欺骗攻击网关的话,这样对网关也是没有用的,确保主机安全。
网关建立静态IP/MAC捆绑的方法是:建立/etc/ethers文件,其中包含正确的IP/MAC对应关系,格式如下:
192.168.2.32 08:00:4E:B0:24:47
然后再/etc/rc.d/rc.local最后添加:
arp -f 生效即可
4.网关监听网络安全。网关上面使用TCPDUMP程序截取每个ARP程序包,弄一个脚本分析软件分析这些ARP协议。ARP欺骗攻击的包一般有以下两个特点,满足之一可视为攻击包报警:第一以太网数据包头的源地址、目标地址和ARP数据包的协议地址不匹配。
或者,ARP数据包的发送和目标地址不在自己网络网卡MAC数据库内,或者与自己网络MAC数据库 MAC/IP不匹配。这些统统第一时间报警,查这些数据包(以太网数据包)的源地址(也有可能伪造),就大致知道那台机器在发起攻击了。
5.偷偷摸摸的走到那台机器,看看使用人是否故意,还是被任放了什么木马程序陷害的。如果后者,不声不响的找个借口支开他,拔掉网线(不关机,特别要看看Win98里的计划任务),看看机器的当前使用记录和运行情况,确定是否是在攻击。 #p#
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; #p#
为了访问 MRLG,将浏览器定向到 http://127.0.0.1/cgi-bin/mrlg.cgi。
图 1. Multi-Router Looking Glass
基本的实验室配置
我们的实验室配置包括两个 Cisco 3620 路由器和一个 ThinkPad X20(有一个内置的以太网接口和一个 Home-and-Away PCMCIA 以太网卡)。两个路由器通过串行线联接起来,并且每个路由器通过以太网连接到 ThinkPad。见我们的连接图:
图 2. 实验室连接图
使用 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 服务启动时,这些设置就会生效。
#p#
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#
|
#p#
生成的 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。
#p#
清单 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。
#p#
故障分析 考虑到网络连通情况与本机IP地址有关,参考本单位网络拓扑结构图(如图1),于是怀疑可能是由于部门B网络的防火墙设置引发该故障。由于部门B与本部门分别位于城市中两个不同地方,不方便查看其防火墙设置,于是打电话询问。但该部门网络管理员告之其防火墙是针对网络IP段设置的,也就是说,该防火墙对于部门A的整个网络IP段都是允许访问的。
→图1
分析以上原因,可能是本部门中某些计算机向部门B网络发送过非法访问信息,部门B的防火墙自动将该IP列入侵计算机名单,屏蔽了其发送的IP数据包,从而引发网络连接不正常的现象。调查本部门中所有计算机,将不能正常访问外部网络(部门B网络)的计算机的IP更换为新的IP地址,问题暂时解决。
但一个星期后,网络又出现故障,有几个原来能正常访问部门B计算机出现丢包现象,而有几个原来不能正常访问外部网络的IP地址却可以正常访问外部网络,看来问题可能不在防火墙上。
在计算机上A2(IP地址为10.20.12.12/24)用Tracert 命令跟踪测试,现象如下:
c:\>Tracert 10.20.30.110
Tracing route to 10.20.30.110 over a maximum of 30 hops
1 <1 ms <1 ms <1 ms 10.20.12.1
2 1 ms <1 ms 1 ms 192.168.10.2
3 1 ms 1 ms 1 ms 10.20.30.1
4 2 ms 1 ms 2 ms 10.20.30.110
Trace complete
将计算机上A2的IP地址改为10.20.12.22/24,用Tracert 命令跟踪测试,现象如下:
Tracing route to 10.20.30.110 over a maximum of 30 hops
1 <1 ms <1 ms <1 ms 10.20.12.1
2 1 ms * * 192.168.10.2
3 * 2 ms * 10.20.30.1
4 * * * Request timed out
5 * * * Request timed out
6 * * 2 ms 10.20.30.110
Trace complete
有时用Tracert跟踪测试得到4、5行及以后显示的都是Request timed out。
回顾近期网络结构变动情况,原来本部门中网关的位置用的是一个三层交换机(只使用其路由功能),当时内网能正常访问外部网络,在一星期前换为Cisco 3640路由器,将按三层交换机中的配置重新配置3640路由器,换后不久就出现以上网络故障。检查Cisco 3640的端口配置和路由配置,发现端口IP地址配置正常,而在路由列表中有两条路由:
ip route 0.0.0.0 0.0.0.0 192.168.10.2
ip route 0.0.0.0 0.0.0.0 10.20.12.254
因本部门网络是单位广域网中最下层子网,根据业务需要访问本单位整个广域网,而本部门网络只通过一台Cisco 3640路由器Router A接入部门B网络中,再通过部门B的路由器Router B接入单位广域网(见前面网络拓朴图)。为方便设置,我们只需要在Cisco 3640加入一条缺省路由“ip route 0.0.0.0 0.0.0.0 192.168.10.2”就可以将本部门对外部网络的的访问都转发到部门B的路由器Router B,从而实现网络的互联。可能由于设置人员的失误,在路由表中多加了一条并不存在的下一跳节点“ip route 0.0.0.0 0.0.0.0 10.20.12.254”。以致当内网中的计算机访问外部网络时,路由器有时不能将IP数据包正确地发送到192.168.10.2中,由于路由器加电工作后,内存中保存了内网对外网的访问路由列表,使得一些计算机一直能正常访问外网,而另一些计算机不能正常访问,当路由器重新启动(如第二个星期一早上重启路由器)后,访问路由列表重新建立,使得内部计算机访问外网的现象发现变化。
#p#
故障排除
在路由器特权模式下删除无用的路由列表:
# no ip route 0.0.0.0 0.0.0.0 10.20.12.254
#wr
重启路由器后,本部门所有计算机都能正常访问部门B的网络及单位广域网,故障得到彻底解决。
指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。
路由表的一般形式为:
Destination Gateway Flag Refs Use Inerface
其中,Destination目标网络或主机的IP地址;Gateway到达指定目地的使用网关;Flag标志字段,描述这一路由的一些特性;Refcnt表示为了建一次连接,该路由使用的次数;Use表示通过该路由传输的分组报文数;Interface 表示该路由使用的网络接口名。
一个典型的路由表的例子
Destination Gateway Flags Refs Use Interface
default 26.112.191.98 UGS 0 0 net0
default 26.112.191.98 UGS 0 18 net0
26.112.191 26.112.191.2 UC 1 0 net0
26.112.191.2 127.0.0.1 UGHS 3 92 lo0
127.0.0.1 127.0.0.1 UH 3 9786480 lo0
224 26.112.191.2 UCS 0 0 net0