开源路由软件zebra介绍和和在Linux环境下的安装

感谢:http://www.cnblogs.com/iTsihang/archive/2012/11/22/2783249.html


============================================================================================================

    说到路由软件,我第一印象就想起了Cisco的IOS。这是一款由Cisco自主开发的闭源路由器软件;说到开源路由软件,比较有意思的是这样两款难兄弟软件:Zebra(斑马)和Quagga(斑驴)。做过防火墙,交换机或者路由器的人应该明白CLI,命令行接口是什么意思。操作者通过命令行接口,将设备的配置(ACL等)、状态查询(流量统计等)操作,以命令的方式下发给设备,从而配置其工作状态(如隔离端口,过滤数据流、抑制风暴,防止各类攻击等)。这些接口通过CLI的形式呈现,口语化的配置,使得复杂的配置变得简单起来。

    前面介绍的zebra到2005年发行zebra-0.95a后停止更新。后来修改版本将 zebra作为守护进程,发行新的版本改名Quagga,由savannah.gnu.org这个组织维护。

    而我最早接触Zebra是刚毕业那年,即2011年四月份,在第一家公司做基于MIPS和Intel Xscale的网络分析仪(专门提供给网络安全部门,集监控、采集和分析为一体的智能网络监控设备)。又因为我在Cisco的模拟器:Cisco Packet Tracer 上做过基于Cisco产品的网络架构项目。所以当得知有一款能和Cisco IOS媲美的路由软件,而且代码是开放的的时候,我很兴奋,于是赶紧学习起来。公司用的是zebra,版本我忘记了,遗憾的是当时没有写博的习惯,以致学习源码设计的各类辅助理解的图,都遗失了。如今只能根据自己的理解,加上温故源码慢慢回忆。

    到目前为止,zebra和Quagga与Cisco IOS的命令架构,配置格式十分相近,同时它们的开源性,有力阻止了闭源的Cisco的IOS对整个路由软件市场的垄断。尽管它与IOS之间存在着一些差异,但是熟悉IOS的网络工程师们会很快适应zebra和Quagga的网络环境的。Zebra和Quagga可以利用模块法对各种协议进行管理,这种设计是独一无二的。它可以根据网络的需要激活或者停止协议。而且安装有这款路由软件的主机,通过适当配置可以变成一个路由设备,这点让我很兴奋。目前,zebra已经停止发行,Quagga今年五月份推出quagga-0.99.21。不过对于国内的设备开发,这款开源软件已经足够了。

废话少说,进入正题



环境:ubuntu 12.04;

我只粗略看过Quagga的源码,框架上和zebra类似,所以下面就只介绍zebra的安装和使用,以及安装编译过程中可能出现的问题,和大家一起探讨。但是Quagga的源码,我在这里给出连接,希望好学之士能够学习。后面我尝试使用,有问题一起解决。

Quagga 源码:http://download.savannah.gnu.org/releases/quagga/

 

zebra安装

下载zebra源码

  地址:https://www.mangob2b.com/en/zebra/download-zebra

解压

1 tar -xvf  zebra-0.95a.tar.gz
2 cd zebra-0.95a/

修改zebra.h

vi ./lib/zebra.h +103

增加:

1 #ifdef GNU_LINUX
2 #define  __USE_GNU
3 #endif

告知在编译的时候使用GNU标准编译,同时这样做是因为增加了zebra对IPV6的支持。在系统头文件的in.h中定义了一个结构体:struct in6_pktinfo等结构,在zebra中被引用,所以增加定义宏以支持ipv6。

配置

./configure

编译和安装

make;make install【如果需要权限,请sudo】
如果编译过程中,出现个别库文件没有安装,请先安装依赖库文件,在后面配置vtysh的时候,可能会要求安装quagga支持;
服务程序将被默认安装在/usr/local/sbin下,有:bgpd ospf6d ospfd ripd ripngd zebra六个服务程序。

 




配置zebra运行环境

配置zebra

生成zebra配置文件。因为系统中有简单的例子,于是就用现有的配置文件,配置登陆和进入特权模式的密码,主机名等。

sudo cp zebra.conf.sample /usr/local/etc/zebra.conf

配置vtysh

sudo cp vtysh.conf.sample /usr/local/etc/vtysh.conf

启动zebra demo程序

./zebra –d

远程登陆

复制代码

telnet 127.0.0.1 2601  //如果是在局域网内登陆,则将IPaddress 改为具体的主机地址
2601是zebra demo的服务端口号,其他协议的端口号自行查找相关文件获悉。
如果需要启动Zebra提供的其他服务,在/usr/local/etc/下生成特定服务的配置文件。例如,希望启动RIP协议服务,则将rip相关的配置文件和上例一样拷贝到/usr/local/etc/下,在控制台运行:ripd –d,然后ps查看,会发现ripd已经在后台运行。
复制代码

 

最后,你可以大肆修改这个工程,增加自己的实现,这工程里面也有好多漂亮的代码,如日志管理,内存管理等,是一款不可多得的学习代码。


posted @ 2013-01-28 21:07  夏至冬末  阅读(1443)  评论(0编辑  收藏  举报