路由过滤和重分发

路由过滤允许您排除邻居通告或接收的路由。您可以使用路由过滤来操纵流量、减少内存利用率并提高安全性。

本节讨论以下路由过滤方法

  • 前缀列表
  • 路由映射
  • 路由重分发

路由映射和前缀列表名称必须以字母开头,并且可以包含字母、数字、下划线和破折号。例如,您可以将路由映射命名为 MAP10ROUTE-MAP_10,但不能将其命名为 1010_ROUTE-MAP

前缀列表

前缀列表是用于路由通告的访问列表,它匹配路由而不是流量。前缀列表通常与路由映射和其他过滤方法一起使用。前缀列表可以匹配前缀(网络本身)和前缀长度(子网掩码的长度)。

配置前缀列表

以下示例命令配置一个前缀列表,该列表允许在 10.0.0.0/16 范围内且子网掩码小于或等于 /30 的所有前缀。对于网络 10.0.0.0/24、10.10.10.0/24 和 10.0.0.10/32,只有 10.0.0.0/24 匹配(10.10.10.0/24 具有不同的前缀,而 10.0.0.10/32 具有更大的子网掩码)。

cumulus@switch:~$ nv set router policy prefix-list LIST1 rule 1 match 10.0.0.0/16 max-prefix-len 30
cumulus@switch:~$ nv set router policy prefix-list LIST1 rule 1 action permit
cumulus@switch:~$ nv config apply

对于 IPv6,您需要运行 nv set router policy prefix-list <name> type ipv6 命令将前缀列表类型设置为 IPv6。例如

cumulus@switch:~$ nv set router policy prefix-list prefixlistipv6 type ipv6
cumulus@switch:~$ nv set router policy prefix-list prefixlistipv6 rule 1 match 2001:100::1/64
cumulus@switch:~$ nv set router policy prefix-list prefixlistipv6 rule 1 action permit 
cumulus@switch:~$ nv config apply

以下示例命令配置一个前缀列表,该列表允许在 10.1.1.0/24 范围内且子网掩码小于 32 但大于 26 的所有前缀。对于网络 10.1.1.0/25、10.10.10.0/24 和 10.1.1.2/32,只有 10.1.1.2/32 匹配(10.1.1.0/25 具有更低的子网掩码,而 10.10.10.0/24 具有不同的前缀和更低的子网掩码)。

cumulus@switch:~$ nv set router policy prefix-list LIST1 rule 1 match 10.1.1.0/24 max-prefix-len 32
cumulus@switch:~$ nv set router policy prefix-list LIST1 rule 1 match 10.1.1.0/24 min-prefix-len 26
cumulus@switch:~$ nv set router policy prefix-list LIST1 rule 1 action permit
cumulus@switch:~$ nv config apply

以下示例命令配置一个前缀列表,该列表允许在 10.0.0.0/16 范围内且子网掩码小于或等于 /30 的所有前缀。对于网络 10.0.0.0/24、10.10.10.0/24 和 10.0.0.10/32,只有 10.0.0.0/24 匹配(10.10.10.0/24 具有不同的前缀,而 10.0.0.10/32 具有更大的子网掩码)。

cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# ip prefix-list LIST1 seq 1 permit 10.0.0.0/16 le 30
switch(config)# exit
switch# write memory
switch# exit
cumulus@switch:~$

以下示例命令配置一个前缀列表,该列表允许在 10.1.1.0/24 范围内且子网掩码小于 32 但大于 26 的所有前缀。对于网络 10.1.1.0/29、10.10.10.0/24 和 10.1.1.2/32,只有 10.1.1.2/32 匹配(10.10.10.0/24 具有不同的前缀和更低的子网掩码,而 10.1.1.0/29 具有更高的子网掩码)。

cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# ip prefix-list LIST1 seq 1 permit 10.1.1.0/24 ge 26 le 32
switch(config)# exit
switch# write memory
switch# exit
cumulus@switch:~$

vtysh 命令将配置保存在 /etc/frr/frr.conf 文件中。例如

cumulus@switch:~$ sudo cat /etc/frr/frr.conf
...
router ospf
 ospf router-id 10.10.10.1
 timers throttle spf 80 100 6000
 passive-interface vlan10
 passive-interface vlan20
ip prefix-list LIST1 seq 1 permit 10.0.0.0/16 le 30

要在名为 MAP1 的路由映射中使用此前缀列表

cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 action permit
cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 match type ipv4
cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 match ip-prefix-list LIST1
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# route-map MAP1 permit 10
switch(config-route-map)# match ip address prefix-list LIST1
switch(config-route-map)# exit
switch# write memory
switch# exit
cumulus@switch:~$

vtysh 命令将配置保存在 /etc/frr/frr.conf 文件中。例如

cumulus@switch:~$ sudo cat /etc/frr/frr.conf
...
ip prefix-list LIST1 seq 1 permit 10.0.0.0/16 le 30
route-map MAP1 permit 10
match ip address prefix-list LIST1

清除针对前缀列表显示的匹配项

您可以清除前缀列表统计信息。

  • 要清除针对所有前缀列表显示的匹配项数量,请运行 nv action clear router policy prefix-list 命令。
  • 要清除针对特定前缀列表显示的匹配项数量,请运行 nv action clear router policy prefix-list <prefix-list-id> 命令。
  • 要清除针对特定前缀列表规则编号和匹配 ID 显示的匹配项数量,请运行 nv action clear router policy prefix-list <prefix-list-id> rule <rule-id> match <match-id> 命令。

以下示例清除针对前缀列表 LIST1 显示的匹配项数量

cumulus@switch:~$ nv action clear router policy prefix-list LIST1
Action succeeded

以下示例清除针对 LIST1 规则 10 和匹配条件 10.0.0.0/16 显示的匹配项数量

cumulus@switch:~$ nv action clear router policy prefix-list LIST1 rule 10 match 10.0.0.0/16
Action succeeded

路由映射

路由映射是 Cumulus Linux 在路由器检查转发表之前考虑的路由策略。路由映射中的每个语句都有一个序列号,并包括一系列匹配和设置语句。路由映射从最低序列号解析到最高序列号,并在找到匹配项时停止。

Cumulus Linux 支持多种匹配和设置语句。例如,您可以匹配接口、前缀长度、下一跳或 BGP AS 路径列表。您可以设置 BGP 指标、路由上的本地优先级、源 IP 或匹配路由上的标签。有关支持的匹配和设置语句列表,请参阅下面的“匹配和设置语句”部分。

配置路由映射

要配置路由映射

  1. 指定一个或多个必须匹配的条件,以及(可选)一个或多个设置操作,以设置或修改路由的属性。如果路由映射未指定任何匹配条件,则它始终匹配。
  2. 指定匹配策略:permit(如果条目匹配,则执行设置操作)或 deny(如果条目匹配,则拒绝路由)。

要应用路由映射,请参阅下面的“应用路由映射”部分。

以下示例命令配置一个路由映射,该路由映射将接口 swp51 的 BGP 指标设置为 50

cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 match interface swp51
cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 set metric 50
cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 action permit
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# route-map MAP1 permit 10
switch(config-route-map)# match interface swp51
switch(config-route-map)# set metric 50
switch(config-route-map)# end
switch# write memory
switch# exit
cumulus@switch:~$

vtysh 命令将配置保存在 /etc/frr/frr.conf 文件中。例如

cumulus@switch:~$ sudo cat /etc/frr/frr.conf
...
route-map MAP1 permit 10
 match interface swp51
 set metric 50

以下示例命令配置一个路由映射,以匹配 LIST1 中定义的前缀并将下一跳设置为 10.10.10.5

cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 match ip-prefix-list LIST1
cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 set ip-nexthop 10.10.10.5
cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 action permit
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# route-map MAP1 permit 10
switch(config-route-map)# match ip route-source prefix-list LIST1
switch(config-route-map)# set ip next-hop 10.10.10.5
switch(config-route-map)# end
switch# write memory
switch# exit
cumulus@switch:~$

vtysh 命令将配置保存在 /etc/frr/frr.conf 文件中。例如

cumulus@switch:~$ sudo cat /etc/frr/frr.conf
...
route-map MAP1 permit 10
 match ip route-source prefix-list LIST1
 set ip next-hop 10.10.10.5

以下示例命令配置一个路由映射,以将路由上的本地优先级设置为 400

cumulus@switch:~$ nv set router policy route-map MAP2 rule 10 set local-preference 400
cumulus@switch:~$ nv set router policy route-map MAP2 rule 10 action permit
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# route-map MAP2 permit 10
switch(config-route-map)# set local-preference 400
switch(config-route-map)# end
switch# write memory
switch# exit
cumulus@switch:~$

vtysh 命令将配置保存在 /etc/frr/frr.conf 文件中。例如

cumulus@switch:~$ sudo cat /etc/frr/frr.conf
...
route-map MAP2 permit 10
 set local-preference 400

匹配和设置语句

Cumulus Linux 支持以下匹配和设置语句。

您可以将以下支持的匹配和设置语句列表与 NVUE 命令一起使用。有关 vtysh 支持的匹配和设置语句列表,请参阅 FRRouting 用户指南

匹配
描述
as-path-list匹配指定的 AS 路径列表。
interface匹配指定的接口。
ip-prefix-len匹配指定的前缀长度。
origin匹配指定的 BGP Origin。您可以指定 egpigpincomplete
type匹配指定的路由类型,例如 IPv4 或 IPv6。
community-list匹配指定的 community list。
ip-nexthop匹配指定的下一跳。
ip-prefix-list匹配指定的前缀列表。
peer匹配指定的 BGP 邻居。
evpn-default-route匹配 EVPN 默认路由。您可以指定 onoff
ip-nexthop-len匹配指定的下一跳前缀长度。
large-community-list匹配指定的 large community list。
source-protocol匹配指定的源协议,例如 BGP、OSPF 或 static。
evpn-route-type匹配指定的 EVPN 路由类型。您可以指定 macipimetprefix
ip-nexthop-list匹配指定的下一跳列表。
local-preference匹配指定的本地优先级。您可以指定介于 0 和 4294967295 之间的值。
source-vrf匹配指定的源 VRF。
evpn-vni匹配指定的 EVPN VNI。
ip-nexthop-type匹配指定的下一跳类型,例如 blackhole
metric匹配指定的 BGP 指标。
tag匹配与路由关联的指定标签值。您可以指定介于 1 和 4294967295 之间的值。

BGP 和 zebra 支持 source-protocol 匹配语句。为其他路由协议(例如 OSPF)配置的路由映射不支持 match source-protocol 语句。

设置
描述
aggregator-as设置聚合器 AS。
ext-community-rt设置 BGP 扩展 community RT。请参阅 BGP Community Lists
originator-id设置 originator ID,以便 BGP 选择首选路径。
as-path-exclude设置 BGP AS 路径排除属性,以避免在最佳路径路由选择期间考虑 AS 路径。
ext-community-soo设置 BGP 扩展 community SOO。请参阅 BGP Community Lists
large-community设置 BGP large community。
source-ip设置源 IP 地址。
as-path-prepend设置 BGP AS 路径前置属性。
forwarding-address设置路由转发地址。
large-community-delete-list设置 BGP large community 删除列表。
tag在匹配的路由上设置标签。您可以指定介于 1 和 4294967295 之间的值。
atomic-aggregate设置 Atomic Aggregate 属性,以通知 BGP 对等方本地路由器正在使用不太具体的(聚合的)路由到达目标。
ip-nexthop设置 BGP 下一跳。
local-preference将 BGP 本地优先级设置为 local_pref
weight设置路由的权重。
community设置 BGP community 属性。
ipv6-nexthop-global设置 IPv6 下一跳全局属性。
metric将 BGP 属性 MED 设置为特定值。您可以指定 metric-minus 从 MED 中减去指定值,metric-plus 将指定值添加到 MED,rtt 将 MED 设置为往返时间,rtt-minus 从 MED 中减去往返时间,或 rtt-plus 将往返时间添加到 MED。
community-delete-list设置 BGP community 删除列表。
ipv6-nexthop-local设置 IPv6 下一跳本地属性。
metric-type设置指标类型。您可以指定 type-1type-2
ext-community-bw设置 BGP 扩展 community 链路带宽。
ipv6-nexthop-prefer-global当全局和链路本地下一跳都可用时,设置 IPv6 入站路由以使用全局地址。
origin设置 BGP 路由 Origin,例如 eBGP 或 iBGP。

Permit 操作退出策略

您可以为路由映射配置 permit 操作退出策略以

  • 在满足匹配条件时转到下一条规则。
  • 在满足匹配条件时转到特定规则。

要配置 permit 操作退出策略

以下命令配置 permit 操作退出策略,以便在满足匹配条件时转到下一条规则

cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 action permit exit-policy next-rule
cumulus@switch:~$ nv config apply

以下命令配置 permit 操作退出策略,以便在满足匹配条件时转到规则 20

cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 action permit exit-policy rule 20
cumulus@switch:~$ nv config apply

以下命令配置 permit 操作退出策略,以退出进一步的规则处理

cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# route-map MAP1 permit 10
switch(config-route-map)# continue 30
switch(config-route-map)# end
switch# write memory
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
switch# exit
cumulus@switch:mgmt:~$ 

以下命令配置 permit 操作退出策略,以便在满足匹配条件时转到下一条规则

cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# route-map MAP1 permit 10
switch(config-route-map)# on-match next
switch(config-route-map)# end
switch# write memory
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
switch# exit
cumulus@switch:mgmt:~$ 

以下命令配置 permit 操作退出策略,以便在满足匹配条件时转到规则 20

cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# route-map MAP1 permit 10
switch(config-route-map)# on-match goto 20
switch(config-route-map)# end
switch# write memory
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
switch# exit
cumulus@switch:mgmt:~$ 

应用路由映射

要应用路由映射,您需要指定路由协议和路由映射名称。

以下示例命令将名为 routemap2 的路由映射应用于 BGP 邻居 swp51

cumulus@switch:~$ nv set vrf default router bgp neighbor swp51 address-family ipv4-unicast policy inbound route-map MAP2
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# router bgp 65101
switch(config-router)# address-family ipv4 unicast 
switch(config-router-af)# neighbor swp51 route-map MAP2 in
switch(config-router-af)# end
switch# write memory
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
switch# exit
cumulus@switch:mgmt:~$ 

vtysh 命令将配置保存在 /etc/frr/frr.conf 文件中。例如

cumulus@switch:~$ sudo cat /etc/frr/frr.conf
...
neighbor swp51 route-map MAP2 in

以下示例将路由从 Zebra (RIB) 过滤到 Linux 内核 (FIB)。这些命令将名为 MAP1 的路由映射应用于 RIB 中的 BGP 路由

cumulus@switch:~$ nv set vrf default router rib ipv4 fib-filter protocol bgp route-map MAP1
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# ip protocol bgp route-map MAP1
switch(config)# exit
switch# write memory
switch# exit
cumulus@switch:~$

vtysh 命令将配置保存在 /etc/frr/frr.conf 文件中。例如

cumulus@switch:~$ sudo cat /etc/frr/frr.conf
...
ip protocol bgp route-map MAP1

对于 BGP,您还可以对从 BGP 到 RIB 的路由更新应用路由映射。您可以匹配前缀、下一跳、community 等。您只能设置指标和下一跳。路由映射不影响 BGP 内部 RIB。您可以同时使用 IPv4 和 IPv6 地址族。路由映射适用于多路径;但是,BGP 仅基于最佳路径设置指标。

要应用路由映射以过滤从 BGP 到 RIB 的路由更新

cumulus@switch:$ nv set vrf default router bgp address-family ipv4-unicast rib-filter MAP1
cumulus@switch:$ nv config apply
cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# router bgp 65000
switch(config-router)# address-family ipv4 unicast
switch(config-router-af)# table-map MAP1
switch(config-router-af)# end
switch# write memory
switch# exit
cumulus@switch:~$

vtysh 命令将配置保存在 /etc/frr/frr.conf 文件中。例如

cumulus@switch:~$ sudo cat /etc/frr/frr.conf
...
address-family ipv4 unicast
table-map MAP1

要将出站路由映射应用于路由反射器客户端,您必须在应用路由映射之前,在地址族下运行 NVUE nv set vrf <vrf> router bgp route-reflection outbound-policy on 命令或 vtysh neighbor <neighbor> route-map SET_IBGP_ORIG out 命令。

路由映射描述

要为路由映射提供描述,请运行 NVUE nv set router policy route-map <route-map> rule <rule> description 命令。

cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 match interface swp51
cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 set metric 50
cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 action permit
cumulus@switch:~$ nv set router policy route-map MAP1 rule 10 description set-metric-swp51
cumulus@switch:~$ nv config apply

清除针对路由映射的匹配项

要清除针对路由映射显示的匹配项数量,请运行 nv action clear router policy route-map <route-map> 命令。

以下示例清除针对路由映射 MAP1 显示的匹配项数量。

cumulus@switch:~$ nv action clear router policy route-map MAP1
Running handle_clear_route_map MAP1
Action succeeded

要清除针对所有路由映射显示的匹配项数量,请运行 nv action clear router policy route-map 命令。

路由重分发

路由重分发允许网络使用一种路由协议,根据从不同路由协议或静态路由中学到的信息动态路由流量。路由重分发有助于提高网络内的可访问性。

以下示例命令将路由信息从 OSPF 路由重分发到 BGP

cumulus@switch:~$ nv set vrf default router bgp address-family ipv4-unicast redistribute ospf
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# router bgp
switch(config-router)# redistribute ospf
switch(config-router)# end
switch# write memory
switch# exit
cumulus@switch:~$

要重分发所有直接连接的网络,请使用 redistribute connected 命令。例如

cumulus@switch:~$ nv set vrf default router bgp address-family ipv4-unicast redistribute connected
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo vtysh
switch# configure terminal
switch(config)# router bgp
switch(config-router)# redistribute connected
switch(config-router)# end
switch# write memory
switch# exit
cumulus@switch:~$

对于 OSPF,重分发会不必要地将类型 5 LSA 加载到数据库中。仅使用此方法生成真正的外部前缀(类型 5 LSA)。

配置示例

本节提供路由映射配置示例。这些示例不包括应用路由映射的命令;有关应用路由映射的命令,请参阅“应用路由映射”部分。

匹配 AS 路径列表

以下示例配置一个路由映射,以允许通过 AS 65102 的前缀。

cumulus@leaf01:~$ nv set router policy as-path-list LIST1 rule 100 action permit
cumulus@leaf01:~$ nv set router policy as-path-list LIST1 rule 100 aspath-exp _65102_
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 10 action permit
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 10 match as-path-list LIST1
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# bgp as-path access-list LIST1 seq 100 permit 65102
leaf01(config)# route-map MAP1 permit 10
leaf01(config-route-map)# match as-path LIST1
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

匹配 Origin

以下示例配置一个路由映射,以允许使用内部网关协议 (IGP)(例如 OSPF)发起的前缀。

cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 10 action permit
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 10 match origin igp
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# route-map MAP1 permit 10
leaf01(config-route-map)# match origin igp
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

匹配 Tag

以下示例配置一个路由映射,以允许匹配标签 4 的前缀。

cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 10 action permit
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 10 match tag 4
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# route-map MAP1 permit 10
leaf01(config-route-map)# match tag 4
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

匹配 Metric

以下示例配置一个路由映射,以允许匹配指标 10 的前缀。

cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 100 action permit
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 100 match metric 10
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
leaf01# configure terminal
leaf01(config)# route-map MAP1 permit 100
leaf01(config-route-map)# match metric 10
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

匹配源协议

以下示例配置一个路由映射,以允许匹配 BGP 作为源协议的前缀。

在路由映射中配置匹配源协议时,交换机仅向对等方通告该协议类型。如果您在 VRF 之间配置路由泄漏,并且泄漏的路由被学习为 BGP 路由,则需要匹配 BGP 源协议才能通告该路由。

cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 100 action permit
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 100 match source-protocol bgp
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# route-map MAP1 permit 100
leaf01(config-route-map)# match source-protocol bgp
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

在路由映射中配置匹配源协议时,交换机仅向对等方通告该协议类型。如果您在 VRF 之间配置路由泄漏,并且泄漏的路由被学习为 BGP 路由,则除了匹配连接的源协议之外,还需要匹配 BGP 源协议才能通告该路由

cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# route-map MAP1 permit 100
leaf01(config-route-map)# match source-protocol bgp
leaf01(config-route-map)# match source-protocol connected
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

匹配下一跳

以下示例配置一个路由映射,以允许匹配下一跳 10.0.1.1 的前缀。

cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 100 action permit
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 100 match ip-nexthop 10.0.1.1
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# route-map MAP1 permit 100
leaf01(config-route-map)# match ip next-hop address 10.0.1.1
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

匹配下一跳列表

以下示例配置一个路由映射,以允许匹配名为 LIST2 的下一跳前缀列表的前缀。

cumulus@leaf01:~$ nv set router policy prefix-list LIST2 rule 100 action permit
cumulus@leaf01:~$ nv set router policy prefix-list LIST2 rule 100 match 10.0.1.0/32
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 100 action permit
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 100 match ip-nexthop-list LIST2
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# ip prefix-list LIST2 seq 100 permit 10.0.1.0/32
leaf01(config)# route-map MAP1 permit 100
leaf01(config-route-map)# match ip next-hop prefix-list LIST2
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

匹配下一跳类型

以下示例配置一个路由映射,以允许匹配 blackhole 作为下一跳类型的前缀。

cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 100 action permit
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 100 match ip-nexthop-type blackhole
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# route-map MAP1 permit 100
leaf01(config-route-map)# match ip next-hop type blackhole
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

匹配 Community List

以下示例配置一个路由映射,以允许匹配 BGP community-list 11 的前缀。有关 BGP community list 的信息,请参阅 BGP Community Lists。

cumulus@leaf01:~$ nv set router policy community-list 11 rule 100 action permit
cumulus@leaf01:~$ nv set router policy community-list 11 rule 100 community 400:34
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 10 action permit
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 10 match community-list 11
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# bgp community-list 11 seq 100 permit 400:34
leaf01(config)# route-map MAP1 permit 10
leaf01(config-route-map)# match community 11
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

匹配 Large Community List

以下示例配置一个路由映射,以允许匹配 BGP large community-list 11 的前缀。

cumulus@leaf01:~$ nv set router policy large-community-list 11 rule 10 action permit
cumulus@leaf01:~$ nv set router policy large-community-list 11 rule 10 large-community 4200857911:011:011
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 10 action permit
cumulus@leaf01:~$ nv set router policy route-map MAP1 rule 10 match large-community-list mylist
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# bgp large-community-list 11 seq 10 permit 4200857911:011:011
leaf01(config)# route-map MAP1 permit 10
leaf01(config-route-map)# match large-community 11
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

设置 IPv6 首选全局地址

当自适应路由为 on 时,如果与同一路由器建立多个 BGP 对等连接,或者在共享相同 MAC 地址或物理接口的接口上与同一路由器建立多个对等连接,您可以配置路由映射以在路由同时包含链路本地和全局下一跳地址时首选全局 IPv6 地址。

cumulus@leaf01:~$ nv set router policy route-map IPV6-PREFER-GLOBAL rule 10 action permit
cumulus@leaf01:~$ nv set router policy route-map IPV6-PREFER-GLOBAL rule 10 set ipv6-nexthop-prefer-global on
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh
...
leaf01# configure terminal
leaf01(config)# route-map IPV6-PREFER-GLOBAL permit 10
leaf01(config-route-map)# set ipv6 next-hop prefer-global
leaf01(config-route-map)# end
leaf01# write memory
leaf01# exit
cumulus@sleaf01:~$

显示路由过滤

要在应用入站策略后在 BGP 路由表中显示路由过滤结果,请运行 NVUE nv show vrf <vrf> router bgp address-family <address-family> route 命令或 vtysh show ip bgp 命令。

cumulus@leaf01:~$ nv show vrf default router bgp address-family ipv4 route
                                                                                
PathCount - Number of paths present for the prefix, MultipathCount - Number of  
paths that are part of the ECMP, DestFlags - * - bestpath-exists, w - fib-wait- 
for-install, s - fib-suppress, i - fib-installed, x - fib-install-failed        
                                                                                
Prefix           PathCount  MultipathCount  DestFlags
---------------  ---------  --------------  ---------
10.0.1.12/32     2          1               *        
10.0.1.34/32     5          4               *        
10.0.1.255/32    5          4               *        
10.10.10.1/32    1          1               *        
10.10.10.2/32    5          1               *        
10.10.10.3/32    5          4               *        
10.10.10.4/32    5          4               *        
10.10.10.63/32   5          4               *        
10.10.10.64/32   5          4               *        
10.10.10.101/32  2          1               *        
10.10.10.102/32  2          1               *        
10.10.10.103/32  2          1               *        
10.10.10.104/32  2          1               *

注意事项

匹配列表

当您配置路由映射以匹配前缀列表、community list 或 aspath list 时,列表中的 permit 或 deny 操作确定要在每个路由映射序列中评估的条件;例如

  • 如果您在路由映射 permit 序列中匹配列表,则 Cumulus Linux 会为该路由映射序列匹配列表中的允许路由,并且策略允许它们。列表中的拒绝路由不匹配,Cumulus Linux 会在后续路由映射序列中评估它们。
  • 如果您在路由映射 deny 序列中匹配列表,则 Cumulus Linux 会为该路由映射序列匹配列表中的允许路由,并且策略拒绝它们。列表中的拒绝路由不匹配,Cumulus Linux 会在后续路由映射序列中评估它们。

NVIDIA 建议您始终将 community list 配置为 permit,并使用路由映射序列允许或拒绝路由。

设置 BGP Community 添加性

要在路由映射中设置多个 community,您可以运行 nv set router policy route-map <route-map-id> rule <rule-id> set community additive 命令。以下示例在名为 ROUTEMAP1 的路由映射中同时设置 community 100:100 和 community 555:111

cumulus@leaf01:~$ nv set router policy route-map ROUTEMAP1 rule 5 action permit
cumulus@leaf01:~$ nv set router policy route-map ROUTEMAP1 rule 5 match ip-prefix-list LIST1
cumulus@leaf01:~$ nv set router policy route-map ROUTEMAP1 rule 5 match type ipv4
cumulus@leaf01:~$ nv set router policy route-map ROUTEMAP1 rule 5 set community 100:100
cumulus@leaf01:~$ nv set router policy route-map ROUTEMAP1 rule 5 set community 555:111
cumulus@leaf01:~$ nv set router policy route-map ROUTEMAP1 rule 5 set community additive
cumulus@leaf01:~$ nv config apply

当您使用 nv unset router policy route-map <route-map-id> rule <rule-id> set community additive 命令取消设置添加性 community 时,NVUE 不会删除 community。您必须取消设置每个 community 和 community 添加性才能删除 community

cumulus@leaf01:~$ nv unset router policy route-map ROUTEMAP1 rule 5 set community 100:100
cumulus@leaf01:~$ nv unset router policy route-map ROUTEMAP1 rule 5 set community 555:111
cumulus@leaf01:~$ nv unset router policy route-map ROUTEMAP1 rule 5 set community additive
cumulus@leaf01:~$ nv config apply