【FRRouting User Guide】(二)安装

        本节介绍构建、安装和设置FRR的基础知识。

From Packages

        该项目在GitHub发行版上发布Red Hat、Centos、Debian和Ubuntu的软件包GitHub releases.。外部贡献者为许多其他平台提供包,包括*BSD、Alpine、Gentoo、Docker和其他平台。目前还没有关于如何使用这些文件,但我们希望很快添加它。

From Snapcraft

       除了传统的软件包外,该项目还构建和发布通用快照图像,可在https://snapcraft.io/frr。

From Source

        从源代码构建FRR是确保您拥有最新功能和错误修复的最佳方法。每个受支持平台的详细信息,包括依赖项包列表、权限和其他问题,都在开发人员的文档中 developer’s documentation。本节简要概述了该过程。

Getting the Source

        FRR的源代码可以在GitHub项目页面上找到GitHub page.。

git clone https://github.com/FRRouting/frr.git

       从Git构建时,有几个分支可供选择。主分支是主要的开发分支。它应该被认为是不稳定的。每个发行版都有自己的分支stable/X.X,其中X.X是发行版。

此外,release tarballs发布在GitHub发布页面上。

Build Configuration

        FRR具有一个优秀的配置脚本,它自动检测大多数主机配置。有几个附加的配置选项可自定义生成,以包括或排除特定功能和依赖项。
       首先,更新构建系统。更改为FRR源目录并发出:

./bootstrap.sh

       这将安装任何缺少的构建脚本并更新自动工具配置。完成后,您可以继续从下面的列表中选择配置选项。

  • --enable-tcmalloc

启用备用malloc库。在某些情况下,这样做更快、更有效,但在某些情况下则不然。

  • --disable-doc

不要构建任何文档,包括这个文档。

  • --enable-doc-html

从文档中除了正常输出外,还可以构建html文档。

  • --disable-zebra

不要构建zebra守护进程。这通常只在将bgp构建为独立服务器的场景中有用。

  • --disable-ripd

不要建造ripd。

  • --disable-ripngd

不要建造ripngd。

  • --disable-ospfd

不要建造ospfd。

  • --disable-ospf6d

不要建造ospf6d。

  • --disable-bgpd

不要建造bgpd。

  • --disable-ldpd

不要建造ldpd。

  • --disable-eigrpd

不要建造eigrpd。

  • --disable-babeld

不要建造babeld。

  • --disable-watchfrr

不要构建watchfrr。Watchfrr用于将守护程序集成到计算机上可用的启动/关闭软件中。这是systemd集成所必需的,如果禁用watchfrr,则不能进行任何systemd集成。

  • --enable-systemd

使用systemd集成构建watchfrr,这将允许FRR与systemd通信,告诉systemd FRR是否正确出现。

  • --enable-werror

将所有警告转换为错误作为编译选项生成。这只建议开发者使用。

  • --disable-pimd

关闭pimd的生成。在某些BSD平台上,由于缺乏内核支持,pimd无法正确构建。

  • --disable-vrrpd

关闭vrrpd的生成。支持vrrpd需要Linux;不支持其他平台。

  • --disable-pbrd

关闭pbrd的构建。此守护进程当前需要linux才能正常运行。

  • --enable-sharpd

打开构建sharpd。这个守护进程有助于FRR的测试,还可以用作快速简便的路由生成器。

  • --disable-staticd

不要构建staticd。如果您想要静态路由,这个守护进程是必需的。

  • --disable-bfdd

不要建造bfdd。

  • --disable-bgp-announce

制作根本不发布bgp公告的bgpd。此功能适用于将bgpd用作BGP公告侦听器。

  • --disable-bgp-vnc

关闭bgpd使用VNC的功能。

  • --disable-bgp-bmp

关闭BGP BMP支持

  • --enable-datacenter

启用系统默认值,使其像在数据中心中一样工作。请参阅defaults.h以了解此配置选项所更改的内容。

  • --enable-snmp

启用SNMP支持。默认情况下,禁用SNMP支持。

  • --disable-ospfapi

禁用对OSPF-API的支持,这是一种直接用ospfd接口的API。如果设置了–enable opaque lsa,则启用OSPF-API。

  • --disable-ospfclient

禁用构建示例OSPF-API客户端。

  • --disable-isisd

不要建造isisd。

  • --disable-fabricd

不要建造fabricd。

  • --enable-isis-topology

启用IS-IS拓扑生成器。

  • --enable-realms

支持Linux领域。在插入Linux内核时,将1-255之间的标记值转换为领域值。然后可以将路由策略分配给领域。请参阅tc手册页。

  • --disable-irdp

禁用IRDP服务器支持。如果可以同时使用struct in_pktinfo和struct icmphdr,则默认情况下会启用此选项。

  • --disable-rtadv

禁用zebra中的支持IPV6路由器播发。

  • --enable-gcc-rdynamic

将-rdynamic选项传递给链接器驱动程序。在大多数情况下,这是获得可用回溯所必需的。如果编译器被检测为gcc,则此选项默认为on,但建议给出显式的enable/disable。

  • --disable-backtrace

控制对崩溃处理程序的回溯支持。默认情况下,这是自动检测的。使用开关将强制执行请求的行为,如果请求了支持但不可用,则会失败并出现错误。在BSD系统上,这需要libexecinfo,而在glibc上,这是libc本身的一部分。

  • --enable-dev-build

打开一些在开发环境中编译FRR的选项。具体来说,为编译选项打开-g3-O0,并添加语法sandbox的包含。

  • --disable-snmp

不支持SNMP的生成。

  • --disable-vtysh

不使用VTYSH构建。

  • --enable-fpm

使用FPM模块支持构建。

  • --enable-numeric-version

Alpine Linux不允许版本字符串中包含非数字字符。有了这个选项,我们提供了一种为APK dev包构建去除这些字符的方法。

  • --disable-version-build-config

在show version命令中报告版本字符串时,删除包含所有生成配置参数的“configuerd with”字段。

  • --with-pkg-extra-version=VER

添加额外版本字段,用于打包程序/发行版

  • --with-pkg-git-version

将git信息添加到MOTD并生成版本字符串

  • --enable-multipath=X

编译FRR,最多支持X路ECMP。这个数字可以是0-999。为了在设置X=0时向后兼容旧的configure选项,我们将使用64路ECMP构建FRR。这是必要的,因为FRR构建的是硬编码数组,所以我们需要知道在构建时将这些数组制作成多大。另外,如果这个参数没有传入,FRR将默认为16 ECMP。

  • --enable-shell-access

启用FRR从vtysh本身访问某些shell选项(telnet/ssh/bash/etc)的能力。这个选项被认为是非常不安全的,只有当你真正知道你在做什么时才应该考虑使用。

  • --enable-gcov

gcov的代码覆盖率报告需要调整C和LD标志。使用此选项,gcov工具将添加到构建中,并在执行期间创建覆盖率报告。还创建了check coverage make目标,以便将报告上载到编解码器io. 上载需要设置COMMIT(git hash)和TOKEN(codecov upload TOKEN)环境变量。

  • --enable-config-rollbacks

具有配置回滚支持的生成。需要SQLite3。

  • --enable-confd=<dir>

构建ConfD northbound插件。在dir中查找libconfd libs和headers。

  • --enable-sysrepo

构建Sysrepo northbound插件。

  • --enable-grpc

启用gRPC northbound插件。

  • --enable-zeromq

启用ZeroMQ处理程序。

  • --with-libpam

在vtysh中使用libpam支持PAM。

  • --enable-time-check XXX

当使用XXX值(以微秒为单位)启用此选项时,任何超过此值运行的线程都将导致向日志发出警告。如果未指定任何值或未包含此选项,则默认时间为5秒。如果指定了–disable time check,则不会对任何线程运行长度发出警告。

  • --disable-cpu-time

禁用cpu进程记帐,此命令还禁用show thread cpu命令。如果禁用此选项,–启用时间检查将被忽略。这种cpu时间的禁用实际上意味着跳过getrusage调用。因为这是一个进入内核的进程切换,所以具有高FRR负载的系统可能会看到行为的改进。请注意,从开发人员的角度来看,show thread cpu被认为是一个很好的数据收集工具。

  • --enable-pcreposix

启用PCRE Posix libs for regex功能的用法。

  • --enable-rpath

在可执行文件中设置硬编码的路径[default=yes]。

  • --enable-scripting

启用Lua脚本[default=no]。

您可以将上述选项的任意组合指定给configure脚本。默认情况下,可执行文件放在/usr/local/sbin中,配置文件放在/usr/local/etc中。/usr/local/installation前缀和其他目录可以使用配置脚本的以下选项进行更改。

  • --prefix <prefix>

在前缀[/usr/local]中安装与体系结构无关的文件。

  • --sysconfdir <dir>

在dir[prefix/etc]中查找配置文件。请注意,这里将安装示例配置文件。

  • --localstatedir <dir>

将zebra配置为对本地状态文件(如pid文件和unix套接字)使用dir。

  • --with-scriptdir <dir>

在dir[prefix/etc/frr/scripts]中查找Lua脚本。

  • --with-yangmodelsdir <dir>

在dir[prefix/share/YANG]中查找YANG模块。请注意,FRR模块将安装在此处。

  • --with-vici-socket <path>

设置StrongSWAN vici接口套接字路径[/var/run/查隆·维奇].

Python dependency, documentation and tests

FRR的文档和基本单元测试大量使用Python编写的代码。此外,FRR提供了用C编写的Python扩展,这些扩展在其构建过程中使用。

在这种程度上,FRR需要:

  • CPython的安装,最好是版本3.2或更新的版本(2.7可以工作,但已过期,并将在某个时候停止工作。)
  • 该版本CPython的开发文件(主要是头文件)
  • 为该版本的CPython安装sphinx,以构建文档
  • 为该版本的CPython安装pytest,以运行单元测试

sphinx和pytest依赖可以通过不构建文档/不运行make check来避免,但是CPython依赖是FRR构建过程的硬依赖(对于clippy工具)

Least-Privilege Support

此外,您可以将zebra配置为在启动后不久放弃其提升的权限并切换到另一个用户。配置脚本将自动尝试配置此支持。有三个配置选项可以控制FRR守护程序的行为。

  • --enable-user <user>

启动后立即切换到user user,并以user`user的身份正常运行。

  • --enable-group <user>

启动后立即将真实有效的组切换到另一组。

  • --enable-vty-group <group>

Create Unix Vty sockets (for use with vtysh) with group ownership set to group. This allows one to create a separate group which is restricted to accessing only the vty sockets, hence allowing one to delegate this group to individual users, or to run vtysh setgid to this group.

创建组所有权设置为group的Unix Vty套接字(用于vtysh)。这允许创建一个单独的组,该组仅限于访问vty套接字,因此允许将该组委派给各个用户,或对该组运行vtysh setgid。

如果未指定用户或组,则将配置的默认用户和组为“frr”。请注意,此用户或组需要对本地状态目录的写访问权限(请参阅--localstatedir),并且至少需要对配置目录的读访问权限,如果您希望允许守护进程将其配置写出来,则需要对配置目录的写访问权限(请参阅--sysconfdir)。

在具有“libcap”功能的操作库(目前仅限于Linux)的系统上,FRR将只保留所需的最小功能,并且只在短时间内提升这些功能。在没有libcap的系统上,FRR将以用户指定的方式运行,并且只在短时间内将其UID提升到0。

Linux说明

        有几个选项仅适用于GNU/Linux系统。如果您使用GNU/Linux,请确保当前的内核配置是您想要的。FRR将与任何内核配置一起运行,但确实存在一些建议。

  • CONFIG_NETLINK

内核/用户Netlink套接字。这将启用Linux内核和zebra(Kernel Interface)之间的高级接口。

  • CONFIG_RTNETLINK

这使得可以接收Netlink路由消息。如果指定此选项,zebra可以直接从内核(Kernel Interface)检测路由信息更新。

  • CONFIG_IP_MULTICAST

此选项启用IP多播,并且应在使用ripd(RIP)或ospfd(OSPFv2)时指定,因为这些协议使用多播。

Linux sysctl settings and kernel modules

There are several kernel parameters that impact overall operation of FRR when using Linux as a router. Generally these parameters should be set in a sysctl related configuration file, e.g., /etc/sysctl.conf on Ubuntu based systems and a new file /etc/sysctl.d/90-routing-sysctl.conf on Centos based systems. Additional kernel modules are also needed to support MPLS forwarding.

当使用Linux作为路由器时,有几个内核参数会影响FRR的整体操作。通常,这些参数应该在sysctl相关的配置文件中设置,例如//etc/sysctl.conf 基于Ubuntu的系统和一个新文件/etc/sysctl.d/90-routing-sysctl.conf在Centos系统上。还需要额外的内核模块来支持MPLS转发。

IPv4 and IPv6 forwarding

将以下各项设置为在内核中启用IP转发:

net.ipv4.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1

MPLS forwarding

在4.1版本的内核中引入了基本的MPLS支持,在4.3和4.5版本中引入了额外的功能。有关Linux MPLS支持的一些常规信息,请参阅https://www.netdevconf.org/1.1/proceedings/slides/prabhu-mpls-tutorial.pdf。应加载以下模块以支持MPLS转发,并且通常将其添加到配置文件中,例如/etc/modules-load.d/modules.conf:

# Load MPLS Kernel Modules
mpls_router
mpls_iptunnel

下面是一个在内核中启用MPLS转发的示例,通常通过编辑/etc/sysctl.conf:

# Enable MPLS Label processing on all interfaces
net.mpls.conf.eth0.input=1
net.mpls.conf.eth1.input=1
net.mpls.conf.eth2.input=1
net.mpls.platform_labels=100000

确保添加一行等于net.mpls.conf.<if>.input用于MPLS的每个接口“<if>”,并将标签设置为适当的值。

VRF forwarding

有关Linux VRF支持的一般信息,请参阅https://www.kernel.org/doc/Documentation/networking/vrf.txt。VRFs的内核支持在4.3中引入,并在4.13中得到改进,这是FRR测试中使用最多的版本(截至2018年6月)。有关使用Linux VRFs和内核特定功能的其他背景信息,请参阅http://schd.ws/hosted\u files/ossna2017/fe/vrf-tutorial-oss.pdf。

每个VRF打开一个单独的BGP TCP套接字。

重要提示:截至2018年6月,内核版本4.14-4.18存在一个已知错误,无法正确处理VRF特定的TCP套接字。在运行这些内核版本时,如果无法建立任何VRF BGP相邻关系,请降级到4.13。这个问题在4.14.57、4.17.9和更高版本的内核中得到了修复。

Building

选择配置选项后,运行配置脚本并传递所选选项:

./configure \
    --prefix=/usr \
    --enable-exampledir=/usr/share/doc/frr/examples/ \
    --localstatedir=/var/run/frr \
    --sbindir=/usr/lib/frr \
    --sysconfdir=/etc/frr \
    --enable-pimd \
    --enable-watchfrr \
    ...

配置软件后,您就可以在系统中构建和安装它了。

make && sudo make install

如果一切顺利完成,应安装FRR。现在,您应该跳到“基本设置”部分。

猜你喜欢

转载自blog.csdn.net/weixin_39094034/article/details/115138416