このページの内容
ルーティングポリシー一致条件として使用するASパス正規表現の理解
BGP AS パスとは、ネットワークパケットが特定のルーターに到達するまでに通過する自律システムのシーケンスです。AS番号は、右から左に読み取られるシーケンスで組み立てられます。例えば、AS パス5 4 3 2 1のルートを使用して宛先に到達するパケットの場合、パケットは最初にAS 5を通過して、AS 1に到達するまでAS 5などを通過します。この場合、AS 1はパケット宛先の前の最後のASです。これは、パケットの送信元がピアする AS です。
ASパスとルーティングポリシー一致条件を使用する場合は、正規表現を使用してルートを見つけることができます。これを行うには、ASパスの一部または全部に基づいて1つ以上の一致条件を作成し、それをルーティング ポリシーに含めます。
以下のセクションでは、ASパス正規表現を説明し、設定例を示します。
ASパス正規表現の設定
名前付きASパス正規表現を作成し、 as-path 一致条件を使用してルーティングポリシーに含めることができます( ルーティングポリシー一致条件を参照)。名前付きASパス正規表現を作成するには、 as-path ステートメントを含めます。
[edit policy-options] as-path name regular-expression;
ASパス正規表現をルーティングポリシーに含めるには、fromステートメントにas-path一致条件を含めます。
さらに、ASパス正規表現で構成される名前付きASパスグループを作成し、 as-path-group 一致条件を使用してルーティングポリシーに含めることもできます。名前付きASパスグループを作成するには、 as-path-group ステートメントを含めます。
[edit policy-options]
as-path-group group-name {
name [ regular-expressions ];
}
ルーティングポリシーのASパスグループ内のASパス正規表現を含めるには、fromステートメントにas-path-group一致条件を含めます。
同じポリシー条件に as-path ステートメントと as-path-group ステートメントの両方を含めることはできません。
fromステートメントのas-path一致条件に、複数のASパス正規表現の名前を含めることができます。これを行うと、ASパス正規表現が1つでも一致すれば、一致が成立します。ASパス正規表現の一致は、事実上、論理的OR演算です。
AS パス名は正規表現を識別します。ここでは、文字、数字、ハイフン(-)を含め、最大65,536 文字までを使用できます。名前にスペースを含めるには、名前全体を引用符(" ")で囲みます。
正規表現は、ASパスの全部または一部と一致するために使用します。これは、次の形式で指定する 2 つのコンポーネントで構成されています。
term <operator>
term—ASを識別します。以下のいずれかの方法で指定できます。AS番号—AS番号全体が1つの項を形成します。POSIX 1003.2 で定義されている正規表現とは異なり、AS 番号内の個々の文字を参照することはできません。
ワイルドカード文字—任意の単一のAS番号に一致します。ワイルドカード文字はピリオド(.)です。複数のワイルドカード文字を指定できます。
ASパス—単一のAS番号、または括弧で囲まれたAS番号のグループ。この方法で正規表現をグループ化することで、グループ全体で共通の操作を実行し、グループに優先順位を付けることができます。グループ化されたパスは、それ自体に演算子を含めることができます。
Junos OS リリース 9.1 以降では、RFC 4893 の 4 オクテット AS 番号空間のサポートBGPで定義されている 4 バイトのAS番号と、Junos OSの以前のリリースでサポートされている 2 バイトのAS番号を指定できます。1から 4,294,967,295の範囲 で値を設定できます。
operator—(オプション)項の一致方法を指定する運用担当者。ほとんどの演算子は、一致と見なされるために項を検出する必要がある回数を表します(たとえば、任意の出現回数、0回、1回など)。 表1 に、ASパスでサポートされている正規表現演算子を示します。演算子は、termの直後に配置し、間にスペースは入れません。ただし、2つの項の間にパイプ( | )演算子とダッシュ(–)演算子を配置します。そして、項を丸カッコで囲む場合は除きます。
1つの正規表現で1つ以上の項と運用担当者のペアを指定できます。
表2 は、ASパスに一致する正規表現を定義する方法の例を示しています。
オペレーター |
一致定義 |
|---|---|
|
少なくとも |
|
|
|
|
|
|
|
|
|
|
|
パイプの両側にある2項のうちの1項。 |
|
開始範囲と終了範囲の間。 |
|
コミュニティ属性の正規表現の先頭の文字。この文字は暗黙的に追加されます。したがって、その使用は任意です。 |
|
コミュニティ属性の正規表現の末尾の文字。この文字は暗黙的に追加されます。したがって、その使用は任意です。 |
|
括弧で囲まれた項のグループ。カッコと項の間のスペースは無視されます。"()" のように丸カッコを引用符で囲み、間にスペースを入れない場合、NULL パスを示します。 |
|
AS番号のセット。セットから 1 つの AS 番号が一致する必要があります。範囲の開始と終了を指定するには、ハイフン(-)を使用します。セット内の特定のAS番号に一致しないことを示すためにキャレット(^)を使用する場合があります(例:[^123]。 |
一致するASパス |
正規表現 |
一致の例 |
|---|---|---|
ASパスが 1234 |
1234 |
1234 |
AS番号 1234が0回以上出現 |
1234* |
1234 1234 1234 1234 1234 1234 NULL ASパス |
AS番号 1234が0回以上出現 |
1234?または1234{0,1} |
1234 NULL ASパス |
AS番号 1234の1回から4回の出現回数 |
1234{1,4} |
1234 1234 1234 1234 1234 1234 1234 1234 1234 1234 |
AS番号 12が1〜4回出現し、その後にAS番号 34が1回出現 |
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]* |
NULL ASパス 123 124 124 125 125 125 123 124 125 123 |
|
2番目のAS番号が56または 78で なければならないパス |
(. 56) | (. 78) または . (56 | 78) |
1234 56 1234 78 9876 56 3857 78 |
2番目のAS番号が56または 78の パス |
( 56 | 78)? |
1234 56 52 34 56 1234 1234 78 39 794 78 2 |
最初の AS 番号が 123、2 番目の AS 番号が 56 または 78 の パス |
123 (56|78) |
123 56 123 78 |
存在しないものを除く任意の長さのパスで、2番目のAS番号は存在しないものも含めて何でも可 |
. .* または . . .{0,} |
1234 1234 5678 1234 5 6 7 8 |
ASパスが 1 2 3 |
1 2 3 |
1 2 3 |
AS番号 1および2が1回出現し、その後にAS番号3が1回以上出現 |
1 2 3+ |
1 2 3 1 2 3 3 1 2 3 3 3 |
AS番号 1 が 1 回以上出現し、その後にAS番号 2 が 1 回以上出現し、その後に AS が 1 回以上出現 番号 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 |
NULL ASパスの設定
ASパス正規表現を使用して、ASを起点としたルート(プレフィックス)に一致するNULL ASパスを作成できます。これらのルートは、どの外部ピアからもASにアドバタイズされていません。NULL ASパスを作成するには、スペースを入れずに引用符で丸カッコ運用担当者を囲みます。
[edit policy-options] as-path null-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 へのアドバタイズは禁止されます。
[edit policy-options]
as-path null-as "()";
policy-statement only-my-routes {
term just-my-as {
from {
protocol bgp;
as-path null-as;
}
then accept;
}
term nothing-else {
then reject;
}
}
protocol {
bgp {
neighbor 10.2.2.6 {
export only-my-routes;
}
}
}
ASパス正規表現の評価方法
ASパス正規表現は、POSIX 1003.2で定義されている拡張(最新)正規表現を実装しています。これらは、次の例外を除いてUNIX正規表現と同じです。
ASパス正規表現で一致させる基本単位は、個々の文字ではなくAS番号です。
正規表現は、ルート内のASパスが
regular-expressionと完全に一致する場合のみルートに一致します。これと同等のUNIX正規表現は^regular-expression$です。たとえば、ASパス正規表現1234は、UNIX正規表現^1234$と同等です。ワイルドカード演算子を使用して正規表現を指定できます。
例:ASパス正規表現の設定
ルートを AS パス 1234 56 78 9 と完全に一致させ、受け入れます。
[edit]
policy-options {
as-path wellington "1234 56 78 9";
policy-statement from-wellington {
term term1 {
from as-path wellington;
}
then {
preference 200;
accept;
}
term term2 {
then reject;
}
}
}
代替パスをASに一致させ、設定を変更した後に受け入れます。
[edit]
policy-options {
as-path wellington-alternate “1234{1,6} (56|47)? (78|101|112)* 9+”;
policy-statement from-wellington {
from as-path wellington-alternate;
}
then {
preference 200;
accept;
}
}
}
ルートを 123、124、または 125 の AS パスに一致させ、設定を変更した後に受け入れます。
[edit]
policy-options {
as-path addison "123–125";
policy-statement from-addison {
from as-path addison;
}
then {
preference 200;
accept;
}
}
}