zebra介绍和安装
说到路由软件,我第一印象就想起了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 3 cd zebra-0.95a/
修改zebra.h
vi ./lib/zebra.h +103
增加:
1 #ifdef GNU_LINUX 2 3 #define __USE_GNU 4 5 #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已经在后台运行。
最后,你可以大肆修改这个工程,增加自己的实现,这工程里面也有好多漂亮的代码,如日志管理,内存管理等,是一款不可多得的学习代码。