zoukankan      html  css  js  c++  java
  • Quagga的安装和使用

    Quagga的安装和使用

    来源 https://www.cnblogs.com/networking/p/7643037.html

    QUAGGA是一款开源的路由软件,也是zebra(已经停止更新)的升级维护版本。

    作用:将linux设备变成一个功能完整的路由器。支持的协议:rip,ospf,bgp等。

    官网:http://www.nongnu.org/quagga/  文档:https://www.nongnu.org/quagga/docs.html

    quazza各版本源码下载地址:http://download.savannah.gnu.org/releases/quagga/

    最新版本是2017.2.8日的1.2.0,但是在编译的时候源码出现了重定义错误(没研究源码等内容),所以在这里我选择的是quagga-1.1.1。

    测试环境:VM 12   CentOS 6.5 64位

    1.       Quagga的安装

    在CentOS下可以直接使用yum –y install quagga进行安装,也可以使用quagga的源代码包进行编译安装,如下所示:

     

    2.       配置zebra

    复制zebra的配置文件模板到下面目录下,并且启动zebra

    cp /usr/share/doc/quagga-0.99.15/zebra.conf.sample /etc/quagga/zebra.conf

    如下图所示:

     

    3.       如果需要使用zebra进行支持OSPF和BGP等协议,还要负载ospfd和bgpd配置文件到下面的目录下,并且启动服务:

    cp /usr/share/doc/quagga-0.99.15/ospfd.conf.sample /etc/quagga/ospfd.conf

    cp /usr/share/doc/quagga-0.99.15/bgpd.conf.sample /etc/quagga/bgpd.conf

    如下图所示:

    4.       添加多块网卡(物理机添加物理网卡,虚拟机添加多块虚拟网卡),如下:

     

    5.       配置quagga

    在终端下使用vtysh或者telnet 127.0.0.1 2601都可以进入quagga的控制台,如下:

    [root@R1 networking]# vtysh

    [root@R1 networking]# telnet 127.0.0.1 2601

    如下图:

     

    6.       使用OSPF协议打底,配置BGP协议发布路由,如下拓扑:

     

    测试结果如下:

    R1:

     

    R2:

     

    R3:

     

    R4:

    Selecting previously unselected package quagga-core.
    (Reading database ... 164946 files and directories currently installed.)
    Preparing to unpack .../0-quagga-core_1.2.4-1_amd64.deb ...
    Adding user `quagga' to group `quaggavty' ...
    Adding user quagga to group quaggavty
    Done.
    Unpacking quagga-core (1.2.4-1) ...
    Selecting previously unselected package quagga-bgpd.
    Preparing to unpack .../1-quagga-bgpd_1.2.4-1_amd64.deb ...
    Unpacking quagga-bgpd (1.2.4-1) ...
    Selecting previously unselected package quagga-isisd.
    Preparing to unpack .../2-quagga-isisd_1.2.4-1_amd64.deb ...
    Unpacking quagga-isisd (1.2.4-1) ...
    Selecting previously unselected package quagga-ospf6d.
    Preparing to unpack .../3-quagga-ospf6d_1.2.4-1_amd64.deb ...
    Unpacking quagga-ospf6d (1.2.4-1) ...
    Selecting previously unselected package quagga-ospfd.
    Preparing to unpack .../4-quagga-ospfd_1.2.4-1_amd64.deb ...
    Unpacking quagga-ospfd (1.2.4-1) ...
    Selecting previously unselected package quagga-pimd.
    Preparing to unpack .../5-quagga-pimd_1.2.4-1_amd64.deb ...
    Unpacking quagga-pimd (1.2.4-1) ...
    Selecting previously unselected package quagga-ripd.
    Preparing to unpack .../6-quagga-ripd_1.2.4-1_amd64.deb ...
    Unpacking quagga-ripd (1.2.4-1) ...
    Selecting previously unselected package quagga-ripngd.
    Preparing to unpack .../7-quagga-ripngd_1.2.4-1_amd64.deb ...
    Unpacking quagga-ripngd (1.2.4-1) ...
    Selecting previously unselected package quagga.
    Preparing to unpack .../8-quagga_1.2.4-1_amd64.deb ...
    Unpacking quagga (1.2.4-1) ...
    Setting up quagga-core (1.2.4-1) ...
    Created symlink /etc/systemd/system/multi-user.target.wants/zebra.service → /lib/systemd/system/zebra.service.
    Setting up quagga-bgpd (1.2.4-1) ...
    Created symlink /etc/systemd/system/multi-user.target.wants/bgpd.service → /lib/systemd/system/bgpd.service.
    Setting up quagga-pimd (1.2.4-1) ...
    Created symlink /etc/systemd/system/multi-user.target.wants/pimd.service → /lib/systemd/system/pimd.service.
    Setting up quagga-ripd (1.2.4-1) ...
    Created symlink /etc/systemd/system/multi-user.target.wants/ripd.service → /lib/systemd/system/ripd.service.
    Setting up quagga-ripngd (1.2.4-1) ...
    Created symlink /etc/systemd/system/multi-user.target.wants/ripngd.service → /lib/systemd/system/ripngd.service.
    Setting up quagga-ospf6d (1.2.4-1) ...
    Created symlink /etc/systemd/system/multi-user.target.wants/ospf6d.service → /lib/systemd/system/ospf6d.service.
    Setting up quagga-isisd (1.2.4-1) ...
    Created symlink /etc/systemd/system/multi-user.target.wants/isisd.service → /lib/systemd/system/isisd.service.
    Setting up quagga-ospfd (1.2.4-1) ...
    Created symlink /etc/systemd/system/multi-user.target.wants/ospfd.service → /lib/systemd/system/ospfd.service.
    Setting up quagga (1.2.4-1) ...
    Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
                                             
    lsgx@DESKTOP-OS0DFSI:~$ vtysh

    ==========

    来源 https://blog.csdn.net/qq_35757415/article/details/55507021

    一、安装流程

    使用虚拟机vmware9  ubuntu12.04LTS quagga-1.1.1.tar.gz

    安装过程:

    (在相应的存放tar包的目录)

    1、 tar -xzvf quagga-1.1.1.tar.gz

    2、 cd quagga-1.1.1

    3、 ./configure --enable-vtysh --enable-user=root --enable-group=root --enable-vty-group=root

    上述命令为打开vty功能(CLI功能)并给予相应用户权限

    出现错误(视机器而定,如果机器已经安装好这些软件,就不会出现错误):

    error: GNU awk is required for lib/memtype.h made by memtypes.awk.
    BSD awk complains: awk: gensub doesn't support backreferences (subst "1")

    解决办法:sudo apt-get insatll gawk

    安装后重新编译,通过。

    出现错误:error: vtysh needs libreadline but was not found and usable on your system.

    解决办法:sudo apt-get install libreadline-dev

    重新编译,通过。

    检查整个环境配置过程,如果没有新的错误出现,接下来就进行编译。

    4、 make

    编译过程也不是那么顺利的,错误又来了。

    出现错误:

    解决办法:sudo apt-get install texinfo

    make clean

    make

    直到所有错误都不在出现。

    5、 sudo make install

    整个安装流程到此就全部完成。

    二、简单的配置使用

    首先   vim /etc/service,可以看到各种协议所对应的接口

    科普学习:/etc/services文件是记录网络服务名和它们对应使用的端口号及协议。文件中的每一行对应一种服务,它由4个字段组成,中间用TAB或空格分隔,分别表示“服务名称”、“使用端口”、“协议名称”以及“别名”。
    /etc/services文件包含了服务名和端口号之间的映射,很多的系统程序要使用这个文件。一般情况下,不要修改该文件的内容,因为这些设置都是Internet标准的设置。一旦修改,可能会造成系统冲突,使用户无法正常访问资源。Linux系统的端口号的范围为0–65535,不同范围有不同的意义。
    0 不使用
    1--1023 系统保留,只能由root用户使用
    1024---4999 由客户端程序自由分配

    5000---65535 由服务器端程序自由分配

    关于各种协议的配置文本所在的目录为/usr/local/etc下面(很重要的一点)

    对Quagga进行配置,实际上就是对各进程进行配置,并且路由器的配置和路由协议的配置是分开不同进程的。 可以通俗点这么理解,Quagga里的zebra进程,相当于一个路由器,对zebra进行配置,就相当于对路由器进行基本配置(注意,这里是说基本配置,路由协议不是在zebra里配置的)。而Quagga里的ripd、ospfd、bgpd等进程,相当于不同的路由协议,要启动哪一种协议,就对协议相应的进程进行配置。(摘于网络)

    配置zebra和rip(这里我选择rip协议,这些配置文件选择你选用的哪种协议)

    1.cd /usr/local/etc//存放.conf文件的目录

    2.sudo cp zebra.conf.sample zebra.conf//.sample为自带的配置文件

    3.sudo cp ripd.conf.sample rip.conf

    4.sudo zebra -d  //启动

    出现错误:zebra: error while loading shared libraries: libzebra.so.1: cannot open shared object file: No such file or directory

    解决办法:sudo cp /usr/local/lib/libzebra.so.1 /lib

    然后重新执行sudo zebra -d

    ps -e | grep zebra  //查看进程是否启动成功,成功会出现对应的进程号,否则不会有输出

    配置已经成功了,电脑已经成为一个路由器了,但是我们还未对其中的设置进行配置。

    5.telnet localhost 2601

    出现>说明已经进入路由器用户模式

    6.特权模式

    在特权模式就可以配置一些路由器的属性。

    ==========

    来源 https://www.iteye.com/blog/siwind-1745643

    安装: 
    0) 安装依赖软件包(--enable-vtysh需要) 
    #sudo apt-get install libreadline6-dev (Ubuntu) 
    #sudo yum install readline-devel (CentOS) 

    创建用户(可选) 
    #sudo groupadd quagga 
    #sudo useradd quagga -g quagga 

    1) 下载软件包,解压缩, 编译并安装 

    #tar xzf quagga-0.99.21.tar.gz
    #cd quagga-0.99.21

    #sudo mkdir /var/run/quagga (运行时的PID文件位置)
    #sudo chmod 777 /var/run/quagga

    #sudo mkdir /etc/quagga (运行时的配置文件目录)
    #sudo chmod 777 /etc/quagga

    #./configure --enable-vtysh --localstatedir=/var/run/quagga --sysconfdir=/etc/quagga
    (默认运行用户为quagga, 确保运行的localstatedir对用户有读写的权限,建议配置)

    #./configure --localstatedir=/var/run/quagga

    #make
    #sudo make install
    #sudo ldconfig (加载库文件路径)


    注意:  配置文件路径, 默认为/usr/local/etc; 可执行文件路径, 默认为/usr/local/sbin  


    2) 修改文件/etc/services (某些linux平台可能不需要), 添加如下内容:  
    zebrasrv 2600/tcp # zebra service 
    zebra 2601/tcp # zebra vty 
    ripd 2602/tcp # RIPd vty 
    ripngd 2603/tcp # RIPngd vty 
    ospfd 2604/tcp # OSPFd vty 
    bgpd 2605/tcp # BGPd vty 
    ospf6d 2606/tcp # OSPF6d vty 
    ospfapi 2607/tcp # ospfapi 
    isid 2608/tcp # ISISd vty 

    3) 使用如下脚本启动/停止quagga: sudo ./run_quagga.sh start|stop|restart  
       或者直接启动停止: 
       #sudo /../zebra -u 用户 -g 用户组 -d   (确保编译时设置的localstatedir对用户有读写权限即可) 
       #sudo ospfd -u 用户 -g 用户组 -d 
       ...... 
       
    4) 登录控制台:  

    #telnet localhost 2601 //zebra
    #telnet localhost 2604 //ospf
    #sudo /usr/local/bin/vtysh //vtysh
    ......

    5) 问题解决  
        i) 如果遇到zebra库文件未找到错误,则到目录 /etc/ld.so.conf.d下面新建个文件, 
    内容为quagga安装的库路径,例如: /usr/local/lib 
    然后 sudo ldconfig即可。 
    ii) 如果不能连接vtysh的话,是因为在/var/run/quagga/*.vty文件对当前执行vtysh命令的用户没有权限。 
    可以使用: sudo /usr/local/bin/vtysh即可。 
    也可以: sudo chmod 777 /var/run/quagga/* ,(当zebra都启动之后), 然后运行vtysh即可。 
    iii) 如果需要设置IP地址,设置路由等,则建议使用root用户身份运行Quagga(zebra/ospfd/bgpd等), 否则修改路由IP等会导致没有权限的错误。 

         iii)  如果路由不能转发,修改/etc/sysctl.conf文件。 启用IPv4转发功能
            net.ipv4.ip_forward = 1
     
         iv) 如果发生了源路由验证的路由问题,  修改/etc/sysctl.conf文件。 禁用源路由验证功能 
            net.ipv4.conf.default.rp_filter = 1
     
         v)  如果要启用net-snmp支持,则如下:
                #sudo yum install net-snmp net-snmp-devel  net-snmp-perl net-snmp-utils
                #  ./configure --enable-vtysh --localstatedir=/var/run/quagga --sysconfdir=/etc/quagga  --enable-snmp=smux

    6) 如果要启用quagga的vtysh控制台:  

    #./configure --enable-vtysh --localstatedir=/var/run/quagga --sysconfdir=/etc/quagga
    #make
    #sudo make install

     


    然后配置/etc/quagga/vtysh.conf文件内容即可。  


    在Eclipse中调试运行Quagga (CentOS环境) 

    0) 首先按照上面要求正确编译运行Quagga.
    1) 打开Eclipse, 新建项目 "Makefile Project with existing code", 选择Quagga的解压缩路径
    2) 选择 “Run Configuration ...", 新建C/C++可执行程序, 命名为 ”Quagga-0.99.21 zebra“
    在C/C++ Application输入: zebra/.libs/zebra
    在Argument处输入: -f /usr/local/etc/zebra.conf -u 当前用户 -g 当前用户
    在Enviremont处新建变量: LD_LIBRARY_PATH, 取值为: :./lib/.libs:./ospfd/.libs
    3) 其它ospfd, bgpd等都可以同样如2)设置。
    4) 运行和调试都OK。


    run_quagga.sh 

    #!/bin/bash  
      
    EXEC_DIR=/usr/local/sbin  
    CONF_DIR=/etc/quagga  
    LIB_DIR=/usr/local/lib  
    PID_DIR=/var/run/quagga  
    DAEMON=(zebra ospfd bgpd)  
    USER=root  
    TIME_DELAY=2  
      
    #DAEMON=(zebra ospfd ospf6d ripd bgpd)   
    #set librery path  
    export LD_LIBRARY_PATH=$LIB_DIR:$LD_LIBRARY_PATH  
      
    #  
    echo make sure user "$USER" has read-write privileges in directory "$PID_DIR" !  
      
    start()  
    {  
        for d in ${DAEMON[*]}; do  
            $EXEC_DIR/$d -f $CONF_DIR/$d.conf -i $PID_DIR/$d.pid -u $USER -g $USER -d  
            ps -ef | grep $d  
            if [ $d = "zebra" ] ; then  
                sleep $TIME_DELAY  
            fi  
        done  
        echo "start (${DAEMON[*]})  finished!"  
    }  
      
    stop()  
    {  
        for d in ${DAEMON[*]}; do  
            killall $d  
            #rm -f $PID_DIR/$d.pid  
        done  
        rm -f $PID_DIR/*  
        echo "stop (${DAEMON[*]})  finished!"  
    }  
      
    case $1 in  
        start)  
            start ;;  
        stop)  
            stop ;;  
        restart)  
            stop  
            start  ;;  
        *)  
            echo "Usage: $0 start | stop | restart"  
    esac  

    ============ End

  • 相关阅读:
    JVM(三)初始化
    JVM(四)类加载机制
    JVM(一)内存分配
    java的日期时间处理(待更新)
    Java----finally
    FFmpeg(一)
    SqlServer
    MySql 8.0.12安装、配置
    Android的各大框架整理
    互联网协议入门
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/14028910.html
Copyright © 2011-2022 走看看