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

 

posted @ 2020-11-24 10:36  lsgxeva  阅读(7036)  评论(0编辑  收藏  举报