Quagga软件原名是Zebra是由一个日本开发团队编写的一个以GNU版权方式发布的软件。可以使用Quagga将linux机器打造成一台功能完备的路由器。
模块化设计:Quagga基于模块化方案的设计,即对每一个路由协议使用单独的守护进程。
运行速度快:因为使用了模块化的设计,使得Quagga的运行速度比一般的路由选择程序要快。
可靠性高:在所有软件模块都失败的情况下,路由器可以继续保持连接并且daemons也会继续运行。故障诊断不必离线的状态下被诊断和更正
支持Ipv6:Quagga不仅支持Ipv4,还支持Ipv6。
Quagga的运行机制
由于Quagga采用模块化的设计,因此Quagga运行时要运行多个守护进程,包括ripd ripngd ospfd ospf6d bgpd 和Zebra。
其中,Zebra守护进程用来更新内核的路由表,而其他的守护进程负责进行相应路由选择协议的路由更新.
就是ripd,bgpd,ospfd三个路由协议守护进程,把通过动态路由协议学习到路由信息都要交给zebra守护进程,然后zebra进程与 kernel routed交互,把路由信息给kernel 内核根据路由协议守护进程学习到路由内容更新自己路由表。
每个守护程序都有自己的路由表。zebra守护程序维护内核路由表,并且还负责在各种路由协议守护程序之间重新分配信息。
关系如图:
安装:
安装依赖软件包
yum install readline-devel (--enable-vtysh需要)
解压:
tar -zxvf *.tar.gz
cd *
配置,生成Makefile文件
./configure --enable-vtysh --enable-user=root --enable-group=root --localstatedir=/var/run/quagga --sysconfdir=/etc/quagga
1
--enable-vtysh 生成vtysh,vtysh是一个可以直接配置其他Quagga进程的shell。不使用vtysh的话,需要telnet到每个进程中去配置,比较麻烦。
--enable-user=root --enable-group=root 默认运行用户为quagga,这里修改为root,可以不用改变文件夹的属性,也不用单独增加用户。
--localstatedir=/var/run/quagga 运行时的PID文件位置
--sysconfdir=/etc/quagga 运行时的配置文件目录,默认位置在/usr/local/etc中
执行./configure后会显示所有的配置清单,可以核对一下。
Quagga configuration
--------------------
quagga version : 0.99.22.4
host operating system : linux-gnu
source code location : .
compiler : gcc
compiler flags : -Os -fno-omit-frame-pointer -g -std=gnu99 -Wall -Wsign-compare -Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wchar-subscripts -Wcast-qual
make : make
includes :
linker flags : -lcrypt -lrt -lm
state file directory : /var/run/quagga
config file directory : /etc/quagga
example directory : /etc/quagga
user to run as : root
group to run as : root
group for vty sockets :
config file mask : 0600
log file mask : 0600
默认的优化选项为-Os,如果需要使用gdb调试的,可以使用参数--with-cflags设置编译优化选项为-O0。
./configure --enable-vtysh --enable-user=root --enable-group=root --localstatedir=/var/run/quagga --sysconfdir=/etc/quagga --with-cflags="-O0 -fno-omit-frame-pointer -g -std=gnu99 -Wall -Wsign-compare -Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wchar-subscripts -Wcast-qual"
1
编译、安装
make
make install
在make之后可能会出现如图的错误
解决办法·:yum install texinfo
make clean
make
安装好后,可执行文件在目录/usr/local/sbin/,配置文件在/etc/quagga/。
创建Quagga相关目录
运行时的PID文件位置
mkdir /var/run/quagga
chmod 777 /var/run/quagga
1
2
注意:Centos 7的/var/run/目录存放在tmpfs中,也就是内存里,重启后run目录会清空。所以每次启动后需要重新创建quagga目录。
配置文件目录
mkdir /etc/quagga
chmod 777 /etc/quagga
1
2
log目录
mkdir /var/log/quagga/
chmod 777 /var/log/quagga/
1
2
编辑配置文件
以zebra为例
cp /etc/quagga/zebra.conf.sample /etc/quagga/zebra.conf
如果要运行ripd\bgpd \ospfd的守护进程(启动rip bgp ospf 协议)也要配置编辑配置文件
cp /etc/quagga/*.conf.sample /etc/quagga/*.conf
1
vim /etc/quagga/zebra.conf 进行修改
(添加红框中的部分)
这个操作就是把zebra守护进程运行内容写到zerbra.log中。
ripd\bgpd \ospfd守护进程也要添加,意思一样。
至此,Quagga安装成功。下面仍然以zebra为例简单介绍Quagga单个模块的运行。
运行zebra守护进行
/usr/local/sbin/zebra -h // 查看命令行选项
/usr/local/sbin/zebra -d // 启动zebra后台程序
运行其他守护进程
/usr/local/sbin/(ospfd|bgpd|ripd) -d
简单的配置使用
首先 cat /etc/service 可以看到各种协议所对应的接口
可以看到zebra的端口是为zebre vty ------2601
ospfd 2604
登录zebra的TTY
telnet 127.1 2601 // 默认密码:zebra
- 登录zebra后就可以使用zebra的命令进行操作。登录其他的守护进程,都是通过它的端口登录的。
- 也可以直接执行
vtysh
进行配置。 - 如果不能使用telnet,则安装
yum install telnet
selinux会影响zebra运行,关闭掉
/etc/selinux/config文件中,设置为:disabled
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
如果路由不能转发
修改/etc/sysctl.conf文件, 启用IPv4转发功能。
net.ipv4.ip_forward = 1
如果发生了源路由验证的路由问题
修改/etc/sysctl.conf文件, 禁用源路由验证功能。
net.ipv4.conf.default.rp_filter = 1- 为了使用quagga里面的守护进程,配置各种协议开始的开始步骤
1.vtysh 或者 telnet 127.0.0.1 *(守护进程端口)
2.enable 将模式从查看模式更改为启用模式
3.configure terminal configure 终端 -用于配置路由器 进入全局配置模式
4.协议配置命令 - 5 . do write (保存协议配置命令到conf文件中)
这是说明一点
登录vtysh,写配置动态路由协议命令,最后是保存到*.conf文件中 ,所以也可以直接把动态路由协议配置命令直接写到.conf文件中,不用登录vtysh
show running-config :查看写进路由器*.conf的内容
show ip ospf database :该命令用于show出该路由器所学习到的完成的网络拓扑。
show ip ospf neighbor:查看ospf的邻居
show ip ospf database router X.X.X.X
由于该命令show出来的是ospf一类(路由器)LSA,所以show出来的内容永远都是路由器所在Area内的信息;
就算后面的X.X.X.X是一台ABR,show出来的内容同样只是ABR上属于该路由器所在Area内的信息;
show ip ospf database network X.X.X.X
该命令show出来的是ospf二类(网络)LSA,所以show出来的内容同样是属于路由器所在区域内的中转网络信息;
后面所跟的X.X.X.X是指在广播型LAN中担任DR的路由器上属于该LAN网络的子接口的IP地址信息.即中转网络LSID
例如Router A的Fa0/1与Router B的Fa0/2以及Router C的Fa0/3过LAN相连,Router B被推举成为DR,
那么此时该Lan虚拟出来的中转网络的LSID就是X.X.X.X就应该是Router B的Fa0/2接口的接口IP地址.
show ip ospf database summary X.X.X.X
该命令show出来的是ospf三类(汇总)LSA,所以show出来的内容是属于其他Area泛洪过来的网络信息.
这里面是不会存在该路由器所在Area的网络信息的.所以ospf正是使用三类LSA来反映非本Area网络拓扑.
show ip route :会显示哪些是内核学的 哪些是bgp学的 哪些是ospf学的