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邻居