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

一、背景

在学习路由协议如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报文进行确认。

另一个重要的知识点就是邻居建立过程,如下图所示:
Linux下使用Quagga搭建软路由-OSPFv2学习_第1张图片
对于图上的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:

Linux下使用Quagga搭建软路由-OSPFv2学习_第2张图片

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
Linux下使用Quagga搭建软路由-OSPFv2学习_第3张图片
Linux下使用Quagga搭建软路由-OSPFv2学习_第4张图片
配置接口 分别对应拓扑
Linux下使用Quagga搭建软路由-OSPFv2学习_第5张图片
Linux下使用Quagga搭建软路由-OSPFv2学习_第6张图片

设置OSPF ,router ospf、route-id、network 192.168.50.0/24 area 0
Linux下使用Quagga搭建软路由-OSPFv2学习_第7张图片
Linux下使用Quagga搭建软路由-OSPFv2学习_第8张图片

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

查看路由表,发现可以学习到各自对端的路由表信息
Linux下使用Quagga搭建软路由-OSPFv2学习_第9张图片
Linux下使用Quagga搭建软路由-OSPFv2学习_第10张图片

同时,使用 Wireshark 抓包,可以验证报文交换的过程
Linux下使用Quagga搭建软路由-OSPFv2学习_第11张图片

参考文章:
[1] Quagga安装 http://os.51cto.com/art/201410/453623.html
[2] OSPF报文格式 鸿鹄论坛
[3] OSPF邻居关系建立过程详解 http://blog.sina.com.cn/s/blog_77f868250101jbcb.html

你可能感兴趣的:(linux,linux,quagga,OSPF,交换机)