文章目录
1. FRRouting项目介绍
FRRouting(FRR)是一个适用于Linux和Unix平台的免费开源互联网路由协议套件,起源于Quagga项目。它实现了BGP、OSPF、RIP、IS-IS、PIM、LDP、BFD、Babel、PBR、OpenFabric和VRRP,并对EIGRP和NHRP提供了alpha支持。
FRR与原生Linux/Unix IP网络协议栈的无缝集成使其成为适用于各种场景的通用路由协议栈,包括将主机/虚拟机/容器连接到网络、广告网络服务、局域网交换和路由、互联网接入路由器和互联网对等互联等功能。
FRR项目官网:https://frrouting.org
FRR项目源码:https://github.com/FRRouting/frr
FRR项目官方文档:https://frrouting.org/doc/
2. 项目结构
FRR由一组守护进程组成,它们协同工作以构建路由表。每个路由协议都在自己的守护进程中实现,这些守护进程与一个中间守护进程(zebra)通信,zebra负责协调路由决策并与数据平面通信。FRR的整体架构如下图所示,这种架构具有更好的扩展性,当一个守护进程遇到问题,不会影响其他协议的守护进程。
所有FRR守护进程都可以通过一个名为vtysh的集成用户界面shell进行管理。vtysh通过UNIX域套接字连接到每个守护进程,然后作为用户输入的代理。除了统一的前端之外,vtysh还提供了通过集成配置模式使用单个配置文件配置所有守护进程的能力,避免为每个守护进程维护单独的配置文件。
3. 安装FRR
FRRouting可以通过如下几种方式进行安装:
3.1 Deb包(Debian、Ubuntu系统)
下载地址:https://deb.frrouting.org/
3.2 RPM包
下载地址:https://rpm.frrouting.org/
3.3 源码编译
FRR的源代码可以在Github仓库中下载:
git clone https://github.com/FRRouting/frr.git
或是下载稳定的release版本:https://github.com/FRRouting/frr/releases,下载后进入frr目录,进行配置和编译:
./bootstrap.sh
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--sbindir=/usr/lib/frr \
--enable-pimd \
--enable-watchfrr \
make
make install
3.4 运行FRR vtysh
$ sudo vtysh
出现下面的内容,说明FRR安装成功,并启动了vtysh:
Hello, this is FRRouting (version 10.3.1).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
ubuntu#
4. 基础配置
在完成安装后,需要对FRR进行一些基础配置。在使用前需要在配置文件/etc/frr/daemons
中使能相应的daemon:
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.
例如,若需要配置zebra和ospf协议,则应当修改如下项目:
zebra=yes
ospfd=yes
在配置结束后,需要重新启动frr服务:
service frr restart