`
biaoming
  • 浏览: 271174 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用Zebra做OSPF实验

阅读更多
OSPF(开放最短路径优先)路由协议是一项链路状态型技术,是目前IGP中应用最广、性能最优的一个 协议,解决了RIP不能解决的大型、可扩展的网络需求而写的,适用于大规模的网络。

Zebra支持OSPFv2和OSPFv3(用于IPv6的OSPF,CISCO还未对其封装),由于条件所限,下面的OSPF实 验同样是在两台单网卡的RedHat7.2下做的。

Zebra使用ospfd程序实现OSPF路由功能,但ospfd需要从zebra程序获得接口信息,所以zebra程序必须在 ospfd程序之前运行。ospfd不支持多个OSPF进程,我们不能指定OSPF进程号。

初始化第一台机器:

shell_1> cd /usr/local/etc
shell_1> cp zebra.conf.sample zebra.conf
shell_1> cp ospfd.conf.sample ospfd.conf
shell_1> zebra -d

进入zebra设置IP

shell_1> telnet localhost 2601
Password:
Router> en
Password:
Router# conf t
Router(config)# hostname r1
r1(config)# int eth0
r1(config-if)# ip address 192.168.5.121/24
r1(config-if)# ctrl+z
r1# copy run start

进入第一台机器的ospf设置

shell_1> ospfd -d
shell_1> telnet localhost 2604
Password:
ospfd> en
ospfd# conf t
ospfd(config)# hostname r1_ospfd !改个名字好辨认
r1_ospfd(config)# router ospf !启动ospf
r1_ospfd(config-router)# ospf router-id 192.168.5.121 !设置router-id
r1_ospfd(config-router)# network 192.168.5.0/24 area 0
!最关键的,来标识路由器上哪些IP网络号是OSPF的一部分,对于每个网络,我们必须标识该网络所属 的区域。由于我们只有两台机器,当然只有一个网络,所以只需执行一个network命令就够了。

对于我们的小网络,ospf就算配好了,下面来检验一下:

r1_ospfd(config-router)# ctrl+z
r1_ospfd# sh ip ospf route
============ OSPF network routing table ============
N 192.168.5.0/24 [10] area: 0.0.0.0
directly attached to eth0

============ OSPF router routing table =============

============ OSPF external routing table ===========

r1_ospfd# sh ip ospf database

OSPF Router with ID (192.168.5.121)

Router Link States (Area 0.0.0.0)

Link ID ADV Router Age Seq# CkSum Link count
192.168.5.121 192.168.5.121 126 0x80000002 0x8584 1

r1_ospfd# sh ip ospf int eth0
eth0 is up, line protocol is up

Internet Address 192.168.5.121/24, Area 0.0.0.0
Router ID 192.168.5.121, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 192.168.5.121, Interface Address 192.168.5.121
No backup designated router on this network
Timer intarvals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:07
Neighbor Count is 0, Adjacent neighbor count is 0

由于网络里没有其它的路由器,r1就把自己选为DR(指定路由器)了。Zebra对log处理可能有些问题,使 用log stdout不能显示各种debug信息,所以只能记录到文件,在shell下用tail命令查看。而且debug命令和 实际路由器也有不同。

r1_ospfd# debug ospf event
r1_ospfd(config)# log file /usr/local/etc/ospfd.log

然后我们在shell下查看debug信息

shell_1> tail -f /usr/local/etc/ospfd.log
--------------------------------8<---------------------------------------
2002/04/28 14:24:27 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
2002/04/28 14:24:37 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
2002/04/28 14:24:47 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
2002/04/28 14:24:57 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
2002/04/28 14:25:07 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
--------------------------------8<---------------------------------------

我们错过了最开始的信息,看到路由器每隔10秒发送一个hello数据包。hello数据包通过多目组播地址 224.0.0.5被发送出去,如果我们打开debug ospf packet all就能很清楚的看到。

第二台机器的设置

前面的初始化和第一台一样,不过这里名字设成r2便于辨认,IP设成了192.168.5.123/24。

进入第二台机器的ospf设置

shell_2> ospfd -d
shell_2> telnet localhost 2604
Password:
ospfd> en
ospfd# conf t
ospfd(config)# hostname r2_ospfd
r2_ospfd(config)# router ospf
r2_ospfd(config-router)# ospf router-id 192.168.5.123
r2_ospfd(config-router)# network 192.168.5.0/24 area 0

执行完network命令,我们看到第一台机器的tail -f /usr/local/etc/ospfd.log输出下面的信息:

--------------------------------8<---------------------------------------
2002/04/28 14:25:51 OSPF: Packet 192.168.5.123 [Hello:RECV]: Options *|*|-|-|-|-|E|*
2002/04/28 14:25:51 OSPF: NSM[eth0:192.168.5.121:0.0.0.0]: start
2002/04/28 14:25:52 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
2002/04/28 14:25:52 OSPF: couldn't find any VL to associate the packet with
2002/04/28 14:25:52 OSPF: DR-Election[1st]: Backup 192.168.5.123
2002/04/28 14:25:52 OSPF: DR-Election[1st]: DR 192.168.5.121
2002/04/28 14:25:52 OSPF: Packet[DD]: Negotiation done (Slave).
--------------------------------8<---------------------------------------

r1收到r2(192.168.5.123)发过来的hello数据包,交换信息后选举DR,由于本身192.168.5.121是DR了,所以 只选举了BDR就好了。这时在r1上就能看到r2了。

r1_ospfd# sh ip ospf neig

Neighbor ID Pri State Dead Time Address Interface RXmtL RqstL DBsmL
192.168.5.123 1 Full/Backup 00:00:37 192.168.5.123 eth0:192.168.5.121 0 0 0

检验其它信息

r1_ospfd# sh ip ospf database

OSPF Router with ID (192.168.5.121)

Router Link States (Area 0.0.0.0)

Link ID ADV Router Age Seq# CkSum Link count
192.168.5.121 192.168.5.121 1259 0x80000008 0x534e 1
192.168.5.123 192.168.5.123 1265 0x80000006 0x534a 1

Net Link States (Area 0.0.0.0)

Link ID ADV Router Age Seq# CkSum
192.168.5.123 192.168.5.123 1265 0x80000001 0x5a5a

r1_ospfd# sh ip ospf int eth0
eth0 is up, line protocol is up

Internet Address 192.168.5.121/24, Area 0.0.0.0
Router ID 192.168.5.121, Network Type BROADCAST, Cost: 10
Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 192.168.5.121, Interface Address 192.168.5.121
Backup Designated Router (ID) 192.168.5.123, Interface Address 192.168.5.123
Timer intarvals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:01
Neighbor Count is 1, Adjacent neighbor count is 1

和前面的输出信息相比,发生了很多变化,两台路由器已经相互识别了。OSPF不象RIP一样,每隔30秒 给所有的邻居广播一次完整的路由表,而是通过IP多目组播地址224.0.0.5每隔10秒发送一个很小的hello 数据包来维护邻居关系,当链路发生变化的时候,才重新计算。

拔掉两台机器连接的网线,看ospfd.log的记录:

--------------------------------8<---------------------------------------
2002/04/28 16:25:53 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
2002/04/28 16:25:57 OSPF: Packet 192.168.5.123 [Hello:RECV]: Options *|*|-|-|-|-|E|*
2002/04/28 16:26:03 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
2002/04/28 16:26:13 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
2002/04/28 16:26:23 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
2002/04/28 16:26:33 OSPF: make_hello: options: 2, int: eth0:192.168.5.121
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): Start
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): looked through areas
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_configured: 1
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_act_attached: 1
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_configured: 1
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_act_attached: 1
2002/04/28 16:26:37 OSPF: nsm_change_status(): scheduling new router-LSA origination
2002/04/28 16:26:37 OSPF: DR-Election[1nd]: Backup 0.0.0.0
2002/04/28 16:26:37 OSPF: DR-Election[1nd]: DR 192.168.5.121
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): Start
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): looked through areas
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_configured: 1
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): bb_act_attached: 1
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_configured: 1
2002/04/28 16:26:37 OSPF: ospf_check_abr_status(): areas_act_attached: 1
2002/04/28 16:26:37 OSPF: Timer[router-LSA]: (router-LSA Refresh expire)
2002/04/28 16:26:37 OSPF: counting fully adjacent virtual neighbors in area 0.0.0.0
2002/04/28 16:26:37 OSPF: there are 0 of them
2002/04/28 16:26:37 OSPF: SPF: calculation timer scheduled
2002/04/28 16:26:37 OSPF: SPF: calculation timer delay = 5
2002/04/28 16:26:37 OSPF: ospf_flood_through_interface(): considering int eth0:192.168.5.121
2002/04/28 16:26:37 OSPF: ospf_flood_through_interface(): considering nbr 192.168.5.121
2002/04/28 16:26:42 OSPF: SPF: Timer (SPF calculation expire)
2002/04/28 16:26:42 OSPF: ospf_spf_calculate: Start
2002/04/28 16:26:42 OSPF: ospf_spf_calculate: running Dijkstra for area 0.0.0.0
2002/04/28 16:26:42 OSPF: SPF Result: 0 [R] 192.168.5.121
2002/04/28 16:26:42 OSPF: ========== OSPF routing table ==========
2002/04/28 16:26:42 OSPF: ========================================
2002/04/28 16:26:42 OSPF: ospf_process_stub():processing stubs for area 0.0.0.0
2002/04/28 16:26:42 OSPF: ospf_process_stub():processing router LSA, id: 192.168.5.121
2002/04/28 16:26:42 OSPF: ospf_process_stub(): we have 1 links to process
2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): Start
2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): processing route to 192.168.5.0/24
2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): calculated cost is 0 + 10 = 10
2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): installing new route
2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): this network is on this router
2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): the interface is eth0:192.168.5.121
2002/04/28 16:26:42 OSPF: ospf_intra_add_stub(): Stop
2002/04/28 16:26:42 OSPF: children of V:
2002/04/28 16:26:42 OSPF: ospf_spf_calculate: Stop
2002/04/28 16:26:42 OSPF: ospf_ia_routing():start
2002/04/28 16:26:42 OSPF: ospf_ia_routing():not ABR, considering all areas
2002/04/28 16:26:42 OSPF: Pruning unreachable networks
2002/04/28 16:26:42 OSPF: Pruning unreachable routers
2002/04/28 16:26:42 OSPF: Route: Router Routing Table free
2002/04/28 16:26:42 OSPF: SPF: calculation complete
--------------------------------8<---------------------------------------

我们看到r1生成一个LSA包,通知其它路由器,由于网络里只有自己了,又选自己为DR。r2也是一样。 我们再插上网线,查看ospfd.log:

--------------------------------8<---------------------------------------
2002/04/28 16:52:08 OSPF: Packet 192.168.5.123 [Hello:RECV]: Options *|*|-|-|-|-|E|*
2002/04/28 16:52:08 OSPF: NSM[eth0:192.168.5.121:0.0.0.0]: start
2002/04/28 16:52:08 OSPF: DR-Election[1st]: Backup 192.168.5.123
2002/04/28 16:52:08 OSPF: DR-Election[1st]: DR 192.168.5.121
2002/04/28 16:52:08 OSPF: DR-Election[1st]: Backup 0.0.0.0
2002/04/28 16:52:08 OSPF: DR-Election[1st]: DR 192.168.5.123
2002/04/28 16:52:08 OSPF: DR-Election[2nd]: Backup 192.168.5.121
2002/04/28 16:52:08 OSPF: DR-Election[2nd]: DR 192.168.5.123
--------------------------------8<---------------------------------------

由于拔了网线,r1和r2都把自己选为DR,一个网络只能有一个DR,所以恢复连接后它们重新进行了DR选 举,由于192.168.5.123的router id大,所以它被选为DR。

保存一下配置

r1_ospfd# copy run start
Configuration saved to /usr/local/etc/ospfd.conf
r2_ospfd# copy run start
Configuration saved to /usr/local/etc/ospfd.conf

以上只是演示了最简单的OSPF的配置,而OSPF在大型网络才广泛的使用,配置也复杂多很多。即使是 Zebra,也还可用做复杂的多的OSPF实验。
分享到:
评论

相关推荐

    用Zebra在Linux上构建路由器实战手册

    成功安装后,Zebra 的可执行文件将被放置在 `/usr/local/sbin` 目录下,如 bgpd、ospf6d、ospfd、ripd、ripngd 和 zebra 等。 - 配置文件示例: 安装完成后,Zebra 提供了一系列的配置文件样本,这些文件位于 `/...

    zebra的相关说明

    Zebra是一款开源的路由软件,它提供了一套完整的路由协议栈,包括RIP、OSPF、BGP等,广泛应用于网络管理和研究领域。Zebra因其高度模块化的设计、强大的功能以及友好的用户界面而受到欢迎。本文档旨在帮助读者了解...

    Zebra使用手册

    Zebra的使用对于小型网络尤其适用,通过模拟路由器和应用路由协议(如RIP和OSPF),可以构建实验网络,进行动态路由学习和测试。这为网络工程师提供了一个经济高效的学习和实践平台,降低了网络设备的成本,同时也...

    zebra-0.95a及安装使用手册

    这些协议是互联网路由的基础,通过Zebra,用户可以在本地环境中进行实验,理解它们的工作原理,而无需实际的硬件设备。 在模拟路由器的过程中,Zebra提供了一个命令行接口(CLI),类似于真实的路由器配置界面。...

    zebra-quagga-linux-open-router-software

    Zebra是日本NTT实验室开发的一个网络路由服务软件,它提供了一个实时的操作系统接口,用于管理和控制路由协议。Zebra的核心功能包括路由表的维护、路由更新的处理以及与各种路由协议(如RIP, OSPF, BGP等)的交互。...

    BGP zebra开源代码

    4. **模拟和测试**:利用Zebra,可以构建虚拟环境,模拟各种网络拓扑和路由场景,进行实验和测试。 在"zebra-0.95a"这个压缩包中,包含了Zebra的特定版本,这为我们提供了一个特定时间点的软件快照,可以用来研究...

    router(Quagga-zebra)

    理解Quagga和Zebra的工作原理和使用方法对于网络管理员和系统集成者来说至关重要。它们允许用户在不依赖商业路由器的情况下搭建和管理复杂的网络环境,同时提供了高度的灵活性和可定制性。通过学习和实践这些开源...

    安全云环境下Zebra软件路由器的研究与实现.pdf

    实验结果显示,在大部分情况下,Zebra软件路由器的表现与传统硬件路由器相当,甚至在某些特定场景下表现出更好的性能。这进一步证明了Zebra软件路由器在安全云环境下作为硬件路由器的有效替代方案的可行性。 #### ...

    Linux下建立网络路由器(上).pdf

    为了打破这一局面,我们可以利用Linux技术构建一个小型的实验网络,并使用路由信息协议(RIP)和开放式最短路径优先(OSPF)这两种技术来展示不同的负载均衡方案。 在我们的实验中,我们将使用三个路由器,其中一个是由...

    Linux Network 实现路由器功能,包括RIP,OSPF,BGP,其中也加载了mpls.zip

    RIP使用周期性更新来传播路由信息,存在慢收敛和环路问题,但在教育和实验环境中仍然常见。 2. **OSPF(Open Shortest Path First)**:OSPF是IETF制定的链路状态路由协议,适用于大型网络。它使用Dijkstra算法计算...

    Ubuntu16下quagga进行网络路由仿真.doc

    本实验的目的是使用 Quagga 在 Ubuntu 16 下进行网络路由仿真,熟悉 Quagga 的安装、配置和使用。同时,通过实验,我们可以了解路由协议的工作原理和 Quagga 的配置方法。 实验环境 实验环境包括: * 软件:Linux...

    基于软路由系统的计算机网络实验教学改革研究.docx

    6. 在实验中,学生可以进行各种网络实验,如路由协议的学习(如OSPF、BGP)、网络故障排查、网络安全测试等,体验接近真实的网络环境。 这种基于软路由系统的实验教学方法不仅提供了高度仿真的网络环境,还鼓励学生...

    Ubuntu16下quagga进行网络路由仿真.pdf

    【Ubuntu16下Quagga进行网络路由仿真】 ...总结来说,通过这个实验,学生不仅可以掌握Quagga的使用,还能深化对网络路由协议的理解,锻炼解决问题的能力,这对于未来在IT行业从事网络相关工作是非常有益的。

    OSPFv3路由协议在Linux下的实现.pdf

    在文中提到的是使用GNU Zebra 0.95,这是一款路由软件,可用于配置和管理Linux系统的路由功能。通过Zebra,可以将Linux工作站转变为IPv6路由器,实现路由表的动态管理和更新。 【IPv6路由器的配置】 在Linux上配置...

    Quagga 开源路由协议栈

    同时,由于Quagga是用C语言编写的,因此它在资源效率方面表现出色,适用于内存和计算能力有限的环境。 对于希望深入学习和理解网络路由协议的IT从业者来说,Quagga是一个理想的工具。通过阅读和分析源代码,可以...

    基于lxd容器搭建路由器进行路由仿真.docx

    在本实验中,我们将使用LXD来创建和配置多个容器,每个容器代表网络中的一个节点,如路由器或虚拟主机。 实验的首要任务是配置LXD容器。通过执行`sudo lxc profile edit default`命令,我们可以编辑默认的容器配置...

    开源项目-osrg-gobgp.zip

    - 集成了Zebra库,可以将BGP学到的路由注入到其他网络层二协议,如OSPF或IS-IS。 - 实时监控和日志记录功能,便于故障排查和性能分析。 在开发和部署Gobgp时,你需要了解BGP的基本概念,如AS号、路由更新、路径选择...

Global site tag (gtag.js) - Google Analytics