FRRouting

Cumulus Linux 使用 FRR 提供动态路由的路由协议,并支持以下路由协议

架构

FRR 套件由各种特定于协议的守护进程和一个名为 zebra 的独立于协议的守护进程组成。每个特定于协议的守护进程都负责运行相关协议并根据交换的信息构建路由表。

同时运行多个协议守护进程并不少见。例如,在企业边缘,企业内部协议(如 OSPF)与将企业连接到世界其他地方的协议(如 BGP)一起运行。

zebra 是解析多种协议(包括您指定的静态路由)提供的路由,并使用 netlink(在 Linux 中)在 Linux 内核中编程这些路由的守护进程。《FRRouting 文档》将 zebra 定义为 FRR 的 IP 路由管理器,它提供内核路由表更新、接口查找以及不同路由协议之间的路由再分发。

配置 FRR

如果您使用 NVUE 配置交换机,则本节中的信息不适用。NVUE 自动管理 FRR 守护进程和配置。这些说明仅适用于通过 linux 扁平文件配置直接管理 FRR 的用户。

如果您未使用 NVUE 配置系统,则默认情况下 Cumulus Linux 中不会启动 FRR。在运行 FRR 之前,请确保已在 /etc/frr/daemons 文件中启用您打算使用的相关守护进程(bgpdospfdospf6dpimdpbrd)。

NVIDIA 尚未测试 RIP、RIPv6、IS-IS 或 Babel。

默认情况下,Cumulus Linux 启用 zebra 守护进程。您可以根据您计划路由网络的方式启用其他守护进程。

在启动 FRR 之前,编辑 /etc/frr/daemons 文件以启用您要使用的每个守护进程。例如,要启用 BGP,请将 bgpd 设置为 yes

...
bgpd=yes
ospfd=no
ospf6d=no
ripd=no
ripngd=no
isisd=no
fabricd=no
pimd=no
ldpd=no
nhrpd=no
eigrpd=no
babeld=no
sharpd=no
pbrd=no
vrrpd=no
...

启用并启动 FRR

如果您使用 NVUE 配置交换机,则本节中的信息不适用。NVUE 自动管理 FRR 守护进程和配置。这些说明仅适用于通过 linux 扁平文件配置直接管理 FRR 的用户。

启用相应的守护进程后,启用并启动 FRR 服务。

cumulus@switch:~$ sudo systemctl enable frr.service
cumulus@switch:~$ sudo systemctl start frr.service

  • 所有路由协议守护进程(bgpdospfdospf6dripdripngdisisdpimd)都依赖于 zebra。当您启动 FRR 时,systemd 确定 zebra 是否正在运行;如果 zebra 未运行,则 systemd 启动 zebra,然后启动依赖服务,例如 bgpd
  • 如果您重启服务,其依赖服务也会重启。例如,运行 systemctl restart frr.service 会重启任何已启用的正在运行的路由协议守护进程。
  • 有关 systemctl 命令和更改守护进程状态的更多信息,请参阅 Cumulus Linux 中的服务和守护进程。

恢复默认配置

如果您使用 NVUE 配置交换机,则本节中的信息不适用。NVUE 自动管理 FRR 守护进程和配置。这些说明仅适用于使用 linux 扁平文件配置直接管理 FRR 的用户。

如果您需要将 FRR 配置恢复为默认运行配置,请删除 frr.conf 文件并重启 frr 服务。

在继续操作之前,备份 frr.conf(或您要删除的任何配置文件)。

  1. 确认 service integrated-vtysh-config 正在运行。

  2. 删除 /etc/frr/frr.conf

    cumulus@switch:~$ sudo rm /etc/frr/frr.conf
    
  3. 使用此命令重启 FRR

    cumulus@switch:~$ sudo systemctl restart frr.service
    

    重启 FRR 会重启您启用且正在运行的所有路由协议守护进程。NVIDIA 建议您重启交换机而不是重启 FRR 服务,以在使用 MLAG 的冗余交换机存在时最大限度地减少流量影响。

接口 IP 地址和 VRF

FRR 从 /etc/network/interfaces 文件继承网络接口的 IP 地址和任何关联的路由表。这是定义地址的推荐方法;请勿使用 FRR 创建接口。有关更多信息,请参阅配置 IP 地址和虚拟路由和转发 - VRF。

vtysh 模态 CLI

FRR 提供一个名为 vtysh 的命令行界面 (CLI),用于配置和显示协议状态。要启动 CLI,请运行 sudo vtysh 命令。

cumulus@switch:~$ sudo vtysh

Hello, this is FRRouting (version 8.4.3).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

switch#

FRR 为 CLI 提供不同的模式,某些命令仅在特定模式下可用。配置可通过 configure terminal 命令获得。

switch# configure terminal
switch(config)#

提示符显示当前的 CLI 模式。例如,当您运行特定于接口的命令时,提示符会更改为

switch(config)# interface swp1
switch(config-if)#

当您运行特定于路由协议的命令时,提示符会更改

switch(config)# router ospf
switch(config-router)#

? 显示可用顶级命令的列表

switch(config-if)# ?
  bandwidth    Set bandwidth informational parameter
  description  Interface specific description
  end          End current mode and change to enable mode
  exit         Exit current mode and down to previous mode
  ip           IP Information
  ipv6         IPv6 Information
  isis         IS-IS commands
  link-detect  Enable link detection on interface
  list         Print command list
  mpls-te      MPLS-TE specific commands
  multicast    Set multicast flag to interface
  no           Negate a command or set its defaults
  ptm-enable   Enable neighbor check with specified topology
  quit         Exit current mode and down to previous mode
  shutdown     Shutdown the selected interface

基于 ? 的补全也可用,以查看命令采用的参数

switch(config-if)# bandwidth ?
<1-10000000>  Bandwidth in kilobits
switch(config-if)# ip ?
address  Set the IP address of an interface
irdp     Alter ICMP Router discovery preference this interface
ospf     OSPF interface commands
rip      Routing Information Protocol
router   IP router interface commands

除了基于 ? 的补全之外,您还可以使用 Tab 键补全来获得有关有效关键字或选项的帮助,当您输入命令时。例如,将 Tab 键补全与 `router ospf` 一起使用会显示命令的可能选项,并将您返回到命令提示符以完成命令。

switch(config)# router ospf vrf<<press tab>>
BLUE     RED      default  mgmt     
switch(config)# router ospf vrf

要搜索特定的 vtysh 命令,以便您可以识别要使用的正确语法,请运行 sudo vtysh -c 'find <term>' 命令。例如,要仅显示包含 mlag 的命令

cumulus@leaf01:mgmt:~$ sudo vtysh -c 'find mlag'
  (view)  show ip pim [mlag] vrf all interface [detail|WORD] [json]
  (view)  show ip pim [vrf NAME] interface [mlag] [detail|WORD] [json]
  (view)  show ip pim [vrf NAME] mlag upstream [A.B.C.D [A.B.C.D]] [json]
  (view)  show ip pim mlag summary [json]
  (view)  show ip pim vrf all mlag upstream [json]
  (view)  show zebra mlag
  (enable)  [no$no] debug zebra mlag
  (enable)  debug pim mlag
  (enable)  no debug pim mlag
  (enable)  test zebra mlag <none$none|primary$primary|secondary$secondary>
  (enable)  show ip pim [mlag] vrf all interface [detail|WORD] [json]
  (enable)  show ip pim [vrf NAME] interface [mlag] [detail|WORD] [json]
  (enable)  show ip pim [vrf NAME] mlag upstream [A.B.C.D [A.B.C.D]] [json]
  (enable)  show ip pim mlag summary [json]
  (enable)  show ip pim vrf all mlag upstream [json]
  (enable)  show zebra mlag
  (config)  [no$no] debug zebra mlag
  (config)  debug pim mlag
  (config)  ip pim mlag INTERFACE role [primary|secondary] state [up|down] addr A.B.C.D
  (config)  no debug pim mlag
  (config)  no ip pim mlag

您可以显示任何级别的状态,包括顶层。例如,要查看 zebra 看到的路由表

switch# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, T - Table,
       > - selected route, * - FIB route
B>* 0.0.0.0/0 [20/0] via fe80::4638:39ff:fe00:c, swp29, 00:11:57
  *                  via fe80::4638:39ff:fe00:52, swp30, 00:11:57
B>* 10.0.0.1/32 [20/0] via fe80::4638:39ff:fe00:c, swp29, 00:11:57
  *                    via fe80::4638:39ff:fe00:52, swp30, 00:11:57
B>* 10.0.0.11/32 [20/0] via fe80::4638:39ff:fe00:5b, swp1, 00:11:57
B>* 10.0.0.12/32 [20/0] via fe80::4638:39ff:fe00:2e, swp2, 00:11:58
B>* 10.0.0.13/32 [20/0] via fe80::4638:39ff:fe00:57, swp3, 00:11:59
B>* 10.0.0.14/32 [20/0] via fe80::4638:39ff:fe00:43, swp4, 00:11:59
C>* 10.0.0.21/32 is directly connected, lo
B>* 10.0.0.51/32 [20/0] via fe80::4638:39ff:fe00:c, swp29, 00:11:57
  *                     via fe80::4638:39ff:fe00:52, swp30, 00:11:57
B>* 172.16.1.0/24 [20/0] via fe80::4638:39ff:fe00:5b, swp1, 00:11:57
  *                      via fe80::4638:39ff:fe00:2e, swp2, 00:11:57
B>* 172.16.3.0/24 [20/0] via fe80::4638:39ff:fe00:57, swp3, 00:11:59
  *                      via fe80::4638:39ff:fe00:43, swp4, 00:11:59

要在配置级别运行相同的命令,请在前面加上 do

switch(config-router)# do show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, T - Table,
       > - selected route, * - FIB route
B>* 0.0.0.0/0 [20/0] via fe80::4638:39ff:fe00:c, swp29, 00:05:17
  *                  via fe80::4638:39ff:fe00:52, swp30, 00:05:17
B>* 10.0.0.1/32 [20/0] via fe80::4638:39ff:fe00:c, swp29, 00:05:17
  *                    via fe80::4638:39ff:fe00:52, swp30, 00:05:17
B>* 10.0.0.11/32 [20/0] via fe80::4638:39ff:fe00:5b, swp1, 00:05:17
B>* 10.0.0.12/32 [20/0] via fe80::4638:39ff:fe00:2e, swp2, 00:05:18
B>* 10.0.0.13/32 [20/0] via fe80::4638:39ff:fe00:57, swp3, 00:05:18
B>* 10.0.0.14/32 [20/0] via fe80::4638:39ff:fe00:43, swp4, 00:05:18
C>* 10.0.0.21/32 is directly connected, lo
B>* 10.0.0.51/32 [20/0] via fe80::4638:39ff:fe00:c, swp29, 00:05:17
  *                     via fe80::4638:39ff:fe00:52, swp30, 00:05:17
B>* 172.16.1.0/24 [20/0] via fe80::4638:39ff:fe00:5b, swp1, 00:05:17
  *                      via fe80::4638:39ff:fe00:2e, swp2, 00:05:17
B>* 172.16.3.0/24 [20/0] via fe80::4638:39ff:fe00:57, swp3, 00:05:18
  *                      via fe80::4638:39ff:fe00:43, swp4, 00:05:18

要使用 vtysh 运行单个命令,请使用 -c 选项

cumulus@switch:~$ sudo vtysh -c 'sh ip route'
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, A - Babel,
       > - selected route, * - FIB route

K>* 0.0.0.0/0 via 192.168.0.2, eth0
C>* 192.0.2.11/24 is directly connected, swp1
C>* 192.0.2.12/24 is directly connected, swp2
B>* 203.0.113.30/24 [200/0] via 192.0.2.2, swp1, 11:05:10
B>* 203.0.113.31/24 [200/0] via 192.0.2.2, swp1, 11:05:10
B>* 203.0.113.32/24 [200/0] via 192.0.2.2, swp1, 11:05:10
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.0.0/24 is directly connected, eth0

要向下运行多个级别的命令

cumulus@switch:~$ sudo vtysh -c 'configure terminal' -c 'router ospf' -c 'area 0.0.0.1 range 10.10.10.0/24'

命令也接受部分命令名称(例如,sh ip route),只要部分命令名称未被别名化

cumulus@switch:~$ sudo vtysh -c 'sh ip r'
% Ambiguous command.

要禁用 FRR 中的命令或功能,请在命令前加上 no。例如

cumulus@switch:~$ sudo vtysh

switch# configure terminal
switch(config)# router ospf
switch(config-router)# no area 0.0.0.1 range 10.10.10.0/24
switch(config-router)# exit
switch(config)# exit
switch# write memory
switch# exit
cumulus@switch:~$

要查看配置的当前状态,请运行 show running-config 命令

示例命令

如果您尝试配置未运行的路由协议,则 vtysh 会忽略这些命令。

NVUE Show 命令和 vtysh 输出

NVUE 为某些 NVUE show 命令提供 --output raw 选项,以显示 vtysh 本地输出。

支持 --output raw 的 NVUE 命令

在路由表中显示路由

要显示路由表中的所有路由,请运行 nv show vrf <vrf> router rib <address-family> route 命令

cumulus@switch:~$ nv show vrf default router rib ipv4 route

Flags - * - selected, q - queued, o - offloaded, i - installed, S - fib-        
selected, x - failed                                                            
                                                                                
Route            Protocol   Distance  Uptime                NHGId  Metric  Flags
---------------  ---------  --------  --------------------  -----  ------  -----
10.0.1.12/32     connected  0         2024-10-22T18:36:01Z  15     0       *Sio 
10.0.1.34/32     bgp        20        2024-10-22T18:42:22Z  125    0       *Si  
10.0.1.255/32    bgp        20        2024-10-22T18:36:05Z  125    0       *Si  
10.10.10.1/32    connected  0         2024-10-22T18:35:54Z  15     0       *Sio 
10.10.10.2/32    bgp        20        2024-10-22T18:35:58Z  62     0       *Si  
10.10.10.3/32    bgp        20        2024-10-22T18:42:16Z  125    0       *Si  
10.10.10.4/32    bgp        20        2024-10-22T18:42:16Z  125    0       *Si  
10.10.10.63/32   bgp        20        2024-10-22T18:36:05Z  125    0       *Si  
10.10.10.64/32   bgp        20        2024-10-22T18:36:05Z  125    0       *Si  
10.10.10.101/32  bgp        20        2024-10-22T18:36:05Z  115    0       *Si  
10.10.10.102/32  bgp        20        2024-10-22T18:36:04Z  107    0       *Si

要显示有关特定路由的信息,请运行 nv show vrf <vrf> router rib <address-family> route <prefix> 命令

cumulus@switch:~$ nv show vrf default router rib ipv4 route 10.0.1.34/32
route-entry
==============
                                                                                
    Protocol - Protocol name, TblId - Table Id, NHGId - Nexthop group Id, Flags - u 
    - unreachable, r - recursive, o - onlink, i - installed, d - duplicate, c -     
    connected, A - active                                                           
                                                                                
    EntryIdx  Protocol  TblId  NHGId  Distance  Metric  ResolvedVia                ResolvedViaIntf  Weight  Flags
    --------  --------  -----  -----  --------  ------  -------------------------  ---------------  ------  -----
    1         bgp       254    125    20        0       fe80::4ab0:2dff:fe32:2a3f  swp52            1       iA   
                                                        fe80::4ab0:2dff:fe41:6b79  swp51            1       iA

要显示路由表中的路由总数,请运行 nv show vrf <vrf> router rib <address-family> route-count 命令

cumulus@switch:~$ nv show vrf default router rib ipv4 route-count
                 operational 
------------     ----------- 
total-routes    34 
[protocol]      bgp 
[protocol]      connected 

对于 IPv6,运行 nv show vrf <vrf> router rib ipv6 route-count 命令。

要显示路由表中每个协议的路由总数,请运行 nv show vrf <vrf> router rib <address-family> route-count protocol 命令

cumulus@switch:~$ nv show vrf default router rib ipv4 route-count protocol
Protocol   Total 
---------  ----- 
bgp        6 
connected  3 
ospf       8 
static     3 

对于 IPv6,运行 nv show vrf <vrf> router rib ipv6 route-count protocol 命令。

查找目标的路由

要在路由表中查找特定目标的路由,请运行 nv action lookup vrf <vrf-id> router fib <address-family> <ip-address> 命令。

以下示例在路由表中查找 IPv4 地址为 10.10.10.3 的目标的路由

cumulus@switch:~$ nv action lookup vrf default router fib ipv4 10.10.10.3
Action executing ...

dst: 10.10.10.4
nhid: 106
protocol: bgp
metric: 20
flags: []

id: 106
group: 62,102
protocol: zebra
flags: []

id: 62
gateway: fe80::4ab0:2dff:feff:6ac0
dev: swp52
scope: link
protocol: zebra
flags: []

id: 102
gateway: fe80::4ab0:2dff:fe8b:d6bf
dev: swp51
scope: link
protocol: zebra
flags: []

Action succeeded 

以下示例显示路由表中 IPv6 地址为 228:35::5 的目标的路由

cumulus@switch:~$ nv action lookup vrf default router fib ipv6 fe80::4ab0:2dff:fe8b:d6bf
Action executing ...

dst: fe80::/64
dev: br_default
protocol: kernel
metric: 256
flags: []
pref: medium

Action succeeded

下一跳跟踪

路由守护进程通过来自 zebra 守护进程的通知跟踪下一跳的有效性。例如,当 bgpdzebra 删除连接路由后收到下一跳跟踪 (NHT) 通知时,如果关联的接口关闭,FRR 会卸载解析为 zebra 中连接路由上的下一跳的 BGP 路由。

默认情况下,zebra 守护进程不认为解析为默认路由的下一跳有效。您可以配置 NHT 以考虑最长前缀匹配查找,用于解析为默认路由的下一跳地址作为有效的下一跳。以下示例配置默认路由对于默认 VRF 中的 NHT 有效

cumulus@leaf01:~$ nv set vrf default router nexthop-tracking ipv4 resolved-via-default on
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
leaf01# configure terminal
leaf01(config)# ip nht resolve-via-default
leaf01(config)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

您可以将路由映射应用于特定路由守护进程的 NHT,以允许或拒绝将路由视为有效的下一跳。以下示例将 ROUTEMAP1 应用于 BGP,阻止 NHT 考虑解析为默认 VRF 中 10.0.0.0/8 的下一跳为有效

cumulus@leaf01:~$ nv set router policy prefix-list PREFIX1 type ipv4
cumulus@leaf01:~$ nv set router policy prefix-list PREFIX1 rule 1 match 10.0.0.0/8
cumulus@leaf01:~$ nv set router policy prefix-list PREFIX1 rule 1 action permit
cumulus@leaf01:~$ nv set router policy route-map ROUTEMAP1 rule 1 match ip-prefix-list PREFIX1
cumulus@leaf01:~$ nv set router policy route-map ROUTEMAP1 rule 1 action deny 
cumulus@leaf01:~$ nv set router policy route-map ROUTEMAP1 rule 2 action permit
cumulus@leaf01:~$ nv set vrf default router nexthop-tracking ipv4 route-map ROUTEMAP1 protocol bgp
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
leaf02# configure terminal
leaf02(config)# ip prefix-list PREFIX1 seq 1 permit 10.0.0.0/8
leaf02(config)# route-map ROUTEMAP1 deny 1
leaf02(config-route-map)#  match ip address prefix-list PREFIX1
leaf02(config-route-map)# route-map ROUTEMAP1 permit 2
leaf02(config-route-map)# ip nht bgp route-map ROUTEMAP1
leaf02(config)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

您可以使用以下 NVUE 命令显示跟踪的下一跳

  • nv show vrf <vrf> router nexthop-tracking ipv4
  • nv show vrf <vrf> router nexthop-tracking ipv4 <ip-address>
  • nv show vrf <vrf> router nexthop-tracking ipv6
  • nv show vrf <vrf> router nexthop-tracking ipv6 <ip-address>
cumulus@leaf01:~$  nv show vrf default router nexthop-tracking ipv4
                      operational  applied  pending
--------------------  -----------  -------  -------
resolved-via-default                        on

route-map
============
No Data

ip-address
=============
                                                                                
    DirectlyConnected - Indicates if nexthop is directly connected or not,          
    ResolvedProtocol - Resolved via protocol, Interface - Resolved via interface,   
    ProtocolFiltered - Indicates whether protocol filtered or not, Flags - o -      
    onlink, c - directly-connected, A - active                                      
                                                                                
    IPAddress    DirectlyConnected  ResolvedProtocol  Interface      VRF      Weight  ProtocolFiltered  Flags
    -----------  -----------------  ----------------  -------------  -------  ------  ----------------  -----
    10.0.1.34    off                bgp               swp52          default  1       off               A    
                                                      swp53          default  1                         A    
                                                      swp54          default  1                         A    
                                                      swp51          default  1                         A    
    10.10.10.2   off                bgp               peerlink.4094  default  1       off               A    
    10.10.10.3   off                bgp               swp52          default  1       off               A    
                                                      swp53          default  1                         A    
                                                      swp54          default  1                         A    
                                                      swp51          default  1                         A    
    10.10.10.4   off                bgp               swp52          default  1       off               A    
                                                      swp53          default  1                         A    
                                                      swp54          default  1                         A    
                                                      swp51          default  1                         A    
    10.10.10.63  off                bgp               swp52          default  1       off               A    
                                                      swp53          default  1                         A    
                                                      swp54          default  1                         A    
                                                      swp51          default  1                         A    
    10.10.10.64  off                bgp               swp52          default  1       off               A    
                                                      swp53          default  1                         A    
                                                      swp54          default  1                         A    
                                                      swp51          default  1                         A

您还可以运行 vtysh show ip nht vrf <vrf> <ip-address> 命令。

重新加载 FRR 配置

如果您使用 NVUE 配置交换机,则本节中的信息不适用。NVUE 自动管理 FRR 守护进程和配置。这些说明仅适用于通过 linux 扁平文件配置直接管理 FRR 的用户。

如果您对路由配置进行了更改,则需要重新加载 FRR,以便您的更改生效。FRR 重新加载使您能够仅应用您对 FRR 配置所做的修改,从而将其运行状态与 /etc/frr/frr.conf 中的配置同步。这对于优化环境中的 FRR 自动化或应用在运行时所做的更改非常有用。

在修改 /etc/frr/frr.conf 后重新加载 FRR 配置,请运行

cumulus@switch:~$ sudo systemctl reload frr.service

检查运行配置并验证其是否与 /etc/frr/frr.conf 中的配置匹配。

如果运行配置不是您期望的,请提交支持请求并提供以下信息

  • 当前运行配置(运行 show running-config 并将内容输出到文件)
  • /etc/frr/frr.conf 的内容
  • /var/log/frr/frr-reload.log 的内容

FRR 日志记录

如果您使用 NVUE 配置交换机,则本节中的信息不适用。NVUE 自动管理 FRR 守护进程和配置。这些说明仅适用于通过 linux 扁平文件配置直接管理 FRR 的用户。

默认情况下,Cumulus Linux 将 FFR 配置为 syslog 严重级别 6(信息性)。日志输出写入 /var/log/frr/frr.log 文件。

要将调试消息写入日志文件,您必须运行 log syslog debug 命令将 FRR 配置为 syslog 严重级别 7(调试);否则,当您发出调试命令(例如 debug bgp neighbor-events)时,不会有输出转到 /var/log/frr/frr.log。但是,当您使用 log file /var/log/frr/debug.log 命令手动定义日志目标时,FRR 会自动默认为严重级别 7(调试)日志记录,并且输出会记录到 /var/log/frr/debug.log

注意事项

重复的主机名

交换机在 FRR 配置中可以有两个主机名。例如

cumulus@spine01:~$ sudo vtysh...
spine01# configure terminal
spine01(config)# hostname spine01-1
spine01-1(config)# do sh run
Building configuration...
Current configuration:
!
frr version 7.0+cl4u3
frr defaults datacenter
hostname spine01
hostname spine01-1
...

如果您使用 neighbor x.x.x.xneighbor swp# interface 命令配置相同的编号 BGP 邻居,则配置中会存在同一 IP 地址的两个邻居条目。要纠正此问题,请更新配置并重启 FRR 服务。

TCP 套接字和 BGP 对等会话

FRR 启动配置包括允许的最大打开文件数的设置。对于 BGP,打开的文件包括 BGP 连接使用的 TCP 套接字。任何一个 BGP 说话者几乎都可以同时启动 BGP 对等;因此,对于单个 BGP 对等方,您可能有两个 TCP 套接字。这两个套接字一直存在,直到 BGP 协议确定要使用的套接字,然后另一个套接字关闭。

1024 个打开文件的默认设置最多支持 512 个 BGP 对等会话。如果您预计您的网络部署将有更多 BGP 对等会话,则需要更新此设置。

NVIDIA 建议您将该值设置为至少是您预期最大 BGP 对等会话数的两倍。

要更新打开文件设置

  1. 编辑 /lib/systemd/system/frr.service 文件并更改 LimitNOFILE 参数。以下示例将 LimitNOFILE 参数设置为 4096。

    cumulus@switch:~$ sudo cat /lib/systemd/system/frr.service
    [Unit]
    Description=FRRouting
    Documentation=https://frrouting.readthedocs.io/en/latest/setup.html
    After=networking.service csmgrd.service
       
    [Service]
    Nice=-5
    Type=forking
    NotifyAccess=all
    StartLimitInterval=3m
    StartLimitBurst=3
    TimeoutSec=2m
    WatchdogSec=60s
    RestartSec=5
    Restart=on-abnormal
    LimitNOFILE=4096
    ...
    
  2. 重启 FRR 服务。

    cumulus@switch:~$ sudo systemctl restart frr.service