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