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) 下载软件包,解压缩, 编译并安装
注意: 配置文件路径, 默认为/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等会导致没有权限的错误。
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