作者:蔡伸,單位:中國(guó)移動(dòng)智慧家庭運(yùn)營(yíng)中心成都分公司
FRRouting (FRR)可以在本機(jī)Linux/Unix進(jìn)行部署,使機(jī)器快速具備各種路由協(xié)議交互功能,讓設(shè)備成為一個(gè)簡(jiǎn)單的企業(yè)界路由器。很多設(shè)備商的路由器產(chǎn)品就是基于FRR進(jìn)行二次開發(fā)的,可見對(duì)FRR的認(rèn)可度之高。
Part 01●??FRRouting概述?●
FRRouting (FRR) 是一個(gè)免費(fèi)、開源的互聯(lián)網(wǎng)路由協(xié)議套件,適用于Linux和Unix平臺(tái)。它實(shí)現(xiàn)了BGP、OSPF、RIP、IS-IS、PIM、LDP、BFD、Babel、PBR、OpenFabric 和 VRRP 等路由協(xié)議,并提供了alpha版本支持EIGRP和NHRP。
FRR無縫集成了本機(jī)Linux/Unix IP網(wǎng)絡(luò)堆棧,使其成為通用路由堆棧,適用于各種用例,包括將主機(jī)、虛擬機(jī)和容器連接到網(wǎng)絡(luò)、通告網(wǎng)絡(luò)服務(wù)、LAN交換和路由、互聯(lián)網(wǎng)接入路由器和互聯(lián)網(wǎng)對(duì)等互連等能力。
簡(jiǎn)而言之,F(xiàn)RR可以在本機(jī)Linux/Unix進(jìn)行部署,使機(jī)器快速具備各種路由協(xié)議交互功能,讓設(shè)備成為一個(gè)簡(jiǎn)單的企業(yè)界路由器。很多設(shè)備商的路由器產(chǎn)品就是基于FRR進(jìn)行二次開發(fā)的,可見對(duì)FRR的認(rèn)可度之高。
FRR主要集成了網(wǎng)絡(luò)三層路由協(xié)議,其中最重要且常用的如下:
OSPF(Open Shortest Path First):OSPF路由協(xié)議是用于網(wǎng)際協(xié)議(IP)網(wǎng)絡(luò)的鏈路狀態(tài)路由協(xié)議。該協(xié)議使用鏈路狀態(tài)路由算法的內(nèi)部網(wǎng)關(guān)協(xié)議(IGP),在單一自治系統(tǒng)(AS)內(nèi)部工作。適用于IPv4的OSPFv2協(xié)議定義于RFC 2328,RFC 5340定義了適用于IPv6的OSPFv3。
IS-IS(Intermediate system to intermediate system):中間系統(tǒng)到中間系統(tǒng)是一種內(nèi)部網(wǎng)關(guān)協(xié)議,是電信運(yùn)營(yíng)商普遍采用的內(nèi)部網(wǎng)關(guān)協(xié)議之一。標(biāo)準(zhǔn)的IS-IS協(xié)議是由國(guó)際標(biāo)準(zhǔn)化組織制定的ISO/IEC 10589:2002 所規(guī)范的。但是標(biāo)準(zhǔn)的IS-IS協(xié)議是為無連接網(wǎng)絡(luò)服務(wù)(CLNS)設(shè)計(jì)的,并不直接適合于IP網(wǎng)絡(luò),因此互聯(lián)網(wǎng)工程任務(wù)組制定可以適用于IP網(wǎng)絡(luò)的集成化的IS-IS協(xié)議,稱為集成IS-IS,它由RFC 1195等RFC文檔所規(guī)范。由于IP網(wǎng)絡(luò)的普遍存在,一般所稱的IS-IS協(xié)議,通常是指集成IS-IS協(xié)議。
BGP(Border Gateway Protocol):邊界網(wǎng)關(guān)協(xié)議(BGP)是運(yùn)行于 TCP 上的一種自治系統(tǒng)的路由協(xié)議。BGP 是一種用來處理像因特網(wǎng)大小的網(wǎng)絡(luò)的協(xié)議,也是一種能夠妥善處理好不相關(guān)路由域間的多路連接的協(xié)議。BGP 構(gòu)建在 EGP 的經(jīng)驗(yàn)之上。BGP 系統(tǒng)的主要功能是和其他的 BGP 系統(tǒng)交換網(wǎng)絡(luò)可達(dá)信息。網(wǎng)絡(luò)可達(dá)信息包括列出的自治系統(tǒng)(AS)的信息。這些信息有效地構(gòu)造了 AS 互聯(lián)的拓?fù)鋱D并由此清除了路由環(huán)路,同時(shí)在 AS 級(jí)別上可實(shí)施策略決策。
Part 02●??FRRouting支持的特性?●
FRR支持豐富的特性和許多平臺(tái),不同平臺(tái)支持的特性有所不同,下表為FRR具體支持的特性。
Part 03●??FRRouting的架構(gòu)?●
傳統(tǒng)的路由軟件通常是單個(gè)進(jìn)程程序,負(fù)責(zé)所有路由協(xié)議功能。相比之下,F(xiàn)RR使用了一種不同的方法。它由多個(gè)守護(hù)程序組成,共同構(gòu)建路由表。每個(gè)重要的協(xié)議都在它自己的守護(hù)程序中實(shí)現(xiàn),這些守護(hù)程序與一個(gè)中間守護(hù)程序(zebra)通信,協(xié)調(diào)路由決策并與數(shù)據(jù)平面通信。
FRR采用模塊化架構(gòu),具有高度的靈活性和可擴(kuò)展性。它的模塊化設(shè)計(jì)使得添加新的協(xié)議或功能非常容易。每個(gè)守護(hù)程序都實(shí)現(xiàn)了插件系統(tǒng),可以在運(yùn)行時(shí)加載新功能,從而擴(kuò)展整個(gè)套件而無需重新編譯整個(gè)程序。
FRR的架構(gòu)具有模塊化特點(diǎn),因此單個(gè)協(xié)議守護(hù)程序的錯(cuò)誤、崩潰或漏洞通常不會(huì)影響其他協(xié)議,提高了整個(gè)系統(tǒng)的彈性和可靠性。另外,F(xiàn)RR的靈活性使得它可以根據(jù)不同網(wǎng)絡(luò)的特定路由需求進(jìn)行定制。FRR的整體框架如下圖:
Zebra:Zebra 是一個(gè) IP 路由管理器。它提供內(nèi)核路由表更新、接口查找以及不同路由協(xié)議之間的路由重新分發(fā)。它是一個(gè)獨(dú)立進(jìn)程,所有進(jìn)程之間通信都通過zebra進(jìn)行。
BGPD、OSPFD:這些獨(dú)立的進(jìn)程代表了不同協(xié)議的處理進(jìn)程,以上兩個(gè)進(jìn)程分別實(shí)現(xiàn)了BGP和OSPF。
Part 04●?如何快速搭建FRRouting??●
(1)獲取FRRouting源碼
從FRR官方網(wǎng)站上獲取FRRouting的git地址或者安裝包
https://frrouting.org/
以GitHub獲取源碼安裝為例:
git clone https://github.com/FRRouting/frr.git
(2)創(chuàng)建configuration
FRRouing下載后會(huì)提供一個(gè)配置腳本,可自動(dòng)檢測(cè)大多數(shù)主機(jī)配置。有幾個(gè)其他配置選項(xiàng)可用于自定義生成以包含或排除特定功能和依賴項(xiàng)。
./bootstrap.sh
在配置完成后,可以設(shè)置各類config屬性,如下表:
(3)打開內(nèi)核轉(zhuǎn)發(fā)功能
/etc/sysctl.conf或者/etc/sysctl.d/90-routing-sysctl.conf
打開ipv4和ipv6轉(zhuǎn)發(fā):
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1
(4)開始構(gòu)建
選擇配置選項(xiàng)后,運(yùn)行配置腳本并傳遞所選選項(xiàng),示例如下:
./configure
--prefix=/usr
--localstatedir=/var/run/frr
--sbindir=/usr/lib/frr
--sysconfdir=/etc/frr
--enable-pimd
--enable-watchfrr
...
配置軟件后,就可以在系統(tǒng)中構(gòu)建和安裝它了。
make && sudo make install
一切成功之后,F(xiàn)RRouting就安裝成功了,可以開始設(shè)置FRRouting的配置文件了。
(5)進(jìn)程配置文件設(shè)置
剛安裝完后,啟動(dòng) FRR 不會(huì)執(zhí)行任何操作。這是因?yàn)楸仨毻ㄟ^編輯配置目錄中的文件來顯式啟用守護(hù)程序。此文件通常位于 /etc/frr/daemons 中,用于確定通過 init 或 systemd 發(fā)出服務(wù)啟動(dòng)/停止命令時(shí)激活哪些守護(hù)進(jìn)程。如下所示:
zebra=no
bgpd=no
ospfd=no
ospf6d=no
ripd=no
ripngd=no
isisd=no
pimd=no
ldpd=no
nhrpd=no
eigrpd=no
babeld=no
sharpd=no
staticd=no
pbrd=no
bfdd=no
fabricd=no
# If this option is set the /etc/init.d/frr script automatically loads
# the config via "vtysh -b" when the servers are started.
# Check /etc/pam.d/frr if you intend to use "vtysh"!
vtysh_enable=yes
zebra_options=" -s 90000000 --daemon -A 127.0.0.1"
bgpd_options=" --daemon -A 127.0.0.1"
ospfd_options=" --daemon -A 127.0.0.1"
ospf6d_options=" --daemon -A ::1"
ripd_options=" --daemon -A 127.0.0.1"
ripngd_options=" --daemon -A ::1"
isisd_options=" --daemon -A 127.0.0.1"
pimd_options=" --daemon -A 127.0.0.1"
ldpd_options=" --daemon -A 127.0.0.1"
nhrpd_options=" --daemon -A 127.0.0.1"
eigrpd_options=" --daemon -A 127.0.0.1"
babeld_options=" --daemon -A 127.0.0.1"
sharpd_options=" --daemon -A 127.0.0.1"
staticd_options=" --daemon -A 127.0.0.1"
pbrd_options=" --daemon -A 127.0.0.1"
bfdd_options=" --daemon -A 127.0.0.1"
fabricd_options=" --daemon -A 127.0.0.1"
#MAX_FDS=1024
# The list of daemons to watch is automatically generated by the init script.
#watchfrr_options=""
# for debugging purposes, you can specify a "wrap" command to start instead
# of starting the daemon directly, e.g. to use valgrind on ospfd:
# ospfd_wrap="/usr/bin/valgrind"
# or you can use "all_wrap" for all daemons, e.g. to use perf record:
# all_wrap="/usr/bin/perf record --call-graph -"
# the normal daemon command is added to this at the end.
將需要打開的進(jìn)程設(shè)置為“yes”,然后執(zhí)行服務(wù)啟動(dòng)命令。
systemctl daemon-reload
systemctl start frr
(6)使用界面
FRR的使用界面基本同cisco的路由器配置界面一致,安裝完后通過在系統(tǒng)中敲入vtysh進(jìn)入FRRouting管理界面,如下圖:
圖片來自筆者測(cè)試截圖,Ubuntu18.04
敲入configure terminal進(jìn)入配置管理模式,敲入?顯示支持的配置模塊,如下圖:
圖片來自筆者測(cè)試截圖,Ubuntu18.04
至此,Linux-PC已經(jīng)能夠配置各種路由協(xié)議和各類路由設(shè)備對(duì)接了。
Part 05●??構(gòu)建實(shí)驗(yàn)測(cè)試環(huán)境?●
圖片來自筆者測(cè)試截圖,eNSP構(gòu)建
其中外省一路由設(shè)備通過CLOUD1用安裝了FRR的Linux-PC模擬,其他路設(shè)備均為華為路由設(shè)備。
外省1的配置如下:
圖片來自筆者測(cè)試截圖,Ubuntu18.04
實(shí)驗(yàn)結(jié)論:通過正常配置BGP命令,確保對(duì)端配置正常的情況下,在端到端進(jìn)行抓包,發(fā)現(xiàn)BGP完成了控制報(bào)文交互,BGP鄰居正常建立,端到端訪問正常,BGP發(fā)布的路由其他路由設(shè)備能正確學(xué)習(xí)到。
Part 06●??結(jié)語?●
FRR是一個(gè)非常出色的開源軟件,它可以將普通的Linux-PC快速轉(zhuǎn)變成一臺(tái)功能強(qiáng)大的企業(yè)級(jí)路由器,滿足日常網(wǎng)絡(luò)需求。盡管如此,為了提高FRR的性能和穩(wěn)定性,我們需要研發(fā)人員投入更多的時(shí)間和精力,在不斷地研究和開發(fā)上不斷優(yōu)化完善。
未來,隨著數(shù)字化時(shí)代的到來和互聯(lián)網(wǎng)應(yīng)用領(lǐng)域的不斷擴(kuò)大,F(xiàn)RR將迎來巨大的機(jī)遇和挑戰(zhàn)。我們期待看到更多的高質(zhì)量特性被添加到FRR中,從而滿足不斷變化的市場(chǎng)需求。同時(shí),我們也預(yù)計(jì)FRR將吸引更多的行業(yè)專家參與其中,共同推動(dòng)其發(fā)展,為用戶帶來更加優(yōu)質(zhì)、安全、高效的使用體驗(yàn)。
參考文獻(xiàn)
[1] FRRouting技術(shù)文檔[EB/OL].[2023-06-20].https://docs.frrouting.org/projects/dev-guide/en/latest/.