Quagga
2018-12-25 22:59:25 阿炯

Quagga是由一个日本开发团队基于Zebra开发的一个以GNU GPL版权方式发布的路由网关软件。该项目开始于1996年,可以使用Quagga将Linux机器打造成一台功能完备的路由器。

Quagga is a routing software suite, providing implementations of OSPFv2, OSPFv3, RIP v1 and v2, RIPng and BGP-4 for Unix platforms, particularly FreeBSD, Linux, Solaris and NetBSD. Quagga is a fork of GNU Zebra which was developed by Kunihiro Ishiguro.

The Quagga architecture consists of a core daemon, zebra, which acts as an abstraction layer to the underlying Unix kernel and presents the Zserv API over a Unix or TCP stream to Quagga clients. It is these Zserv clients which typically implement a routing protocol and communicate routing updates to the zebra daemon. Existing Zserv implementations are:


Quagga daemons are each configurable via a network accessible CLI (called a 'vty'). The CLI follows a style similar to that of other routing software. There is an additional tool included with Quagga called 'vtysh', which acts as a single cohesive front-end to all the daemons, allowing one to administer nearly all aspects of the various Quagga daemons in one place.

支持的路由协议
  Quagga能够同时支持RIPv1、RIPv2、RIPng、OSPFv2、OSPFv3、BGP-4和 BGP-4+等诸多TCP/IP协议。其中:
  RIPv1、RIPv2、OSPFv2适用于Ipv4的自治域系统内部网络路由协议。
  BGP-4是用于Ipv4的自治域系统之间的外部网络路由协议。
  RIPng、OSPFv3、BGP-4+主要扩展对Ipv6的支持。

特性
  模块化设计:Quagga基于模块化方案的设计,即对每一个路由协议使用单独的守护进程。
  运行速度快:因为使用了模块化的设计,使得Quagga的运行速度比一般的路由选择程序要快。
  可靠性高:在所有软件模块都失败的情况下,路由器可以继续保持连接并且daemons也会继续运行。故障诊断不必离线的状态下被诊断和更正
  支持Ipv6:Quagga不仅支持Ipv4,还支持Ipv6。

运行机制
  由于Quagga采用模块化的设计,因此Quagga运行时要运行多个守护进程,包括ripd ripngd ospfd ospf6d bgpd 和Zebra。
  其中,Zebra守护进程用来更新内核的路由表,而其他的守护进程负责进行相应路由选择协议的路由更新。

优点
就路由器而论,虽然有各种硬件可用,但是费用较高。所以想到用一个运行Linux系统构件的功能丰富的路由器作为代替。Quagga路由守护程序已经使这一切变为现实。因为Quagga支持Ipv4、Ipv6和其他各式各样的协议,所以能够满足通常所有的路由需要。使用Quagga的另一个好处是,这个软件配置的很多方面跟Cisco的IOS配置几乎完全相同,如果你在Cisco IOS环境中工作,可以轻松的过渡到Quagga系统,同时使用Quagga特能让你积累起丰富的类似于使用Cisco IOS路由器的经验和知识。

总之,现在完全可以拿一台PC机来完成一些必须用昂贵的Cisco路由器才能完成的比较复杂的路由协议处理控制功能。

Quagga包含一个核心守护进程zebra,它作为Unix底层核心的一个抽象层,表示为Unix上的一些Zserv API或Quagga客户端的TCP流。这些Quagga客户端实现路由协议并和zebra守护程序交换路由更新信息。这些Zserv客户端包括:
ospfd:实现OSPFv2
ripd:实现RIPv1和RIPv2
ospf6d:实现OSPFv3(IPv6)
ripngd:实现RIPv3(IPv6)
bgpd:实现BGP4+(包括对组播地址族和IPv6地址族的支持)

输入一个问号,看看Quagga提供了多少路由命令:
Router# ?
  configure  Configuration from vty interface
  copy       Copy configuration
  debug      Debugging functions (see also 'undebug')
  disable    Turn off privileged mode command
  end        End current mode and change to enable mode.
  exit       Exit current mode and down to previous mode
  help       Description of the interactive help system
  list       Print command list
  no         Negate a command or set its defaults
  quit       Exit current mode and down to previous mode
  show       Show running system information
  terminal   Set terminal line parameters
  who        Display who is on vty
  write      Write running configuration to memory, network, or terminal

Quagga把操作系统的网络接口当做路由器的接口,所以在做比较复杂的路由实验,会需要比较多的网卡。进入全局模式,尽可能把实际可用的配置命令都实验一遍:
Router# configure terminal
Router(config)#
取一个路由器名字:
Router(config)# hostname r1
r1(config)#
Quagga比较简单,登陆口令不是在line下修改,而是直接在全局模式下用password修改
r1(config)# password {password}
Quagga不支持enable secret {password}这种MD5加密口令,只能使用enable password {password}来修改 enable口令:
r1# configure terminal
r1(config)# enable password {password}
在路由器配置中加密所有的口令:
r1(config)# service password-encryption
回到特权模式:
r1(config)# exit
r1# show running-config
Current configuration:
!
hostname r1
password 8 alA5.vcyMAwXQ
enable password 8 ksbxOFN8xcFMc
service password-encryption
!
interface lo
!
interface eth0
!
interface eth1
!
line vty
!
end
我们看到刚才的明文密码都进行加密了,给我们的实验机也提高安全性。Quagga有一点要值得注意,如果我 们先设置了service password-encryption,然后再修改口令,show running-config就发现口令又都是明文的了,但是由 于有service password-encryption,所以就无法登陆了。

去掉会话超时,免得10分钟没有动作,就把我们给踢了。但是在实际的路由器配置中,为安全起见我们 最好还是设上会话超时。
r1# conf t
r1(config)# line vty
r1(config-line)# exec-timeout 0 0

设置日志记录,Quagga可以把日志记录到标准输出、syslog、以及指定输出文件:
r1(config-line)# exit
r1(config)# log stdout
r1(config)# no log stdout
r1(config)# log syslog
r1(config)# no log syslog
r1(config)# log file /usr/local/etc/zebra.log

配置接口IP地址:
r1(config)# interface lo
r1(config-if)# ip address 127.0.0.1/8
r1(config-if)# exit
r1(config)# interface eth0
r1(config-if)# ip address 192.9.200.231/24
r1(config)# interface eth1
r1(config-if)# ip address 192.168.1.232/24

Quagga比较奇怪,不能使用ip address 192.9.200.179 255.255.255.0这种形式设置IP。测试一下,就设置成 和Linux中使用的一样。
保存我们刚才的配置:
r1(config-if)# exit
r1(config)# exit
r1# copy running-config startup-config
Configuration saved to /usr/quagga/zebra.conf
r1#
 
这样一个完整的Quagga自身的配置就完成了,希望读者在下面自己多多练习,熟悉基本命令。

用Quagga配置RIP路由协议
RIP是应用较早、使用较普遍的IGP,适用于小型同类网络,是典型的距离向量(distance-vector)协议。RIP通过广播UDP报文来交换路由信息,每30秒发送一次路由信息更新。RIP提供跳跃计数(hop count)作为尺度来衡量路由距离,跳跃计数是一个包到达目标所必须经过的路由器的数目。如果到相同目标有二个不等速或不同带宽的路由器,但跳跃计数相同,则RIP认为两个路由是等距离的。RIP最多支持的跳数为15,即在源和目的网间所要经过的最多路由器的数目为15,跳数16表示不可达。RIPv2支持 验证、密钥管理、路由汇总、无类域间路由(CIDR)和变长子网掩码(VLSMs)。

Quagga支持RIPv2,使用ripd程序实现RIP路由功能,但ripd程序需要在zebra程序读取接口信息,所以zebra 一定要在ripd之前启动。

用Quagga配置OSPF路由协议
OSPF(开放最短路径优先)路由协议是一项链路状态型技术,是目前IGP中应用最广、性能最优的一个协议,解决了RIP不能解决的大型、可扩展的网络需求而写的,适用于大规模的网络。

Quagga支持OSPFv2和OSPFv3(用于IPv6的OSPF,CISCO还未对其封装),由于条件所限,Quagga使用ospfd程序实现OSPF路由功能,但ospfd需要从zebra程序获得接口信息,所以zebra程序必须在 ospfd程序之前运行。ospfd不支持多个OSPF进程,我们不能指定OSPF进程号。

 
用Quagga设置BGP路由协议
RIP和OSPF都是内部网关协议(IGP),BGP属于外部网关协议(EGP)。BGP广泛用于Internet以连接 ISP,并将企业与ISP互连。当BGP的影响被完全了解,并且至少下列情况之一存在时,在AS中使用BGP才是最恰当的:
  1 AS允许数据包穿过它到达其它自治系统(例如,某个服务提供商)。
  2 AS有到其它自治系统的多条连接。
  3 必须对进入和离开AS的数据流进行控制。

对于互连的自治系统来说,BGP并不总是恰当的解决方案,如果有如下情况中的一个或多个时,不要使 用BGP:
  1 只有到Internet或另一AS的单一连接。
  2 无需考虑路由策略或路由选择。
  3 路由器缺乏经常性的BGP更新的内存或处理器。
  4 对路由过滤和BGP路径选择过程的了解十分有限。
  5 在自治系统间的带宽较低。

在这些情况下,应该使用静态路由。

进入第一台机器的bgp设置
# service bgpd start
启动bgpd,我们看到TCP端口179已经打开。两台BGP路由器相互间建立一条TCP连接,交换消息以打开 和确认连接参数。这两台路由器被称为对等路由器,或者邻居。
# telnet localhost 2605
Password:
bgpd> enable
bgpd# conf t
bgpd(config)# hostname r1_bgpd
r1_bgpd(config)# router bgp 7675

配置里已经指定了AS为7675. AS是一个16bit的数字,其范围从1到 65535。RFC 1930给出了AS编号使用指南。从64512到65535的AS编号范围是留作私用的,类似私有IP。
r1_bgpd(config-router)# network 192.9.200.0/24
r1_bgpd(config-router)# neighbor 192.9.200.179 remote-as 767

以上配置过程摘抄于:Quagga 简介

最新版本:0.99.2


官方主页:https://www.quagga.net/