Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

了解用作路由策略匹配条件的 AS 路径正则表达式

BGP AS 路径 是网络数据包要遍历以到达指定路由器的自治系统序列。AS 编号按从右到左读的顺序进行组合。例如,对于使用 AS 路径为 5 4 3 2 1 的路由到达目标的数据包,数据包首先遍历 AS 5,依此类推,直到到达 AS 1。在这种情况下,AS 1 是数据包目标之前的最后一个 AS;它是数据包源要与之对等的 AS。

使用 AS 路径和路由策略匹配条件时,可以使用正则表达式来定位路由。为此,请基于部分或全部 AS 路径创建一个或多个匹配条件,然后将其包含在路由策略中。

以下部分介绍了 AS 路径正则表达式,并提供配置示例。

配置 AS 路径正则表达式

您可以创建命名的 AS 路径正则表达式,然后将其包含在具有 as-path 匹配条件的路由策略中(如中所述 路由策略匹配条件)。要创建命名 AS 路径正则表达式,请包含以下 as-path 语句:

要在路由策略中包含 AS 路径正则表达式,请在 as-path 语句中包含 from 匹配条件。

此外,您可以创建由 AS 路径正则表达式组成的命名 AS 路径组,然后将其包含在具有匹配条件的 as-path-group 路由策略中。要创建命名的 AS 路径组,请包含该 as-path-group 语句。

要在路由策略的 AS 路径组中包括 AS 路径正则表达式, as-path-group 请在语句中包含 from 匹配条件。

注:

不能在同一策略条款中同时包含 和 as-pathas-path-group 语句。

注:

您可以在语句的from匹配条件中包含as-path多个 AS 路径正则表达式的名称。如果执行此操作,则只需匹配一个 AS 路径正则表达式即可进行匹配。AS 路径正则表达式匹配实际上是一种逻辑 OR 操作。

AS 路径名标识正则表达式。它可以包含字母、数字和连字符 (-),最多可包含 65,536 个字符。要在名称中包含空格,请用引号 (“ ”) 将整个名称括起来。

正则表达式用于匹配全部或部分 AS 路径。它由两个组件组成,您可以按以下格式指定:

  • term— 标识 AS。您可以通过以下方式之一指定它:

    • AS 编号 — 整个 AS 编号组成一个术语。不能引用 AS 编号中的单个字符,因为 AS 编号与 POSIX 1003.2 中定义的正则表达式不同。

    • 通配符 — 匹配任何单个 AS 编号。通配符是一个句点 (.)。可以指定多个通配符。

    • AS 路径 — 单个 AS 编号或一组括在括号中的 AS 编号。以这种方式对正则表达式进行分组允许您对整个组执行常见操作,并赋予组优先级。分组路径本身可以包含运算符。

      在 Junos OS 9.1 及更高版本中,您可以指定 RFC 4893 中定义的 4 字节 AS 编号、 BGP 对四字节 AS 编号空间的支持以及早期版本的 Junos OS 支持的 2 字节 AS 编号。可以配置 1 到 4,294,967,295 范围内的值。

  • operator—(可选)指定术语必须如何匹配的运算符。大多数运算符描述必须找到该术语被视为匹配项的次数(例如,任意数量的出现次数、零或一个匹配项)。 表 1 列出了 AS 路径支持的正则表达式运算符。您将运算符紧跟在后面 term ,中间没有空格,除了竖线 ( | ) 和短划线 (–) 运算符(放置在两个术语之间)和括号(用括号括起来)。

您可以在单个正则表达式中指定一个或多个术语运算符对。

表 2 显示了如何定义正则表达式以匹配 AS 路径的示例。

表 1: AS 路径正则表达式运算符

操作人员

匹配定义

{m,n}

至少m且最多nterm重复 . 和 都必须m是正整数,并且m必须小于 nn

{m}

termm确切重复 m 必须是正整数。

{m,}

m 或 的 term多个重复 必须 m 为正整数。

*

term个或多个重复。这相当于 {0,}。

+

term一个或多个重复。这相当于 {1,}。

?

term个或一个重复 。这相当于 {0,1}。

|

管道两侧的两个术语之一。

在起始和结束范围之间(含)。

^

社区属性正则表达式开头的字符。此字符是隐式添加的;因此,它的使用是可选的。

$

社区属性正则表达式末尾的字符。此字符是隐式添加的;因此,它的使用是可选的。

( )

括在括号中的一组术语。括号和术语之间的中间空格将被忽略。如果一组括号括在引号中,中间没有空格“()”,则表示空路径。

[ ]

一组 AS 编号。集合中的一个 AS 编号必须匹配。若要指定范围的开始和结束,请使用连字符 (-)。插入符号 (^) 可用于指示它与集合中的特定 AS 编号不匹配,例如 [^123]。

表 2: AS 路径正则表达式的示例

要匹配的 AS 路径

正则表达式

匹配示例

AS 路径为 1234

1234

1234

AS 编号 1234 出现零次或多次

1234*

1234

1234 1234

1234 1234 1234

空 AS 路径

AS 编号 1234 出现零次或一次

1234?或 1234{0,1}

1234

空 AS 路径

AS 编号 1234 出现一到四次

1234{1,4}

1234

1234 1234

1234 1234 1234

1234 1234 1234 1234

AS 编号 12 出现一到四次,然后是 AS 编号 34 出现一次

12{1,4} 34

12 34

12 12 34

12 12 12 34

12 12 12 12 34

与单个 AS 编号匹配的 AS 编号范围

123–125

123

124

125

[123–125]*

空 AS 路径

123

124 124

125 125 125

123 124 125 123

第二个 AS 编号必须为 56 或 78 的路径

(. 56) |(. 78) 或 .(56 | 78)

1234 56

1234 78

9876 56

3857 78

第二个 AS 编号可能是 56 或 78 的路径

.(56 | 78)?

1234 56 52

34 56 1234

1234 78 39

794 78 2

第一个 AS 编号为 123,第二个 AS 编号为 56 或 78 的路径

123 (56|78)

123 56

123 78

任意长度的路径(不存在除外),第二个 AS 编号可以是任何内容,包括不存在

.。*或。.{0,}

1234 1234 5678 1234 5 6 7 8

AS 路径为 1 2 3

1 2 3

1 2 3

AS 编号 1 和 2 出现一次,随后 AS 编号 3 出现一次或多次

1 2 3+

1 2 3

1 2 3 3

1 2 3 3 3

AS 编号 1 出现一次或多次,随后 AS 编号 2 出现一次或多次,之后 AS 出现一次或多次 数字 3

1+ 2+ 3+

1 2 3

1 1 2 3

1 1 2 2 3

1 1 2 2 3 3

以 AS 编号 4、5、6 开头的任意长度的路径

4 5 6 .*

4 5 6

4 5 6 7 8 9

以 AS 编号 4、5、6 结尾的任意长度的路径

.* 4 5 6

4 5 6

1 2 3 4 5 6

4 9 4 5 6

AS 路径 5、12 或 18

5 |12 |18

5

12

18

配置空 AS 路径

您可以使用 AS 路径正则表达式创建与源自 AS 的路由(前缀)匹配的空 AS 路径。这些路由尚未由任何外部对等方播发到 AS。要创建空 AS 路径,请使用用引号括起来的括号运算符,中间不要有空格:

在以下示例中,本地管理的 AS 2 连接到 AS 1 (10.2.2.6) 和 AS 3。AS 3 将其路由播发到 AS 2,但 AS 2 的管理员不希望将 AS 3 路由播发到 AS 1,从而允许通过 AS 2 从 AS 1 到 AS 3 的传输流量。为了防止传输流量,导出策略 only-my-routes 将应用于 AS 1。它允许播发从 AS 2 到 AS 1 的路由,但阻止将 AS 3 的路由(或任何其他连接的 AS 的路由)播发到 AS 1:

如何评估 AS 路径正则表达式

AS 路径正则表达式实现 POSIX 1003.2 中定义的扩展(现代)正则表达式。它们与 UNIX 正则表达式相同,但存在以下例外:

  • AS 路径正则表达式中匹配的基本单位是 AS 编号,而不是单个字符。

  • 仅当路由中的 AS 路径完全匹配 regular-expression时,正则表达式才匹配路由。等效的 UNIX 正则表达式为 ^regular-expression$。例如,AS 路径正则表达式 1234 等效于 UNIX 正则表达式 ^1234$

  • 可以使用通配符运算符指定正则表达式。

示例:配置 AS 路径正则表达式

将路由与 AS 路径 1234 56 78 9 完全匹配并接受:

将备用路径匹配到 AS,并在修改首选项后接受它们:

匹配 AS 路径为 123、124 或 125 的路由,并在修改首选项后接受它们: