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-path 策略术语中同时包含和 as-path-group 语句。

注:

您可以在语句的匹配条件from中包含as-path多个 AS 路径正则表达式的名称。如果这样做,则只需要一个 AS 路径正则表达式即可匹配要发生的匹配。AS 路径正则表达式匹配实际上是一个逻辑或操作。

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

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

  • term- 识别 AS。您可以通过以下方式之一进行指定:

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

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

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

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

  • operator-(可选)指定术语必须如何匹配的操作员。大多数运算符描述必须找到术语才能被视为匹配的次数(例如,出现次数为零次,或出现一次)。 表 1 列出了 AS 路径支持的正则表达式运算符。您立即将运算符放在后面 term ,没有中间空格,管道 ( |) 和破折号 (-) 运算符除外,您在两个术语和括号之间,用括号括住术语。

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

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

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

操作人员

匹配定义

{m,n}

至少m,也大多数nterm是重复。两者 m 均为 n 正整数,并且 m 必须小于 n

{m}

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

{m,}

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

*

零次或更多次 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 路径

1 2 3

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

123

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 1 传输到 AS 3,再通过 AS 2。为了防止传输流量,导出策略 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 的路由,并在修改首选项后接受它们: