了解用于路由策略匹配条件的路由过滤器
路由过滤器是匹配前缀的集合。指定匹配前缀时,可以指定与特定路由的完全匹配或不太精确的匹配。您可以配置适用于整个列表的常用操作,也可以配置与每个前缀关联的操作。
由于路由过滤器的配置包括设置前缀和前缀长度,因此在继续配置之前,您应该全面了解 IP 寻址(包括超网)以及如何评估路由过滤器(在此处解释:如何在路由策略匹配条件中评估路由过滤器) 中减去衰减或链路损耗 (LL) 之后可用的功率。
本节讨论以下主题:
基数树
要了解路由过滤器的操作,您需要熟悉用于二进制数字匹配的设备,称为基数树(有时称为 patricia trie 或基数 trie)。基数树使用二进制查找来标识 IP 地址(路由)。请记住,IP 地址是一个 32 位数字,以点分十进制格式表示,以便于人类理解。每个 8 位分组的值都介于 0 和 255 之间。基数树可以是这些二进制数的图形表示形式。
在 中 图 1,基数树不以任何配置的值开头(从 0 开始),位于二进制 IP 地址的最左侧位置。这显示为 0/0,通常称为默认路由。
因为这是二进制的,所以每个位只能有两个可能的值之一:0 或 1。向下移动左侧分支表示值 0,而向右移动表示值 1。第一步如 所示 图 2。在第一个位置,IP 地址的第一个八位字节的值分别为 00000000 或 10000000,分别为 0 或 128。这由值 0/1 和 128/1 表示 图 2 。
第二步如中 图 3所示。树的第二级对于第一个八位字节有四个可能的二进制值:00000000、01000000、10000000 和 11000000。这些十进制值 0、64、128 和 192 由基数树上的 IP 地址 0/2、64/2、128/2 和 192/2 表示。
这个分步过程继续 33 个级别,以表示每个可能的 IP 地址。
基数树结构在定位一组共享相同最高有效位的路由时非常有用。 图 4 显示了基数树中表示 192.168.0.0/16 网络的点。所有比 192.168.0.0/16 更具体的路由都显示在突出显示的部分中。
配置路由过滤器
配置路由过滤器主题介绍了默认 Junos OS 行为。本主题未介绍的演练功能允许路由器考虑在同一期限内配置的较短匹配条件,从而更改本主题中讨论的评估结果。有关详细信息,请参阅 路由过滤器概述 。
要配置路由过滤器,请包含一个或多个 route-filter
或 source-address-filter
语句:
[edit policy-options policy-statement policy-name term term-name from] route-filter destination-prefix match-type { actions; }
该 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-address-filter source-prefix match-type { actions; }
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-filter
在或source-address-filter
选项中 - 这些操作在匹配发生后立即执行,并且then
不会评估语句。在语句中
then
- 这些操作是在匹配发生后执行的,但不会为 orsource-address-filter
选项指定route-filter
任何操作。
upto
和prefix-length-range
匹配类型相似,因为它们都指定最高有效位并提供可以匹配的前缀长度范围。不同之处在于, upto
仅允许您为前缀长度范围指定上限,而 prefix-length-range
允许您同时指定下限和上限。
有关这些路由过滤器匹配类型的更多示例,请参见 路由过滤器示例。
匹配类型 |
匹配标准 |
---|---|
|
满足以下所有条件:
注:
在路由过滤器上执行最长匹配查找时,查找评估 有关此路由过滤器匹配类型的详细信息,请参见 如何评估地址掩码匹配类型。 有关显示包含 |
|
满足以下所有条件:
|
|
满足以下所有条件:
|
|
满足以下所有条件:
|
|
满足以下所有条件:
|
|
满足以下所有条件:
您不会在 |
|
满足以下所有条件:
|
图 5 显示了路由 192.168.0.0/16 的详细基数树。
前缀 |
192.168/16 精确 |
192.168/16 更长 |
192.168/16 或更长 |
192.168/16 高达 /24 |
192.168/16 前缀长度范围/18 – /20 |
192.168/16 through192.168.16/20 |
192.168/19 地址掩码255.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 |
– |
– |
– |
– |
– |
– |
– |
如何在路由策略匹配条件中评估路由过滤器
在路由过滤器评估期间,策略框架软件会将每个路由的源地址与路由过滤器中的目标前缀进行比较。评估分两步进行:
策略框架软件执行 最长匹配查找,这意味着软件在列表中搜索长度最长的前缀。
最长匹配查找仅考虑配置的匹配前缀的和
prefix-length
组件,而不match-type
考虑prefix
组件。以下示例路由筛选器说明了这一点:from { route-filter 192.168.0.0/14 upto /24 reject; route-filter 192.168.0.0/15 exact; } then accept;
候选路由 192.168.1.0/24 的最长匹配项是第二个路由筛选器 192.168.0.0/15,它仅基于前缀和前缀长度。
当传入路由与前缀匹配(最长在前)时,将执行以下操作:
路由过滤器会停止评估其他前缀,即使匹配类型失败也是如此。
软件会检查与该前缀关联的匹配类型和操作。
根据使用该 address-mask
匹配类型的匹配标准评估路由源地址时,评估的两个步骤都包括配置的网络掩码值。有关更多详细信息,请参阅如何评估地址掩码匹配类型。
在步骤 1 中,如果评估路由 192.168.1.0/24,则无法匹配。它匹配最长前缀 192.168.0.0/15,但不匹配 exact
. 路由筛选器已完成,因为它与前缀匹配,但结果是匹配失败,因为匹配类型失败。
如果发生匹配,则执行使用前缀指定的操作。如果未使用前缀指定操作,则执行语句中的 then
操作。如果未指定任何操作,软件将评估下一个术语或路由策略(如果存在),或采用 accept
默认策略指定的或 reject
操作。有关默认路由策略的详细信息,请参见 默认路由策略。
如果在路由筛选器中指定多个前缀,则只需匹配一个前缀即可进行匹配。路由过滤器匹配实际上是逻辑 OR 操作。
如果未发生匹配,软件将评估下一个术语或路由策略(如果存在),或采取 accept
默认策略指定的 or reject
操作。
例如,将前缀 192.168.254.0/24 与以下路由筛选器进行比较:
route-filter 192.168.0.0/16 orlonger; route-filter 192.168.254.0/23 exact;
前缀 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
操作。
前缀顺序如何影响路由过滤器评估
指定前缀的顺序(从上到下)通常无关紧要,因为策略框架软件会在评估期间扫描路由过滤器以查找最长的前缀。此规则的一个例外是在列表中多次使用相同的目标前缀时。在这种情况下,前缀的顺序很重要,因为从上到下扫描相同前缀的列表,并且应用与路由匹配的第一个匹配类型。
在以下示例中,为同一前缀指定了不同的匹配类型。路由 0.0.0.0/0 将被拒绝,路由 0.0.0.0/8 将标有 next-hop self
,路由 0.0.0.0/25 将被拒绝。
route-filter 0.0.0.0/0 upto /7 reject; route-filter 0.0.0.0/0 upto /24 next-hop self; route-filter 0.0.0.0/0 orlonger reject;
如何评估地址掩码匹配类型
address-mask
路由策略匹配类型使您能够匹配配置的网络掩码值上的传入 IPv4 或 IPv6 路由地址以及配置的目标匹配前缀的长度。在路由过滤器评估期间, address-mask
匹配类型的处理方式与其他路由策略匹配类型不同,但会考虑配置的网络掩码值:
当最长匹配查找评估
address-mask
路由策略匹配类型时,prefix-length
不考虑配置的匹配前缀的组件。相反,查找会考虑在配置的网络掩码值中设置的连续高阶位数。根据使用
address-mask
路由策略匹配类型的路由过滤器匹配标准评估传入 IPv4 或 IPv6 路由地址时,如果以下值相同,则匹配成功:配置的网络掩码值和传入 IPv4 或 IPv6 路由地址的按位逻辑 AND
配置的网络掩码值和配置的目标匹配前缀的按位逻辑 AND
有关包含两种 address-mask
匹配类型的路由过滤器的示例配置,请参见 使用最长匹配查找评估地址掩码匹配类型。
最长匹配查找的常见配置问题
定义路由过滤器时的一个常见问题是包含较短的前缀,您希望该前缀与同一列表中较长的相似前缀匹配。例如,假设将前缀 192.168.254.0/24 与以下路由筛选器进行比较:
route-filter 192.168.0.0/16 orlonger; route-filter 192.168.254.0/23 exact;
由于策略框架软件执行最长匹配查找,因此前缀 192.168.254.0/23 被确定为最长前缀。192.168.254.0/24 和 192.168.254.0/23 之间不会发生完全匹配。软件确定术语不匹配并继续执行下一个术语或路由策略(如果存在),或者执行 accept
默认策略指定的 or reject
操作。(有关默认路由策略的详细信息,请参阅 默认路由策略。)要匹配的较短前缀 192.168.0.0/16 或更长,无意中被忽略。
此问题的一种解决方案是从该术语的路由筛选器中删除前缀 192.168.0.0/16 或更长,并将其移动到另一个术语,在该术语中,它是列表中唯一的前缀或最长的前缀。
路由过滤器示例
本节中的示例仅显示路由策略的片段。通常,您会将这些片段与其他术语或路由策略组合在一起。
在所有示例中,请记住以下操作适用于不匹配的路由:
评估下一个学期(如果有)。
评估下一个策略(如果存在)。
执行
accept
默认策略指定的或reject
操作。有关默认路由策略的详细信息,请参见 默认路由策略。
以下示例说明如何为各种目的配置路由筛选器:
- 拒绝具有特定目标前缀和掩码长度的路由
- 拒绝掩码长度大于 8 的路由
- 拒绝掩码长度在 26 和 29 之间的路由
- 拒绝来自特定主机的路由
- 接受具有一组已定义前缀的路由
- 拒绝具有一组已定义前缀的路由
- 拒绝前缀长度超过 24 位的路由
- 拒绝 PIM 组播流量加入
- 拒绝 PIM 流量
- 通过对路由地址地址和目标匹配前缀应用地址掩码来接受传入 IPv4 路由
- 接受模式相似但前缀长度不同的传入 IPv4 路由
- 使用最长匹配查找评估地址掩码匹配类型
拒绝具有特定目标前缀和掩码长度的路由
拒绝目标前缀为 0.0.0.0、掩码长度为 0 到 8 的路由,并接受所有其他路由:
[edit] policy-options { policy-statement policy-statement from-hall2 { term 1 { from { route-filter 0.0.0.0/0 upto /8 reject; } } then accept; } }
拒绝掩码长度大于 8 的路由
拒绝掩码为 /8 及更大(即 /8、/9、/10 等)且前 8 位设置为 0 并接受长度小于 8 位的路由:
[edit] policy-options { policy-statement from-hall3 { term term1 { from { route-filter 0/0 upto /7 accept; route-filter 0/8 orlonger; } then reject; } } }
拒绝掩码长度在 26 和 29 之间的路由
拒绝目标前缀为 192.168.10/24 且掩码介于 /26 和 /29 之间的路由,并接受所有其他路由:
[edit] policy-options { policy-statement from-customer-a { term term1 { from { route-filter 192.168.10/24 prefix-length-range /26–/29 reject; } then accept; } } }
拒绝来自特定主机的路由
拒绝来自特定主机的一系列路由,并接受所有其他路由:
[edit] policy-options { policy-statement hosts-only { from { route-filter 10.125.0.0/16 upto /31 reject; route-filter 0/0; } then accept; } }
您不会在 through
大多数路由策略配置中使用匹配类型。您应该将其 through
视为对一组连续的精确匹配项进行分组的工具。例如,不要指定四个完全匹配项:
from route-filter 0.0.0.0/1 exact from route-filter 0.0.0.0/2 exact from route-filter 0.0.0.0/3 exact from route-filter 0.0.0.0/4 exact
您可以使用以下单个匹配项来表示它们:
from route-filter 0.0.0.0/1 through 0.0.0.0/4
接受具有一组已定义前缀的路由
显式接受一组有限的前缀(在第一个术语中)并拒绝所有其他前缀(在第二个术语中):
policy-options { policy-statement internet-in { term 1 { from { route-filter 192.168.231.0/24 exact accept; route-filter 192.168.244.0/24 exact accept; route-filter 192.168.198.0/24 exact accept; route-filter 192.168.160.0/24 exact accept; route-filter 192.168.59.0/24 exact accept; } } term 2 { then { reject; } } }
拒绝具有一组已定义前缀的路由
拒绝几组前缀,并接受其余前缀:
[edit policy-options] policy-statement drop-routes { term 1{ from { # first, reject a number of prefixes: route-filter default exact reject; # reject 0.0.0.0/0 exact route-filter 0.0.0.0/8 orlonger reject; # reject prefix 0, mask /8 or longer route-filter 10.0.0.0/8 orlonger reject; # reject loopback addresses } route-filter 10.105.0.0/16 exact { # accept 10.105.0.0/16 as-path-prepend “1 2 3”; accept; } route-filter 192.0.2.0/24 orlonger reject; # reject test network packets route-filter 172.16.233.0/3 orlonger reject; # reject multicast and higher route-filter 0.0.0.0/0 upto /24 accept; # accept everything up to /24 route-filter 0.0.0.0/0 orlonger accept; # accept everything else } } } }
拒绝前缀长度超过 24 位的路由
拒绝所有长度超过 24 位的前缀。您将在语句中的 export
路由策略序列中安装此路由策略。此过滤器中的第一个术语在前缀长度最大为 24 位的所有路由上进行传递。第二个未命名的术语拒绝其他一切。
[edit policy-options] policy-statement 24bit-filter { term acl20 { from { route-filter 0.0.0.0/0 upto /24; } then next policy; } then reject; }
如果在此示例中 route-filter 0.0.0.0/0 upto /24 accept
指定 ,将立即接受匹配的前缀,并且永远不会评估语句中的 export
下一个路由策略。
如果要将 then reject
语句包含在术语 acl20
中,则大于 24 位的前缀永远不会被拒绝,因为策略框架软件在评估术语时会继续评估下一个语句,然后再到达 then reject
语句。
拒绝 PIM 组播流量加入
配置路由策略,以拒绝来自邻接方的源目标前缀的协议无关组播 (PIM) 组播流量联接:
[edit] policy-options { policy-statement join-filter { from { neighbor 10.14.12.20; source-address-filter 10.83.0.0/16 orlonger; } then reject; } }
拒绝 PIM 流量
配置路由策略,用于拒绝来自某个接口的源目标前缀的 PIM 流量:
[edit] policy-options { policy-statement join-filter { from { interface so-1/0/0.0; source-address-filter 10.83.0.0/16 orlonger; } then reject; } }
以下路由策略限定符适用于 PIM:
interface
— 接收连接的接口neighbor
- 连接源自的源route-filter
—组地址source-address-filter
- 拒绝其连接的源地址
有关在 PIM 协议定义中导入 PIM 联接过滤器的详细信息,请参阅 Junos OS 组播协议用户指南。
通过对路由地址地址和目标匹配前缀应用地址掩码来接受传入 IPv4 路由
接受目标前缀为 10.1.0/24 且第三个字节为 0 到 14 之间的偶数(含)的传入 IPv4 路由:
[edit] policy-options { policy-statement from_customer_a { term term_1 { from { route-filter 10.1.0.0/24 address-mask 255.255.241.0; } then { ... reject; } } } }
路由策略术语 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
网络掩码值的按位逻辑 AND 和候选路由地址必须与网络掩码值的按位逻辑 AND 和匹配前缀地址匹配。也就是说,如果网络掩码位模式 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 路由地址:
[edit] policy-options { policy-statement from_customer_b { term term_2 { from { route-filter 10.0.1.0/24 address-mask 255.0.255.0; route-filter 10.0.1.0/32 address-mask 255.0.255.0; } then { ... reject; } } } }
路由过滤器匹配 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
中配置的路由过滤器:
[edit] policy-options { policy-statement from_customer_c { term term_3 { from { route-filter 10.0.1.0/24 address-mask 255.0.255.0; route-filter 10.0.2.0/24 address-mask 255.240.255.0; } then { ... } } } }
假设根据策略术语 term_3
中配置的路由过滤器测试传入 IPv4 路由源地址 10.1.1.0/24:
路由策略术语
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
。现在,已经为候选路由地址标识了中
term_3
匹配时间最长的前缀,将根据路由过滤器匹配标准10.0.2.0/24 address-mask 255.240.255.0
评估候选路由地址:要测试传入 IPv4 路由地址 10.1.1.0/24,网络掩码值 255.240.255.0 应用于 10.1.1.0/24。结果为 10.0.1.0。
若要测试配置的目标前缀地址 10.0.2.0/24,请将网络掩码值 255.240.255.0 应用于 10.0.2.0/24。结果是 10.0.2.0。
由于结果不同,路由过滤器匹配将失败。无论是使用匹配标准还是
then
使用语句指定,都不会执行任何操作。传入 IPv4 路由地址不会根据任何其他匹配标准进行评估。