Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1205031
  • 博文数量: 56
  • 博客积分: 400
  • 博客等级: 一等列兵
  • 技术积分: 2800
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-30 13:08
个人简介

一个人的差异在于业余时间

文章分类

全部博文(56)

文章存档

2023年(1)

2019年(1)

2018年(1)

2017年(1)

2016年(2)

2015年(20)

2014年(10)

2013年(7)

2012年(12)

2011年(1)

分类: LINUX

2015-11-12 15:45:12

  关于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. 配置编译安装

点击(此处)折叠或打开

  1. # tar -xvf zebra-0.95a.tar.gz
  2. # cd zebra-0.95a/
  3. # ./configure --disable-ipv6 --enable-vtysh
  4. #make
  5. #make install
这样就会安装到默认目录/usr/local下。 当然你也可以在配置的时候指定安装路径 : 

点击(此处)折叠或打开

  1. #./configure --prefix=INSTALL_PATH ...
3.配置配置文件 

点击(此处)折叠或打开

  1. #cp zebra.conf.sample /usr/local/etc/zebra.conf
  2. #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目录下找到它.

点击(此处)折叠或打开

  1. ./configure --enable-vtysh
这个是一个本地的命令配置,有时候我们需要在x86的服务器上使用,比如直接本地用户登录即进入命令行,但是zebra -d,使用毕竟我们还需要telnet一下.
这里我们加入x86 服务器上有一个用户 admin 密码admin ,那么我们进入到/etc/password
把这个用户的启动的shell给劫持掉就ok了.  替换成我们的vtysh. 当然你可以用linux用户管理命令自行添加用户,和替换这个shell.

点击(此处)折叠或打开

  1. admin:x:1000:1000:admin,,,:/home/admin:/usr/bin/vtysh
 常见的问题
1.

点击(此处)折叠或打开

  1. 修改zebra.h

  2. vi ./lib/zebra.h +103
  3. 增加:

  4. 1 #ifdef GNU_LINUX
  5. 2
  6. 3 #define __USE_GNU
  7. 4
  8. 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,他们之间的结构如下图所示


我们简单看下代码流程

对于具体的添加命令,可以参考具体代码实例,或者网络资料,这里不再详细讲解.
阅读(8066) | 评论(0) | 转发(0) |
0

上一篇:浅谈socket

下一篇:linux下的QinQ---8021AD

给主人留下些什么吧!~~