关于zebra,我想大家都不陌生,很好的一个开源路由软件,结构清晰,架构简洁. 很方便,很强大,强大到可以抗衡思科的ios.
Cisco的IOS,这是一款由Cisco自主开发的闭源路由器软件;说到开源路由软件,比较有意思的是这样两款难兄弟软件:Zebra(斑马)和Quagga(斑驴)。做过防火墙,交换机或者路由器的人应该明白CLI,命令行接口是什么意思。操作者通过命令行接口,将设备的配置(ACL等)、状态查询(流量统计等)操作,以命令的方式下发给设备,从而配置其工作状态(如隔离端口,过滤数据流、抑制风暴,防止各类攻击等)。这些接口通过CLI的形式呈现,口语化的配置,使得复杂的配置变得简单起来。
前面介绍的zebra到2005年发行zebra-0.95a后停止更新。后来修改版本将 zebra作为守护进程,发行新的版本改名Quagga,由savannah.gnu.org这个组织维护.
目前zebra,quagga两个软件我都做了测试,基本没太大区别. 只是zebra不再更新.
下面就先说说安装使用吧
安装使用:
1. 下载源码 ,查看里面的INSTALL
2. 配置编译安装
-
# tar -xvf zebra-0.95a.tar.gz
-
# cd zebra-0.95a/
-
# ./configure --disable-ipv6 --enable-vtysh
-
#make
-
#make install
这样就会安装到默认目录/usr/local下。 当然你也可以在配置的时候指定安装路径 :
-
#./configure --prefix=INSTALL_PATH ...
3.配置配置文件
-
#cp zebra.conf.sample /usr/local/etc/zebra.conf
-
#cp vtysh.conf.sample /usr/local/etc/vtysh.conf
4.运行测试
./zebra –d
telnet 127.0.0.1 2601 // 本地测试用
由于它默认的端口时2601 ,这个可以自行在代码里面改.
对于远程登录,只要你连接网络某一个接口的ip地址,指定2601端口即可.
5.vtysh 的使用
除了zebra应用,相应的还有其他模块. 之前我们编译安装程序将被默认安装在/usr/local/sbin下,有:bgpd ospf6d ospfd ripd ripngd zebra六个服务程序
并没有vtysh程序, 之前我们配置开启了vtysh的编译,我们需要到源码的vtysh目录下找到它.
-
./configure --enable-vtysh
这个是一个本地的命令配置,有时候我们需要在x86的服务器上使用,比如直接本地用户登录即进入命令行,但是zebra -d,使用毕竟我们还需要telnet一下.
这里我们加入x86 服务器上有一个用户 admin 密码admin ,那么我们进入到/etc/password
把这个用户的启动的shell给劫持掉就ok了. 替换成我们的vtysh. 当然你可以用linux用户管理命令自行添加用户,和替换这个shell.
-
admin:x:1000:1000:admin,,,:/home/admin:/usr/bin/vtysh
常见的问题:
1.
-
修改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.
2. “array type has incomplete element type”
错误:数组元素的类型不完全
真正原因是:gcc高版本的要求更加严格,不允许类型在声明前使用
在文件 ospfd/ospfd.h
添加#include "log.h"
就可以了!
3 .对于quagga运行的时候的一些错误,大部分是权限的问题,具体自行查资料.
zebra 架构:
这里本人比较懒借用几个网络的图.
Zebra采用模块化的架构,,整个程序由一系列的守护进程构成,每个路由协议都有自己单独的路由处理进程,同时,它提供一个管理内核路由表的zebra 守护进程。路由处理程序通过zebra 守护程序管理内核路由表。由图示可知,在Zebra中,总共有五个路由守护进程,和一个管理进程。这些路由进程可以和管理进程分布在不同的机器上,每一个进程可以分别监听从不同的端口来的VTY连接。 具体的可以看/etc/services
代码布局:
在平时的使用中我们会发现,配置的时候有很多的视图(View),每个视图中有不同的命令可供用户输入进行配置。
这里,根据源码,视图可以认为是Node,而每一个命令称为element,他们之间的结构如下图所示
我们简单看下
代码流程:
对于具体的添加命令,可以参考具体代码实例,或者网络资料,这里不再详细讲解.
阅读(8121) | 评论(0) | 转发(0) |