作者:蔡伸,单位:中国移动智慧家庭运营中心成都分公司
FRRouting (FRR)可以在本机Linux/Unix进行部署,使机器快速具备各种路由协议交互功能,让设备成为一个简单的企业界路由器。很多设备商的路由器产品就是基于FRR进行二次开发的,可见对FRR的认可度之高。
Part 01● FRRouting概述 ●
FRRouting (FRR) 是一个免费、开源的互联网路由协议套件,适用于Linux和Unix平台。它实现了BGP、OSPF、RIP、IS-IS、PIM、LDP、BFD、Babel、PBR、OpenFabric 和 VRRP 等路由协议,并提供了alpha版本支持EIGRP和NHRP。
FRR无缝集成了本机Linux/Unix IP网络堆栈,使其成为通用路由堆栈,适用于各种用例,包括将主机、虚拟机和容器连接到网络、通告网络服务、LAN交换和路由、互联网接入路由器和互联网对等互连等能力。
简而言之,FRR可以在本机Linux/Unix进行部署,使机器快速具备各种路由协议交互功能,让设备成为一个简单的企业界路由器。很多设备商的路由器产品就是基于FRR进行二次开发的,可见对FRR的认可度之高。
FRR主要集成了网络三层路由协议,其中最重要且常用的如下:
OSPF(Open Shortest Path First):OSPF路由协议是用于网际协议(IP)网络的链路状态路由协议。该协议使用链路状态路由算法的内部网关协议(IGP),在单一自治系统(AS)内部工作。适用于IPv4的OSPFv2协议定义于RFC 2328,RFC 5340定义了适用于IPv6的OSPFv3。
IS-IS(Intermediate system to intermediate system):中间系统到中间系统是一种内部网关协议,是电信运营商普遍采用的内部网关协议之一。标准的IS-IS协议是由国际标准化组织制定的ISO/IEC 10589:2002 所规范的。但是标准的IS-IS协议是为无连接网络服务(CLNS)设计的,并不直接适合于IP网络,因此互联网工程任务组制定可以适用于IP网络的集成化的IS-IS协议,称为集成IS-IS,它由RFC 1195等RFC文档所规范。由于IP网络的普遍存在,一般所称的IS-IS协议,通常是指集成IS-IS协议。
BGP(Border Gateway Protocol):边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。BGP 是一种用来处理像因特网大小的网络的协议,也是一种能够妥善处理好不相关路由域间的多路连接的协议。BGP 构建在 EGP 的经验之上。BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓扑图并由此清除了路由环路,同时在 AS 级别上可实施策略决策。
Part 02● FRRouting支持的特性 ●
FRR支持丰富的特性和许多平台,不同平台支持的特性有所不同,下表为FRR具体支持的特性。
Part 03● FRRouting的架构 ●
传统的路由软件通常是单个进程程序,负责所有路由协议功能。相比之下,FRR使用了一种不同的方法。它由多个守护程序组成,共同构建路由表。每个重要的协议都在它自己的守护程序中实现,这些守护程序与一个中间守护程序(zebra)通信,协调路由决策并与数据平面通信。
FRR采用模块化架构,具有高度的灵活性和可扩展性。它的模块化设计使得添加新的协议或功能非常容易。每个守护程序都实现了插件系统,可以在运行时加载新功能,从而扩展整个套件而无需重新编译整个程序。
FRR的架构具有模块化特点,因此单个协议守护程序的错误、崩溃或漏洞通常不会影响其他协议,提高了整个系统的弹性和可靠性。另外,FRR的灵活性使得它可以根据不同网络的特定路由需求进行定制。FRR的整体框架如下图:
Zebra:Zebra 是一个 IP 路由管理器。它提供内核路由表更新、接口查找以及不同路由协议之间的路由重新分发。它是一个独立进程,所有进程之间通信都通过zebra进行。
BGPD、OSPFD:这些独立的进程代表了不同协议的处理进程,以上两个进程分别实现了BGP和OSPF。
Part 04● 如何快速搭建FRRouting? ●
(1)获取FRRouting源码
从FRR官方网站上获取FRRouting的git地址或者安装包
https://frrouting.org/
以GitHub获取源码安装为例:
git clone https://github.com/FRRouting/frr.git
(2)创建configuration
FRRouing下载后会提供一个配置脚本,可自动检测大多数主机配置。有几个其他配置选项可用于自定义生成以包含或排除特定功能和依赖项。
./bootstrap.sh
在配置完成后,可以设置各类config属性,如下表:
(3)打开内核转发功能
/etc/sysctl.conf或者/etc/sysctl.d/90-routing-sysctl.conf
打开ipv4和ipv6转发:
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
...
配置软件后,就可以在系统中构建和安装它了。
make && sudo make install
一切成功之后,FRRouting就安装成功了,可以开始设置FRRouting的配置文件了。
(5)进程配置文件设置
刚安装完后,启动 FRR 不会执行任何操作。这是因为必须通过编辑配置目录中的文件来显式启用守护程序。此文件通常位于 /etc/frr/daemons 中,用于确定通过 init 或 systemd 发出服务启动/停止命令时激活哪些守护进程。如下所示:
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”,然后执行服务启动命令。
systemctl daemon-reload
systemctl start frr
(6)使用界面
FRR的使用界面基本同cisco的路由器配置界面一致,安装完后通过在系统中敲入vtysh进入FRRouting管理界面,如下图:
图片来自笔者测试截图,Ubuntu18.04
敲入configure terminal进入配置管理模式,敲入?显示支持的配置模块,如下图:
图片来自笔者测试截图,Ubuntu18.04
至此,Linux-PC已经能够配置各种路由协议和各类路由设备对接了。
Part 05● 构建实验测试环境 ●
图片来自笔者测试截图,eNSP构建
其中外省一路由设备通过CLOUD1用安装了FRR的Linux-PC模拟,其他路设备均为华为路由设备。
外省1的配置如下:
图片来自笔者测试截图,Ubuntu18.04
实验结论:通过正常配置BGP命令,确保对端配置正常的情况下,在端到端进行抓包,发现BGP完成了控制报文交互,BGP邻居正常建立,端到端访问正常,BGP发布的路由其他路由设备能正确学习到。
Part 06● 结语 ●
FRR是一个非常出色的开源软件,它可以将普通的Linux-PC快速转变成一台功能强大的企业级路由器,满足日常网络需求。尽管如此,为了提高FRR的性能和稳定性,我们需要研发人员投入更多的时间和精力,在不断地研究和开发上不断优化完善。
未来,随着数字化时代的到来和互联网应用领域的不断扩大,FRR将迎来巨大的机遇和挑战。我们期待看到更多的高质量特性被添加到FRR中,从而满足不断变化的市场需求。同时,我们也预计FRR将吸引更多的行业专家参与其中,共同推动其发展,为用户带来更加优质、安全、高效的使用体验。
参考文献
[1] FRRouting技术文档[EB/OL].[2023-06-20].https://docs.frrouting.org/projects/dev-guide/en/latest/.