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