Linux下使用Quagga搭建软路由-OSPFv2学习

原创 2017年01月03日 22:03:51

一、背景

在学习路由协议如OSPF协议时,需要进行一个实操的练习,若手里又没有核心交换机,怎么破?

本文讲述了如何在Linux系统上搭建软路由环境,并使用OSPF路由协议完成路由表的学习。

二、相关知识

2.1 Quagga

Quagga是一款开源路由软件套件,它可以用来将你的Linux设备变成一个功能完备的路由器,支持RIP,RIPNG,OSPFv2,OSPFv3,BGP等路由协议[1]。

2.2 OSPF

OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。
OSPF相关概念比较多,以下挑几个重要知识点进行说明。
LSA(Link-State Advertisement是链接状态协议使用的一个分组,它包括有关邻居和通道成本的信息。 LSAs被路由器接收用于维护它们的路由选择表。
OSPF从报文的结构上划分,可以分为以下几种[2]:
  1. Hello报文(Hello Packet):周期性地发送,用于维护邻居关系以及DR/BDR选举;
  2. DD报文(Database Description Packet):用于两台路由器进行数据库同步,包含自己的LSDB(LSA集合)信息;
  3. LSR报文(Link State Request Packet):在交换DD报文后续,使用该报文向对方请求所需的LSA信息;
  4. LSU报文(Link State Update Packet):向对方发送所需的LSA信息集合。
  5. LSAck报文(Link State Acknowledgment Packet):用于对LSU报文进行确认。

另一个重要的知识点就是邻居建立过程,如下图所示:
对于图上的7种状态进行说明:
  1. Down:在Down状态下,OSPF进程还没有与任何邻居交换信息。OSPF在等待进入Init状态;
  2. Init:OSPF路由器以固定的时间间隔(缺省10s)发送Hello分组,以便与邻居路由器建立特殊的关系;
  3. Two-Way:每台OSPF路由器都使用分组试图与同一个IP网络中的所有邻居路由器建立双向状态或双向通信。Hello分组中含有发送者已知的OSPF邻居列表。当路由器看到它自己出现在一个邻居路由器的Hello分组中时,它就进入了双向状态;
  4. ExStart:当路由器与它的邻居进入到ExStart状态后,他们之间的会话就表征为一种毗邻关系,但这时路由器还没有变成全毗邻状态。ExStart状态是使用DD(数据库描述)分组建立的,两个路由器用Hello分组协商出“主从关系”;
  5. Exchange:在交换状态下,邻居路由器使用类型2的DD分组来互相发送它们的链路状态信息,也就是说路由器相互描述它们的链路状态数据库。路由器将它们所学到的信息与其现存的链路状态数据库进行比较,并且单独确认每个DD分组,如果任何一台路由器接收到不在其数据库中的链路信息,该路由器就向其邻居请求有关该链路的完整更新信息。完整的路由信息在“Loading”状态下被交换;
  6. Loading:在相互描述过各自的链路状态数据库之后,路由器可以用LSR(链路状态请求)分组来请求更完整的信息。当路由器接收到一个LSR的时候,它会用一个LSU(链路状态更新)分组进行回应。这些LSU分组含有确切的LSA,而LSA是链路状态型路由选择协议的核心,LSU分组由LSAck分组所确认;
  7. Full Adjacency:加载状态结束之后,路由器就进入全毗邻状态。每台路由器都保存着一张毗邻路由器列表,它就是称为毗邻数据库。

三、配置过程

配置的拓扑如下,使用两个CentOS 分别模拟 Rt170、Rt171:


3.1 Quagga安装

CentOS下可以直接使用yum install quagga进行安装,也可以源码安装,但是要注意第三方库的依赖。
安装完成后,需要在 /etc/quagga 把 zebra.conf、vtysh.conf、ospfd.conf 拷贝出来。
启动命令使用 service zebra start、service ospfd start进行启动,若对端收不到报文,可能还需要关闭防火墙 iptables。

3.2 OSPF配置

进入vtysh进行初始配置,设置日志文件 /var/log/quagga/quagga.log
配置接口 分别对应拓扑


设置OSPF ,router ospf、route-id、network 192.168.50.0/24 area 0

配置成功后,查看邻居信息,可以看见状态分别从 init -> two-way ->... full 进行切换,最终可以看出主从关系

查看路由表,发现可以学习到各自对端的路由表信息

同时,使用 Wireshark 抓包,可以验证报文交换的过程


参考文章:
[1] Quagga安装 http://os.51cto.com/art/201410/453623.html
[2] OSPF报文格式 鸿鹄论坛
[3] OSPF邻居关系建立过程详解 http://blog.sina.com.cn/s/blog_77f868250101jbcb.html
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

linux下使用quagga配置ospf协议

环境:三台(VM虚拟机) 一、ospf协议   OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gatewa...

linux软路由的实现

一、前言一套通信协议的实现除了硬件编/解码与信号传输之外,其余的部分均可以有所选择的由软件或者硬件实现。好比最普通的RS232协议,如果你的硬件系统集成了相关模块,CPU直接从缓冲区读写数据即可,否则...

在Linux主机下的软路由

实验名称:在Linux主机下的软路由 实验说明:此实验不需要安装任务软件包。Linux自带的!! 实验拓扑:ip地址规划如图所示: 实验环境:测试机是windows或者是Li...
  • educast
  • educast
  • 2012年01月16日 20:03
  • 3290

Quagga 简介及Quagga使用基础谈用Quagga配置RIP路由协议

Quagga 简介 什么是Quagga   Quagga软件原名是Zebra是由一个日本开发团队编写的一个以GNU版权方式发布的软件。Quagga项目开始与1996年,当前版本是0.98.4版 可...

Quagga是我在一家做交换机公司实习时要求学习的,不过我还没怎么学就实习结束了

Quagga是一款功能比较强大的开源路由软件,支持rip,ripng,ospfv2,ospfv3,bgp等协议。目前最新版本为Quagga 0.99.17。安装Quagga的目的是使装有linux(我...

利用quagga实现动态路由

版权声明:对于本博客所有原创文章,允许个人、教育和非商业目的使用,但务必保证文章的完整性且不作任何修改地以超链接形式注明原始作者、出处及本声明。     博客地址:http://blog.csd...

运行第一个容器 - 每天5分钟玩转容器技术(4)

在ubuntu虚拟机中运行第一个容器。

(2) quagga源码分析--路由信息处理zebra-rib

(2) quagga源码分析--路由信息处理zebra-rib
  • ztguang
  • ztguang
  • 2017年04月29日 10:57
  • 369

使用Quagga测试IPv4/IPv6 BGP双栈动态路由(by quqi99)

作者:张华  发表于:2016-07-04版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明( http://blog.csdn.net/quqi99 )测试环境 ...
  • quqi99
  • quqi99
  • 2016年07月04日 17:58
  • 3363

如何使用 Quagga BGP(边界网关协议)路由器来过滤 BGP 路由

在之前的文章中,我们介绍了如何使用 Quagga 将 CentOS 服务器变成一个 BGP 路由器,也介绍了 BGP 对等体和前缀交换设置。在本教程中,我们将重点放在如何使用前缀列表prefix-li...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下使用Quagga搭建软路由-OSPFv2学习
举报原因:
原因补充:

(最多只允许输入30个字)