Quagga特性;Quagga相关文件;Quagga配置特性与错误
============================================================================================================
Quagga软件原名是Zebra是由一个日本开发团队编写的一个以GNU版权方式发布的软件。
Quagga的特性
1.模块化设计:Quagga基于模块化方案的设计,即对每一个路由协议使用单独的守护进程。
因此Quagga运行时要运行多个守护进程,包括ripd ripngd ospfd ospf6d bgpd 和Zebra。
其中,Zebra守护进程用来更新内核的路由表,而其他的守护进程负责进行相应路由选择协议的路由更新。
2.运行速度快:因为使用了模块化的设计,使得Quagga的运行速度比一般的路由选择程序要快。
3.可靠性高:在所有软件模块都失败的情况下,路由器可以继续保持连接并且daemons也会继续运行。故障诊断不必离线的状态下被诊断和更正
---------------------------------------------------------------------------------------------------------------
Quagga相关文件
Quagga的配置文件均放在/etc/quagga目录下。
Quagga的模板文件在/usr/share/doc/quagga-0.99.22.4/
vtysh.conf为配置Quagga所使用的shell的配置文件
zebra.conf是Quagga的主要配置文件。
Quagga对每钟路由选择协议有单独的配置文件:
RIP 所需的 ripd.conf
OSPF所需的ospf.conf
BGP所需的 bgp.conf
---------------------------------------------------------------------------------------------------------------
Quagga配置特性与错误:
1.配置界面有锁机制,当一个进程进入到配置界面时,其他进程无法接入到配置界面
2.centos与vtysh的状态是实时同步的。例如:
a.centos增加veth pair接口对,在vtysh进程"show interface",可以看到接口实时更新
b.centos中实时进行网卡IP的配置,zebra进程"show interface",可以看到接口IP实时更新
c.在vtysh进程进行端口IP配置,centos "ip a",可以看到信息实时更新
3.vtysh进行配置,write时,保存所有相关进程的配置;ospfd write时,只保存ospfd.conf;
zebra进程只加载zebra.conf的配置,其配置界面也只有配置zebra的相关命令,没有其他配置命令,例如:无法配置动态路由协议;write时,只保存zebra.conf
ospfd进程只加载ospfd.conf的配置,其配置界面也只能配置ospf相关配置,没有其他配置命令,例如:可以进入到接口视图,但无法配置接口IP;也无法配置bgp;write时,只保存ospfd.conf
vtysh管理界面则加载quagga相关活动进程的配置文件;拥有全部的配置命令;write时,保存所有的相关配置到各个配置文件中。
4.个人猜想:vtysh可能只是将所有相关进程的配置集中起来,去重存异。
现象1:当zebra.conf和ospf.conf的password配置不同时,vtysh界面show run看到2个password;
现象2:在现象1的基础上,vtysh界面进行password修改,write后,zebra.conf和ospf.conf显示为相同的password
5.错误:vtysh界面无法保存ospfd配置,可能是因为ospfd.conf文件权限的关系导致的。猜测正确的修复方式应该是将文件属主修改为quagga
6.错误:write时提示“Can‘t open configuration file /etc/quagga/zebra.conf.OS1Uu5.”,系selinux导致的。
Quagga特性;Quagga相关文件;Quagga配置特性与错误
Quagga安装前准备;Quagga运行守护进程;zebra/ospfd/bgpd命令参数;进入配置界面的多种方式
================================================================================================================
Quagga安装前准备
yum install readline-devel (--enable-vtysh需要)
yum install quagga
#SELinux需要关闭,未关闭的情况下,自己遇到的问题就是write时报错“Can‘t open configuration file /etc/quagga/zebra.conf.OS1Uu5.”
getenforce #查看SELinux状态
setenforce 0 #临时关闭SELinux,设置SELinux 成为permissive模式(不用重启机器)
修改/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled #改配置文件需要重启机器
cat /etc/services |grep 2601 #该文件保存了服务和端口的对应关系,不建议修改
---------------------------------
安装Quagga的另一个总结版本:
1.yum install quagga
2.rpm -ql quagga #找到其中一个文件/usr/share/doc/quagga-0.99.22.4/ospfd.conf.sample
3.将文件放入目录/etc/quagga
cp /usr/share/doc/quagga-0.99.22.4/ospfd.conf.sample /etc/quagga/ospfd.conf
4.启动ospf进程:systemctl start ospfd
5.命令vtysh进入到ospf的配置界面(和思科的非常相似,命令也是可以补齐的)
6.ss -ntlp #可以看到ospf的进程信息
7./proc/sys/net/ipv4/ip_forward #centos系统的IP转发功能,0开启,1关闭
-----------------------------------------------------------------------------------------------------------------
Quagga运行守护进程
systemctl start zebra
systemctl start ospfd #相当于/usr/sbin/ospfd -d -A 127.0.0.1 -f /etc/quagga/ospfd.conf
service zebra start
chkconfig zebra on
chkconfig --list zebra
zebra -d #以守护进程的方式运行zebra,但是与‘systemctl start zebra’有区别,缺少了一些参数
ospfd -d #以守护进程的方式运行ospfd,但是与‘systemctl start ospfd’有区别,缺少了一些参数
bgpd -d #以守护进程的方式运行bgpd,但是与‘systemctl start bgpd’有区别,缺少了一些参数
/usr/local/sbin/zebra -d #启动zebra后台程序
/usr/local/sbin/(ospfd|bgpd|ripd) -d #运行其他守护进程
-----------------------------------------------------------------------------------------------------------------
zebra/ospfd/bgpd命令参数
zebra -h #查看命令行选项
[root@yefeng quagga]# zebra -h #ospfd,bgpd等命令的参数与zebra有区别,但基本一致
-b, --batch Runs in batch mode
-d, --daemon Runs in daemon mode
-f, --config_file Set configuration file name
-i, --pid_file Set process identifier file name
-z, --socket Set path of zebra socket
-k, --keep_kernel Don't delete old routes which installed by zebra.
-C, --dryrun Check configuration for validity and exit
-A, --vty_addr Set vty's bind address
-P, --vty_port Set vty's port number
-r, --retain When program terminates, retain added route by zebra.
-u, --user User to run as
-g, --group Group to run as
-s, --nl-bufsize Set netlink receive buffer size
-v, --version Print program version
-h, --help Display this help and exit
-----------------------------------------------------------------------------------------------------------------
进入配置界面:进入Quagga以及其他守护进程的配置界面
vtysh
vtysh -c "show running"
telnet 127.0.0.1 2601 #zebra
telnet localhost 2601
telnet 127.1 2601
telnet 127.0.0.1 2602 #ripd
telnet 127.0.0.1 2603 #ripngd
telnet 127.0.0.1 2604 #ospfd
telnet 127.0.0.1 2605 #bgpd
telnet 127.0.0.1 2606 #ospf6d
Quagga安装前准备;Quagga运行守护进程;zebra/ospfd/bgpd命令参数;进入配置界面的多种方式
Quagga查看配置与保存;修改路由器基本配置(zebra进程配置)
================================================================================================================
查看配置(Quagga等守护进程enable界面):
yefeng# show running-config
yefeng# show startup-config
----------------------------------
配置保存:
方式1:
write #保存配置,若报错打不开文件,则需要关闭SELinux,例如“Can‘t open configuration file /etc/quagga/zebra.conf.OS1Uu5.”
copy running-config startup-config
方式2:
直接修改zebra.conf等配置文件
-----------------------------------------------------------------------------------------------------------------
修改路由器基本配置(zebra进程配置)
路由器基本配置
(1)进入配置模式:
[root@vn quagga]# telnet 127.0.0.1 2601 #进入zrbra守护进程配置界面
Router> enable #进入特权模式
Router# config terminal #进入配置模式
(2)设置系统网络名称
Router(config)# hostname Router1
(3)配置密码
Router1(config)# password zebra #配置终端连接密码;若zebra.conf文件无password配置,则telent后提示“Vty password is not set.”
Router1(config)# enable password zebra #配置进入特权模式的密码
Router1(config)# service password-encryption #对口令进行加密;注意,该配置要在配置密码后再进行配置
(4)配置接口IP地址
Router1(config)# interface eth0 #一定要进入接口模式
Router1(config-if)# ip add #按tab键自动补全
Router1(config-if)# ip address 192.168.0.2/24 #设定IP地址,子网掩码
Router1(config-if)# no shutdown #激活网络接口
Router1(config-if)# exit #退出
Router1(config)# interface eth1 #添加第二个IP
Router1(config-if)# ip address 192.168.1.2/24 #设置IP地址、子网掩码
Router1(config-if)# no shutdown #激活网络接口
Can't up interface #这里需要添加一块虚拟网卡,
注意选择仅与主机共享一个网络(host only)
Router1(config-if)# no shutdown
Router1(config-if)# exit
Router1(config)# exit
Router1# show interface #查看接口信息
Router1# show interface eth0 #单独查看eth0的接口信息
为eth1配置IP地址(重新打开一个terminal):
[root@vn ~]# ifconfig eth1 192.168.1.2
Router1# show interface eth1
(5)显示IP路由表信息
Router1# show ip route
(6)设置和查看访问控制列表
Router1# configure terminal
Router1(config)# access-list private-only permit 192.168.0.0/24 只允许这四个网络进行转发,拒绝其他任何网络
Router1(config)# access-list private-only permit 192.168.1.0/24
Router1(config)# access-list private-only permit 192.168.2.0/24
Router1(config)# access-list private-only permit 192.168.3.0/24
Router1(config)# access-list private-only deny any
Router1# show ip access-list 查看访问控制列表
(7)查看和保存路由器配置
Router1# show running-config 查看当前正在运行的路由配置
Router1# show startup-config 显示下一次启动的配置内容
Router1# copy running-config startup-config 保存到下一次启动的配置文件中
Router1# write
Connection closed by foreign host.
[root@vn quagga]# cat /etc/quagga/zebra.conf 这里可以看到配置信息
注意:另一种方法是直接修改/etc/quagga/zebra.conf 配置文件,这是两种方式,根据实际情况自己选择。
(8)日志
r1(config)# line vty
r1(config-line)# exec-timeout 0 0
r1(config)# log stdout
r1(config)# no log stdout
r1(config)# log syslog
r1(config)# no log syslog
r1(config)# log file /var/log/quagga/zebra.log
r1(config)# log file /usr/local/etc/zebra.log
Quagga查看配置与保存;修改路由器基本配置(zebra进程配置)
修改路由器动态路由协议配置(ripd/ospfd/bgpd)
==============================================================================================
配置和查看ripd守护进程
# service ripd start
# telnet localhost 2602
ripd(config)# hostname r1_ripd #改个名字好辨认
r1_ripd(config)# router rip #启动rip
r1_ripd(config-router)# network 192.9.200.0/24 #RIPv1是有类别路由协议,RIPv2是无类别路由协议,Quagga 默认支持RIPv2,指定网络需要子网掩码
ri_ripd#show ip rip status
r1_ripd# debug rip events
r1_ripd# debug rip packet
r1_ripd(config)# log file /var/log/quagga/ripd.log
r1_ripd(config)# log file /usr/local/etc/ripd.log
然后我们在shell下查看debug信息
# tail -f /usr/local/etc/ripd.log
------------------------------------------------------
配置和查看ospfd守护进程
Quagga使用ospfd程序实现OSPF路由功能,但ospfd需要从zebra程序获得接口信息,所以zebra程序必须在 ospfd程序之前运行。
ospfd不支持多个OSPF进程,我们不能指定OSPF进程号。
# service ospfd start
# telnet localhost 2604
ospfd(config)# hostname r1_ospfd
r1_ospfd(config)# router ospf #启动ospf
r1_ospfd(config-router)# ospf router-id 192.9.200.179 #设置router-id
r1_ospfd(config-router)# network 192.9.200.0/24 area 0
r1_ospfd(config-router)# network 192.168.2.0/24 area 2 #最关键的,来标识路由器上哪些IP网络号是OSPF的一部分,对于每个网络,我们必须标识该网络所属 的区域。
r1_ospfd# sh ip ospf route
r1_ospfd# sh ip ospf interface
r1_ospfd# debug ospf event
r1_ospfd(config)# log file /var/log/quagga/ospfd.log
r1_ospfd(config)# log file /usr/local/etc/ospfd.log
然后我们在shell下查看debug信息
shell_1> tail -f /usr/local/etc/ospfd.log
r2_ospfd# show ip ospf neighbor
r1_ospfd# sh ip ospf database
r1_ospfd# show ip ospf int eth0
------------------------------------------------------
配置和查看bgpd守护进程
# service bgpd start
# telnet localhost 2605
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
修改路由器动态路由协议配置(ripd/ospfd/bgpd)
实验1:虚拟机与eNSP建立ospf邻居;实验2:虚拟机与eNSP建立bgp邻居
=========================================================================
实验1:虚拟机与eNSP建立ospf邻居
1.两边配置ospf后,成功尽力ospf邻居
2.quagga应该只支持1个ospf进程
3.虚拟机宣告路由,eNSP可以正确学习到路由
4.eNSP宣告路由和引入静态路由,虚拟机可以正确学习到路由
------------------------------------------------------
实验2:虚拟机与eNSP建立bgp邻居
bgp 64512
router-id 192.168.98.1
peer 192.168.98.88 as-number 64513
#
ipv4-family unicast
undo synchronization
peer 192.168.98.88 enable
router bgp 64513
bgp router-id 192.168.98.88
neighbor 192.168.98.1 remote-as 64512
现象1:bgp邻居up过程很慢,等了至少10分钟,why?
现象2:路由宣告与华为路由器机制不同:
华为:bgp只能network有效网段,本地路由表没有的表项被network,虽然会有配置,但不生效,也不会通知给邻居。
quagga:不会进行本地路由表项的匹配,只要被network,则统统通告该路由。
实验1:虚拟机与eNSP建立ospf邻居;实验2:虚拟机与eNSP建立bgp邻居