使用開源路由協(xié)議棧 Quagga,使你的 linux 系統(tǒng)成為一臺路由器。
- 來源:https://linux.cn/article-12199-1.html
- 作者:M Umer
- 譯者:messon007
網(wǎng)絡(luò)路由協(xié)議分為兩大類:內(nèi)部網(wǎng)關(guān)協(xié)議和外部網(wǎng)關(guān)協(xié)議。路由器使用內(nèi)部網(wǎng)關(guān)協(xié)議在單個自治系統(tǒng)內(nèi)共享信息。如果你用的是 Linux,則可以通過開源(GPLv2)路由協(xié)議棧 Quagga 使其表現(xiàn)得像一臺路由器。
Quagga 是什么?
Quagga 是一個 路由軟件包 ,并且是 GNU Zebra 的一個分支。它為類 Unix 平臺提供了所有主流路由協(xié)議的實現(xiàn),例如開放最短路徑優(yōu)先(OSPF),路由信息協(xié)議(RIP),邊界網(wǎng)關(guān)協(xié)議(BGP)和中間系統(tǒng)到中間系統(tǒng)協(xié)議(IS-IS)。
盡管 Quagga 實現(xiàn)了 IPv4 和 IPv6 的路由協(xié)議,但它并不是一個完整的路由器。一個真正的路由器不僅實現(xiàn)了所有路由協(xié)議,而且還有轉(zhuǎn)發(fā)網(wǎng)絡(luò)流量的能力。 Quagga 僅僅實現(xiàn)了路由協(xié)議棧,而轉(zhuǎn)發(fā)網(wǎng)絡(luò)流量的工作由 Linux 內(nèi)核處理。
架構(gòu)
Quagga 通過特定協(xié)議的守護(hù)程序?qū)崿F(xiàn)不同的路由協(xié)議。守護(hù)程序名稱與路由協(xié)議相同,加了字母“d”作為后綴。Zebra 是核心,也是與協(xié)議無關(guān)的守護(hù)進(jìn)程,它為內(nèi)核提供了一個 抽象層 ,并通過 TCP 套接字向 Quagga 客戶端提供 Zserv API。每個特定協(xié)議的守護(hù)程序負(fù)責(zé)運(yùn)行相關(guān)的協(xié)議,并基于交換的信息來建立路由表。
Quagga architecture
環(huán)境
本教程通過 Quagga 實現(xiàn)的 OSPF 協(xié)議來配置動態(tài)路由。該環(huán)境包括兩個名為 Alpha 和 Beta 的 centos 7.7 主機(jī)。兩臺主機(jī)共享訪問 192.168.122.0/24 網(wǎng)絡(luò)。
主機(jī) Alpha:
IP:192.168.122.100/24 網(wǎng)關(guān):192.168.122.1
主機(jī) Beta:
IP:192.168.122.50/24 網(wǎng)關(guān):192.168.122.1
安裝軟件包
首先,在兩臺主機(jī)上安裝 Quagga 軟件包。它存在于 CentOS 基礎(chǔ)倉庫中:
yum install quagga -y
啟用 IP 轉(zhuǎn)發(fā)
接下來,在兩臺主機(jī)上啟用 IP 轉(zhuǎn)發(fā),因為它將由 Linux 內(nèi)核來執(zhí)行:
sysctl -w net.ipv4.ip_forward = 1
sysctl -p
配置
現(xiàn)在,進(jìn)入 /etc/quagga 目錄并為你的設(shè)置創(chuàng)建配置文件。你需要三個文件:
- zebra.conf:Quagga 守護(hù)程序的配置文件,你可以在其中定義接口及其 IP 地址和 IP 轉(zhuǎn)發(fā)
- ospfd.conf:協(xié)議配置文件,你可以在其中定義將通過 OSPF 協(xié)議提供的網(wǎng)絡(luò)
- daemons:你將在其中指定需要運(yùn)行的相關(guān)的協(xié)議守護(hù)程序
在主機(jī) Alpha 上,
[root@alpha]# cat /etc/quagga/zebra.conf
interface eth0
ip address 192.168.122.100/24
ipv6 nd suppress-ra
interface eth1
ip address 10.12.13.1/24
ipv6 nd suppress-ra
interface lo
ip forwarding
line vty
[root@alpha]# cat /etc/quagga/ospfd.conf
interface eth0
interface eth1
interface lo
router ospf
network 192.168.122.0/24 area 0.0.0.0
network 10.12.13.0/24 area 0.0.0.0
line vty
[root@alphaa ~]# cat /etc/quagga/daemons
zebra=yes
ospfd=yes
在主機(jī) Beta 上,
[root@beta quagga]# cat zebra.conf
interface eth0
ip address 192.168.122.50/24
ipv6 nd suppress-ra
interface eth1
ip address 10.10.10.1/24
ipv6 nd suppress-ra
interface lo
ip forwarding
line vty
[root@beta quagga]# cat ospfd.conf
interface eth0
interface eth1
interface lo
router ospf
network 192.168.122.0/24 area 0.0.0.0
network 10.10.10.0/24 area 0.0.0.0
line vty
[root@beta ~]# cat /etc/quagga/daemons
zebra=yes
ospfd=yes
配置防火墻
要使用 OSPF 協(xié)議,必須允許它通過防火墻:
firewall-cmd --add-protocol=ospf –permanent
firewall-cmd –reload
現(xiàn)在,啟動 zebra 和 ospfd 守護(hù)程序。
# systemctl start zebra
# systemctl start ospfd
用下面命令在兩個主機(jī)上查看路由表:
[root@alpha ~]# ip route show
default via 192.168.122.1 dev eth0 proto static metric 100
10.10.10.0/24 via 192.168.122.50 dev eth0 proto zebra metric 20
10.12.13.0/24 dev eth1 proto kernel scope link src 10.12.13.1
192.168.122.0/24 dev eth0 proto kernel scope link src 192.168.122.100 metric 100
你可以看到 Alpha 上的路由表包含通過 192.168.122.50 到達(dá) 10.10.10.0/24 的路由項,它是通過協(xié)議 zebra 獲取的。同樣,在主機(jī) Beta 上,該表包含通過 192.168.122.100 到達(dá)網(wǎng)絡(luò) 10.12.13.0/24 的路由項。
[root@beta ~]# ip route show
default via 192.168.122.1 dev eth0 proto static metric 100
10.10.10.0/24 dev eth1 proto kernel scope link src 10.10.10.1
10.12.13.0/24 via 192.168.122.100 dev eth0 proto zebra metric 20
192.168.122.0/24 dev eth0 proto kernel scope link src 192.168.122.50 metric 100
結(jié)論
如你所見,環(huán)境和配置相對簡單。要增加復(fù)雜性,你可以向路由器添加更多網(wǎng)絡(luò)接口,以為更多網(wǎng)絡(luò)提供路由。你也可以使用相同的方法來實現(xiàn) BGP 和 RIP 協(xié)議。
via: https://opensource.com/article/20/4/quagga-linux
作者: M Umer 選題: lujun9972 譯者: messon007 校對: wxy
本文由 LCTT 原創(chuàng)編譯, Linux中國 榮譽(yù)推出