Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

了解路由策略匹配条件中使用的路由过滤器

路由过滤器是匹配前缀的集合。指定匹配前缀时,可以指定与特定路由的完全匹配,也可以指定精度较低的匹配。您可以配置应用于整个列表的通用操作,也可以配置与每个前缀关联的操作。

注意:

由于路由过滤器的配置包括前缀和前缀长度的设置,因此在继续配置之前,您应该彻底了解 IP 寻址(包括超网)以及如何评估路由过滤器(此处介绍: 如何在路由策略匹配条件中评估路由过滤器)。

本节讨论以下主题:

基数树

要了解路由过滤器的操作,您需要熟悉一种用于二进制数匹配的设备,称为基数树(有时称为 patricia trie 或基数 trie)。基数树使用二进制查找来识别 IP 地址(路由)。请记住,IP 地址是一个 32 位数字,以点十进制格式表示,以便于人类理解。这些 8 位分组每个分组的值介于 0 到 255 之间。基数树可以是这些二进制数的图形表示。

图 1 中,基数树从未配置的值开始(从 0 开始),并且位于二进制 IP 地址的最左侧位置。这显示为 0/0,通常称为默认路由。

图 1:基数树 Binary system representation with powers of 2; blue dot indicates a state above 0/0; triangle may be a pointer.的开头

因为这是二进制的,所以每个位只能有两个可能的值之一——0 或 1。向左移动分支表示值 0,而向右移动表示值 1。第一步如 图 2 所示。在第一个位置,IP 地址的第一个八位位组的值分别为 000000000 或 100000000,分别为 0 或 128。图 2 中的值为 0/1 和 128/1。

图 2:基数树 Binary tree illustrating subnetting with root 0/0, branches 0/1 and 128/1, and binary weight table 128 to 1.的第一步

第二步如 图 3 所示。树的第二级第一个八位字节有四个可能的二进制值:00000000、01000000、10000000 和 11000000。这些十进制值 0、64、128 和 192 由基数树上的 IP 地址 0/2、64/2、128/2 和 192/2 表示。

图 3:基数树 Binary tree diagram showing IP subnetting with root node 0/0 dividing address space into subnets like 0/1 and 128/1. Blue circles indicate final subnets, e.g., 0/2 and 64/2.的第二步

此分步过程持续 33 个级别,以表示每个可能的 IP 地址。

基数树结构在定位共享相同最高有效位的一组路由时非常有用。 图 4 显示了基数树中表示 192.168.0.0/16 网络的点。所有比 192.168.0.0/16 更具体的路由都显示在突出显示的部分中。

图 4:定位一组路由 Triangle with a smaller black triangle labeled 192.168.0.0 /16, illustrating network segmentation or hierarchy.

配置路由过滤器

注意:

配置路由过滤器主题介绍了默认的 Junos OS 行为。本主题未介绍的逐步检查功能允许路由器考虑在同一期限内配置的较短匹配条件,从而改变本主题中讨论的评估结果。有关详细信息,请参阅 路由过滤器概述的逐步说明

要配置路由过滤器,请包含一个或多个 route-filter or source-address-filter 语句:

route-filter 选项通常用于将传入路由地址与除单播源地址之外的任何类型的目标匹配前缀进行匹配。

地址 destination-prefix 是指定为 prefix/prefix-length的 IP 版本 4 (IPv4) 或 IP 版本 6 (IPv6) 地址前缀。如果省略 prefix-length IPv4 前缀,则默认值为 /32。如果省 prefix-length 略 IPv6 前缀,则默认值为 /128。语句中 from 指定的前缀必须是全部 IPv4 地址或所有 IPv6 地址。

source-address-filter 选项通常用于将传入路由地址与多协议 BGP (MBGP) 和组播源发现协议 (MSDP) 环境中的单播源地址进行匹配。

source-prefix address 是指定为 prefix/prefix-length的 IPv4 或 IPv6 地址前缀。如果省略 prefix-length IPv4 前缀,则默认值为 /32prefix-length。如果省 prefix-length 略 IPv6 前缀,则默认值为 /128。语句中 from 指定的前缀必须是全部 IPv4 地址或所有 IPv6 地址。

match-type 是要应用于源前缀或目标前缀的匹配类型。它可以是 表 1 中列出的匹配类型之一。有关匹配类型和各种路由时结果的示例,请参阅 表 2

actions 如果路由地址符合为目标匹配前缀(指定为选项的一部分 route-filter )或源匹配前缀(指定为选项的一部分 destination-address-filter )指定的条件,则要执行的操作。这些操作可以由 路由策略术语中的操作中描述的一个或多个操作组成。

在路由过滤器中,您可以通过两种方式指定操作:

  • 在或route-filtersource-address-filter选项中 — 发生匹配后立即执行这些操作,then并且不会评估语句。

  • 在语句中 then — 在发生匹配后执行这些操作,但未为 route-filtersource-address-filter 选项指定任何操作。

upto prefix-length-range和匹配类型相似,两者都指定最高有效位并提供一系列可以匹配的前缀长度。不同之处在于,upto仅允许您为前缀长度范围指定上限,而允许您prefix-length-range同时指定下限和上限。

有关这些路由过滤器匹配类型的更多示例,请参阅 路由过滤器示例

表 1:前缀列表的路由过滤器匹配类型

匹配类型

匹配标准

address-mask netmask-value

以下所有情况都成立:

  • 模式和传入 IPv4 或 IPv6 路由地址的netmask-value按位逻辑与以及模式和destination-prefix地址的netmask-value按位逻辑与相同。模式 中netmask-value设置的位不必是连续的。

  • prefix-length传入 IPv4 或 IPv6 路由地址的组件与prefix-length地址的destination-prefix组件相同。

注意:

address-mask路由策略匹配类型仅对传入 IPv4 (family inet) 或 IPv6 (family inet6) 路由地址与语句中route-filter指定的目标匹配前缀列表有效。

address-mask除了配置的目标匹配前缀的长度外,您还可以通过路由策略匹配类型匹配配置的网络掩码地址上的传入 IPv4 或 IPv6 路由地址进行匹配。路由地址的长度必须与配置的目标匹配前缀的长度完全匹配,因为address-mask匹配类型 不支持某个前缀长度范围内的前缀长度变化。

在路由过滤器上执行最长匹配查找时,查找 address-mask 评估匹配类型的方式与其他路由策略匹配类型不同。查找 不考虑目标匹配前缀的长度。相反,查找会考虑网络掩码值中设置的连续高阶位数。

有关此路由过滤器匹配类型的详细信息,请参阅 如何评估地址掩码匹配类型

有关显示包含 address-mask 匹配类型的路由过滤器的配置示例,请参阅以下主题:

exact

以下所有情况都成立:

  • 路由地址与匹配前缀(destination-prefixsource-prefix)共享相同的最高有效位。有效位数由匹配前缀的组件描述 prefix-length

  • prefix-length匹配前缀的组件等于路由的前缀长度。

longer

以下所有情况都成立:

  • 路由地址与匹配前缀(destination-prefixsource-prefix)共享相同的最高有效位。有效位数由匹配前缀的组件描述 prefix-length

  • 路由的前缀长度大于 prefix-length 匹配前缀的组件。

orlonger

以下所有情况都成立:

  • 路由地址与匹配前缀(destination-prefixsource-prefix)共享相同的最高有效位。有效位数由匹配前缀的组件描述 prefix-length

  • 路由的前缀长度等于或大于 prefix-length 配置的匹配前缀的组件。

prefix-length-range prefix-length2-prefix-length3

以下所有情况都成立:

  • 路由地址与匹配前缀(destination-prefixsource-prefix)共享相同的最高有效位。有效位数由匹配前缀的组件描述 prefix-length

  • 路由的前缀长度介于 prefix-length2 和 之间 prefix-length3(含)。

through {destination-prefix2 | source-prefix2}

以下所有情况都成立:

  • 路由地址与第一个匹配前缀(destination-prefixsource-prefix)共享相同的最高有效位。有效位数由第一个匹配前缀的组件描述 prefix-length

  • 路由地址与第二个匹配前缀(destination-prefix2source-prefix2)共享相同的最高有效位。有效位数由第二个匹配前缀的组件描述 prefix-length

  • 路由的前缀长度小于或等 prefix-length 于第二个匹配前缀的组件。

在大多数路由策略配置中,您不会使用 through 匹配类型。有关示例,请参阅拒绝 来自特定主机的路由

upto prefix-length2

以下所有情况都成立:

  • 路由地址与匹配前缀(destination-prefixsource-prefix)共享相同的最高有效位。有效位数由匹配前缀的组件描述 prefix-length

  • 路由的前缀长度介于第一个匹配前缀prefix-length2的组件和 prefix-length 之间。

图 5 显示了路由 192.168.0.0/16 的详细基数树。

图 5:基数树 Binary tree diagram showing IP address subnetting hierarchy. Root node A represents 192.168.0.0/16, splitting into nodes B 192.168.0.0/17 and C 192.168.128.0/17. Leaf nodes display smallest subnets like 192.168.32.0/19.的一部分

图 6表 2 演示了各种路由过滤器匹配类型的操作。

图 6:路由过滤器匹配类型 Illustrates types of prefix matching in networking: Exact, Orlonger, Longer, Upto, Prefix-length-range, Through for 192.168.0.0/16.
表 2:匹配类型示例

前缀

192.168/16 精确

192.168/16 更长

192.168/16 或更长

192.168/16 高达 /24

192.168/16 前缀长度范围/18 – /20

192.168/16 到 192.168.16/20

192.168/19 地址-mask255.255.0.0

10.0.0.0/8

192.168.0.0/16

匹配

匹配

匹配

匹配

192.168.0.0/17

匹配

匹配

匹配

匹配

192.168.0.0/18

匹配

匹配

匹配

匹配

匹配

192.168.0.0/19

匹配

匹配

匹配

匹配

匹配

匹配

192.168.4.0/24

匹配

匹配

匹配

192.168.5.4/30

匹配

匹配

192.168.12.4/30

匹配

匹配

192.168.12.128/32

匹配

匹配

192.168.16.0/20

匹配

匹配

匹配

匹配

匹配

192.168.192.0/18

匹配

匹配

匹配

匹配

192.168.224.0/19

匹配

匹配

匹配

匹配

匹配

10.169.1.0/24

10.170.0.0/16

如何在路由策略匹配条件中评估路由过滤器

在路由过滤器评估期间,策略框架软件会将每个路由的源地址与路由过滤器中的目标前缀进行比较。评估分两个步骤进行:

  1. 策略框架软件会执行 最长匹配查找,这意味着软件将在列表中搜索长度最长的前缀。

    最长匹配查找仅考虑配置的匹配前缀的 and prefix-length 组件,而不match-type考虑prefix组件。以下示例路由过滤器说明了这一点:

    候选路由 192.168.1.0/24 的最长匹配是第二个路由过滤器 192.168.0.0/15,它仅基于前缀和前缀长度。

  2. 当传入路由与前缀匹配(最长的在前)时,会发生以下操作:

    1. 路由过滤器会停止评估其他前缀,即使匹配类型失败也是如此。

    2. 软件将检查与该前缀关联的匹配类型和操作。

注意:

根据使用 address-mask 匹配类型的匹配标准评估路由源地址时,评估的两个步骤都包含配置的网络掩码值。有关详细信息,请参阅 如何评估地址掩码匹配类型

在步骤 1 中,如果评估了路由 192.168.1.0/24,则无法匹配。它匹配最长前缀 192.168.0.0/15,但不匹配 exact。路由过滤器已完成,因为它与前缀匹配,但结果是匹配失败,因为匹配类型失败。

如果发生匹配,将执行使用前缀指定的操作。如果未使用前缀指定操作,则执行语句中的 then 操作。如果未指定这两个操作,则软件将评估下一个术语或路由策略(如果存在),或执行 accept 默认策略指定的或 reject 操作。有关默认路由策略的更多信息,请参阅 默认路由策略

注意:

如果在路由过滤器中指定多个前缀,则只需有一个前缀匹配即可进行匹配。路由过滤器匹配实际上是一个逻辑“或”操作。

如果未发生匹配,软件将评估下一个术语或路由策略(如果存在),或执行 accept 默认策略指定的或 reject 操作。

例如,将前缀 192.168.254.0/24 与以下路由过滤器进行比较:

前缀 192.168.254.0/23 被确定为最长前缀。当软件根据最长前缀计算 192.168.254.0/24 时,会发生匹配(192.168.254.0/24 是 192.168.254.0/23 的子集)。由于 192.168.254.0/24 与最长前缀之间匹配,因此评估将继续进行。但是,当软件评估匹配类型时,准确地说 192.168.254.0/24 和 192.168.254.0/23 之间不会发生匹配。软件会得出术语不匹配的结论,并继续到下一个术语或路由策略(如果存在),或者执行 accept 默认策略指定的或 reject 操作。

注意:

walkup 功能允许具有多个路由过滤器的术语“walkup”评估过程,以包括不太具体的路由以及最长的匹配项。换句话说,启用 walkup 会将默认行为从“如果一个失败,则术语失败”更改为“如果一个匹配,则术语匹配”。有关 walkup 功能的更多信息,请参阅 路由过滤器的 walkup 概述

前缀顺序如何影响路由过滤器评估

前缀的指定顺序(从上到下)通常并不重要,因为策略框架软件会在评估期间扫描路由过滤器以查找最长的前缀。此规则的一个例外情况是,当您在列表中多次使用同一目标前缀时。在这种情况下,前缀的顺序很重要,因为从上到下扫描相同前缀的列表,并且应用与路由匹配的第一个匹配类型。

注意:

walkup 功能允许具有多个路由过滤器的术语“walkup”评估过程,以包括不太具体的路由以及最长的匹配项。换句话说,启用 walkup 会将默认行为从“如果一个失败,则术语失败”更改为“如果一个匹配,则术语匹配”。有关 walkup 功能的更多信息,请参阅 路由过滤器的 walkup 概述

在以下示例中,为同一前缀指定了不同的匹配类型。路由 0.0.0.0/0 将被拒绝,路由 0.0.0.0/8 将标记为 next-hop self,路由 0.0.0.0/25 将被拒绝。

如何评估地址掩码匹配类型

address-mask除了配置的目标匹配前缀的长度外,您还可以使用路由策略匹配类型来匹配配置的网络掩码值上的传入 IPv4 或 IPv6 路由地址。在路由过滤器评估期间,address-mask匹配类型的处理方式与其他路由策略匹配类型不同,同时要考虑配置的网络掩码值:

  • 当最长匹配查找评估 address-mask 路由策略匹配类型时, prefix-length 不 考虑已配置匹配前缀的组件。相反,查找会考虑在配置的网络掩码值中设置的连续高阶位数。

  • 根据使用 address-mask 路由策略匹配类型的路由过滤器匹配标准评估传入 IPv4 或 IPv6 路由地址时,如果以下值相同,则匹配成功:

    • 配置的网络掩码值和传入 IPv4 或 IPv6 路由地址的按位逻辑与

    • 配置的网络掩码值和配置的目标匹配前缀的按位逻辑与

有关包含两种 address-mask 匹配类型的路由过滤器的配置示例,请参阅使用 最长匹配查找评估地址掩码匹配类型

最长匹配查找的常见配置问题

定义路由过滤器时的一个常见问题是,要包含一个较短的前缀,您希望与同一列表中的较长、相似的前缀进行匹配。例如,假设将前缀 192.168.254.0/24 与以下路由过滤器进行比较:

由于策略框架软件执行最长匹配查找,因此前缀 192.168.254.0/23 被确定为最长前缀。192.168.254.0/24 和 192.168.254.0/23 之间没有完全匹配。软件将确定术语不匹配,并继续执行下一个术语或路由策略(如果存在),或者执行 accept 默认策略指定的或 reject 操作。(有关默认路由策略的更多信息,请参阅 默认路由策略。)要匹配的较短前缀 192.168.0.0/16 或更长的前缀会被无意中忽略。

此问题的一种解决方案是从此术语的路由过滤器中删除前缀 192.168.0.0/16 或更长,并将其移动到另一个术语,该术语是列表中唯一的前缀或最长的前缀。

另一种解决方案是启用 步行 功能。有关详细信息,请参阅 路由过滤器概述的逐步说明

路由过滤器示例

本部分中的示例仅显示路由策略的片段。通常,您可以将这些片段与其他术语或路由策略组合在一起。

在所有示例中,请记住以下操作适用于不匹配的路由:

  • 评估下一个学期(如果有)。

  • 评估下一个策略(如果存在)。

  • 执行 accept 默认策略指定的或 reject 操作。有关默认路由策略的更多信息,请参阅 默认路由策略

以下示例说明如何出于各种目的配置路由过滤器:

拒绝具有特定目标前缀和掩码长度的路由

拒绝目标前缀为 0.0.0.0、掩码长度为 0 到 8 的 路由,并接受所有其他路由:

拒绝掩码长度大于 8 的路由

拒绝掩码为 /8 及以上的路由(即 /8、/9、/10 等),如果前 8 位设置为 0,并接受长度小于 8 位的路由:

拒绝掩码长度在 26 和 29 之间的路由

拒绝目标前缀为 192.168.10/24 且掩码介于 /26 和 /29 之间的路由,并接受所有其他路由:

拒绝来自特定主机的路由

拒绝来自特定主机的一系列路由,并接受所有其他路由:

在大多数路由策略配置中,您不会使用 through 匹配类型。您应该将其视 through 为一种工具,用于对一组连续的完全匹配进行分组。例如,不要指定四个完全匹配项:

您可以使用以下单个匹配项来表示它们:

接受具有一组已定义前缀的路由

显式接受一组有限的前缀(在第一个术语中)并拒绝所有其他前缀(在第二个术语中):

拒绝具有一组已定义前缀的路由

拒绝几组前缀,并接受其余前缀:

拒绝前缀长于 24 位的路由

拒绝所有长于 24 位的前缀。您可以在语句中的 export 路由策略序列中安装此路由策略。此过滤器中的第一个术语在前缀长度不超过 24 位的所有路由上传递。第二个未命名的术语拒绝其他一切。

如果在此示例中指定 route-filter 0.0.0.0/0 upto /24 accept,则会立即接受匹配的前缀,并且永远不会评估语句中的 export 下一个路由策略。

如果要在术语 中包含then reject该语句,则大于 24 位的前缀将永远不会被拒绝,因为策略框架软件在评估该术语时,会在到达then reject该语句之前继续评估下一个语acl20句。

拒绝 PIM 组播流量加入

配置路由策略,用于拒绝来自邻接方的源目标前缀的协议无关组播 (PIM) 组播流量加入:

拒绝 PIM 流量

配置路由策略以拒绝来自某个接口的源目标前缀的 PIM 流量:

以下路由策略限定符适用于 PIM:

  • interface— 接收加入的接口

  • neighbor- 连接源的源

  • route-filter—组地址

  • source-address-filter— 要拒绝其连接的源地址

有关在 PIM 协议定义中导入 PIM 加入过滤器的详细信息,请参阅 Junos OS 组播协议用户指南

通过对路由地址和目标匹配前缀应用地址掩码来接受传入 IPv4 路由

接受目标前缀为 10.1.0/24,第三个字节为 0 到 14 之间的偶数的传入 IPv4 路由,包括:

路由策略术语 term_1 中的路由过滤器与以下传入 IPv4 路由地址匹配:

  • 10.1.0.0/24

  • 10.1.2.0/24

  • 10.1.4.0/24

  • 10.1.6.0/24

  • 10.1.8.0/24

  • 10.1.10.0/24

  • 10.1.12.0/24

  • 10.1.14.0/24

网络掩码值和候选路由地址的按位逻辑与必须与网络掩码值和匹配前缀地址的按位逻辑与匹配。也就是说,如果网络掩码位模式 255.255.241.0 包含设置位,则要评估的传入 IPv4 路由地址必须与目标前缀地址 10.1.0.0/24 中的相应位值匹配。

  • 网络掩码值的前两个字节是二进制 1111 1111   1111 1111,这意味着如果前两个字节不是 10.1,则候选路由地址将无法匹配。

  • 网络掩码值的第三个字节是二进制 1111 0001,这意味着如果第三个字节大于 15(十进制)、奇数或两者,则候选路由地址将无法匹配。

  • 匹配前缀地址的前缀长度为 24(十进制),这意味着如果候选路由地址的前缀长度 不恰好是 24,则其匹配将失败。

例如,假设在策略中测试的候选路由地址为 10.1.8.0/24(二进制 0000 1010   0000 0001   0000 1000)。

  • 将网络掩码值应用于此候选路由地址时,结果为二进制 0000 1010   0000 0001   0000 0000。

  • 当网络掩码值应用于配置的目标前缀地址时,结果也是二进制 0000 1010   0000 0001   0000 0000。

  • 由于两个 AND 运算的结果相同,因此匹配会继续到第二个匹配条件。

  • 由于候选地址的前缀长度与配置的目标前缀地址相同(24 位),因此匹配成功。

再举一个例子,假设策略中正在测试的候选路由地址是 10.1.3.0/24(二进制 0000 1010   0000 0001   0000 0011)。

  • 将网络掩码值应用于此候选路由地址时,结果为二进制 0000 1010   0000 0001   0000 0001。

  • 但是,当网络掩码值应用于配置的目标前缀地址时,结果为二进制 0000 1010   0000 0001   0000 0000。

  • 由于两个 AND 运算的结果不同(在第三个字节中),因此匹配失败。

接受模式相似但前缀长度不同的传入 IPv4 路由

接受格式为 10.*.1/24 或 10.*.1.*/32 的传入 IPv4 路由地址:

路由过滤器匹配标准 10.0.1.0/24 address-mask 255.0.255.0 匹配格式为 10.*.1/24 的传入 IPv4 路由地址。路由的前缀长度必须正好为 24 位长,第二个字节中可以接受任何值。

路由过滤器匹配标准 10.0.1.0/32 address-mask 255.0.255.0 匹配 10.*.1.*/32 格式的传入 IPv4 路由地址。路由的前缀长度必须正好为 32 位长,并且第二个字节和第四个字节中的任何值都是可以接受的。

使用最长匹配查找评估地址掩码匹配类型

此示例说明了最长匹配查找如何评估包含两种 address-mask 匹配类型的路由过滤器。请考虑在以下路由策略术语 term_3 中配置的路由过滤器:

假设根据策略术语 term_3中配置的路由过滤器测试传入 IPv4 路由源地址 10.1.1.0/24:

  1. 路由策略术语 term_3 的最长匹配查找树包含两个匹配前缀:一个前缀为 10.0.1.0/24 address-mask 255.0.255.0 ,一个前缀为 10.0.2.0/24 address-mask 255.240.255.0。在树中搜索候选的最长前缀匹配项时,最长匹配查找会考虑配置 netmask-value 中连续高阶位的数量,而不是配置 destination-prefix的长度:

    • 对于第一个路由过滤器匹配标准,最长匹配查找条目为 10.0.0.0/8,因为网络掩码值包含 8 个连续的高阶位。

    • 对于第二个路由过滤器匹配标准,最长匹配查找条目为 10.0.0.0/12,因为网络掩码值包含 12 个连续的高阶位。

    对于候选路由地址 10.1.1.0/24,最长匹配查找将返回树条目 10.0.0.0/12,该条目对应于路由过滤器匹配条件 10.0.2.0/24 address-mask 255.240.255.0

  2. 现在,已为候选路由地址确定了最 term_3 长匹配前缀,将根据路由过滤器匹配标准 10.0.2.0/24 address-mask 255.240.255.0评估候选路由地址:

    1. 要测试传入 IPv4 路由地址 10.1.1.0/24,将网络掩码值 255.240.255.0 应用于 10.1.1.0/24。结果是 10.0.1.0。

    2. 要测试配置的目标前缀地址 10.0.2.0/24,将网络掩码值 255.240.255.0 应用于 10.0.2.0/24。结果是 10.0.2.0。

    3. 由于结果不同,路由过滤器匹配失败。无论是使用匹配标准还是 then 使用语句指定,都不会执行任何操作。系统不会根据任何其他匹配标准评估传入 IPv4 路由地址。