BGPコミュニティと拡張コミュニティの定義方法の理解
BGP コミュニティまたは拡張コミュニティをルーティングポリシーの一致条件として使用するには、次のセクションで説明するようにコミュニティを定義します。
ルーティングポリシー一致条件で使用するBGPコミュニティの定義
名前付きBGPコミュニティを作成してコミュニティメンバーを定義するには、 community
ステートメントを含めます。
[edit policy-options] community name { invert-match; members [ community-ids ]; }
name コミュニティを識別します。ここでは、文字、数字、ハイフン(-)を含め、最大 255 文字まで使用可能です。名前にスペースを含めるには、名前全体を引用符(“ ”)で囲みます。
community-ids は、コミュニティーの 1 人以上のメンバーを識別します。各コミュニティ ID は 2 つの要素で構成され、次の形式で指定します。
as-number:community-value;
as-number- コミュニティメンバーのAS番号。0 から 65,535 までの値を指定できます。AS番号の指定には、次の表記を使用できます。
数字の文字列。
アスタリスク(*) - すべての AS 番号が一致するワイルドカード文字。(コミュニティ属性の定義では、アスタリスクも 表 1 で説明されているように機能します)。
ピリオド (.)- AS 番号の任意の 1 桁と一致するワイルドカード文字。
AS 番号のグループ - 単一の AS 番号、または丸カッコで囲んだ AS 番号のグループ。この方法で番号をグループ化すると、グループ全体で共通の操作を実行し、グループに優先順位を付けることができます。グループ化された数値には、それ自体が正規表現演算子を含めることができます。正規表現の詳細については、「 コミュニティ名での UNIX 正規表現の使用」を参照してください。
community-value- コミュニティ メンバーの識別子。0 から 65,535 までの数値を指定できます。コミュニティ ID の指定には、次の表記を使用できます。
数字の文字列。
アスタリスク(*)—すべてのコミュニティ値に一致するワイルドカード文字。(コミュニティ属性の定義では、アスタリスクも 表 1 で説明されているように機能します)。
ピリオド (.)- コミュニティ値番号の任意の 1 桁と一致するワイルドカード文字。
コミュニティ値番号のグループ - 単一のコミュニティ値番号、または括弧で囲んだコミュニティ値番号のグループ。この方法で正規表現をグループ化すれば、グループ全体で共通の動作を実行し、グループに優先順位を付けることができます。グループ化されたパスは、それ自体が正規表現演算子を含むことができます。
また、members
ステートメントの community-ids オプションに、以下の既知のコミュニティ名(RFC 1997、 BGP コミュニティ属性で定義)のいずれかを含めることもできます。これにより、 [policy-options policy-statement]
で指定したルートに、構成された名前またはコミュニティ値がタグ付けされます。別の設定では、BGPインポートポリシーでインポートされたルートのフィルターも作成する必要があります。
no-advertise—このコミュニティ名のルートを他のBGPピアにアドバタイズしないでください。
no-export—このコミュニティのルートは、BGPコンフェデレーションの境界外にアドバタイズしてはなりません。コンフェデレーションの一部ではないスタンドアロンの自律システムは、コンフェデレーション自体と見なす必要があります。
no-export-subconfed—このコミュニティのルートは、BGPコンフェデレーション内の他のメンバーのASのピアを含む、外部のBGPピアにアドバタイズしてはなりません。
IPv6 ユニキャスト アドレス固有の拡張コミュニティに対応するために、次の IPv6 ユニキャスト アドレス コミュニティ名(RFC 5701、 BGP コミュニティ属性で定義)を含めることができます。
[edit policy-options] policy-statement send-direct { term 1 { then { community add community-name; community add community-name; community add community-name; accept; } } } community community-name members [ipv6-target:<IPv6 unicast address>:operator-defined local values ipv6-target:<IPv6 unicast address>:operator-defined local values
]; community community-name members [ipv6-origin:<IPv6 unicast address>:operator-defined local values ipv6-origin:<IPv6 unicast address>:operator-defined local values
]; community community-name members [ipv6-extended:type-and-subtype value:<IPv6 unicast address>:operator-defined local values
ipv6-extended:type-and-subtype value:<IPv6 unicast address>:operator-defined local values ];
ipv6-target は、ポリシー一致で使用される VPN IPv6 ターゲット ユニキャスト アドレスを識別します。 ipv6-origin 、ポリシー一致における IPv6 ユニキャスト アドレスの送信元を識別します。 ipv6-extended は、ポリシー一致で IPv6 ユニキャストアドレスの拡張フォーマットを識別します。
コミュニティ名での UNIX 正規表現の使用
( members [ community-ids ]
ステートメント内で)名前付きBGPコミュニティのメンバーを指定する場合、UNIXスタイルの正規表現を使用してAS 番号とメンバー識別子を指定できます。正規表現は 2 つの要素で構成され、以下の形式で指定します。
term operator;
term は、一致させる文字列を識別します。
operator 項の一致方法を指定します。 表 1 、コミュニティ ID でサポートされる正規表現演算子の一覧です。演算子は、 term の直後にスペースを入れずに配置します。ただし、2 つの項の間にパイプ(|
)演算 子とダッシュ(–
)演算子、および項を丸カッコで囲む場合は除きます。 表 2 、コミュニティ正規表現を使用して community-ids
を定義する方法の例を示します。演算子はオプションです。
コミュニティの正規表現は、UNIXの正規表現と同じです。どちらもPOSIX 1003.2で定義されている拡張(または最新)正規表現を実装しています。
コミュニティ正規表現は、 term
で指定された文字列を文字単位で評価します。たとえば、1234:5678
を term
として指定すると、正規表現では、コロンで区切られた 2 組の数字(1234
と 5678
)ではなく、コロン(:
)を含む 9 つの個別の文字が表示されます。
Junos OSリリース9.1以降では、RFC 4893の4オクテットAS番号スペースのBGPサポートに定義されている4バイトAS番号と、Junos OS旧リリースがサポートする2バイトAS番号の両方を指定できます。
オペレータ |
一致定義 |
---|---|
|
少なくとも |
|
正確に |
|
|
|
0回以上 |
|
1回以上 |
|
0回または1回 |
|
パイプの両側にある2項のうちの1項。 |
|
開始項と終了項の範囲に含まれる値。 |
|
コミュニティ属性の正規表現の先頭の文字。 |
|
コミュニティ属性の正規表現の末尾の文字。 |
|
文字のセット。セットから 1 文字一致できます。範囲の開始と終了を指定するには、ハイフン ( |
|
丸カッコで囲まれた項のグループ。間にスペースを入れずに引用符で囲んだ場合(" |
|
コミュニティ属性の正規表現で引用符で囲まれた文字(スペース、タブ、疑問符、角括弧など)は、特殊文字を示します。 |
一致するコミュニティ属性 |
正規表現 |
一致結果の例 |
---|---|---|
AS番号は56または78です。コミュニティ値は任意の数です。 |
^((56) |(78)):(.*)$ |
56:1000 78:64500 |
AS番号は56です。コミュニティ値は、2 で始まる任意の数値です。 |
^56:(2.*)$ |
56:2 56:222 56:234 |
AS番号は任意の番号です。コミュニティ値は、5、7、または 9 で終わる任意の数値です。 |
^(.*):(.*[579])$ |
1234:5 78:2357 34:64509 |
AS番号は56または78です。コミュニティ値は、2 で始まり 2 から 8 で終わる任意の数値です。 |
^((56) |(78)):(2.*[2–8])$ |
56:22 56:21197 78:2678 |
ルーティングポリシー一致条件で使用するBGP拡張コミュニティの定義
名前付きBGPコミュニティを作成してコミュニティメンバーを定義するには、 community
ステートメントを含めます。
[edit policy-options] community name { members [ community-ids ]; }
name
コミュニティを識別します。ここでは、文字、数字、ハイフン(-)を含め、最大 255 文字まで使用可能です。名前にスペースを含めるには、名前全体を引用符(“ ”)で囲みます。
community-ids
は、コミュニティーの 1 人以上のメンバーを識別します。各コミュニティ ID は 3 つの要素で構成され、次の形式で指定します。
type:administrator:assigned-number
type
は拡張コミュニティーのタイプであり、特定の BGP 拡張コミュニティーの 16 ビットの数値識別子、または次のいずれかのタイプです。
-
bandwidth
- 帯域幅拡張コミュニティーを設定します。リンク帯域幅を指定すると、異なる BGP パス間でトラフィックを不均一に分散できます。注:リンク帯域幅属性は、プレフィックス単位のロードバランシングと同時には機能しません。
-
domain-id
- ルートの送信元のOSPFドメインを識別します。 -
origin
- ルートの起点を識別します。 -
rt-import
- ルーティング テーブルにインストールするルートを識別します。注:AS番号ではなく、IPアドレスでルートを識別する必要があります。
-
src-as
- ルートの起点となったASを識別します。IPアドレスではなく、AS番号を指定する必要があります。注:ASは、IPアドレスではなく、AS番号で識別する必要があります。
-
target
- ルートの宛先を識別します。注:VPNルーティングおよび転送(VRF)インスタンスのインポートポリシーの場合、少なくとも1つのルートターゲットを含める必要があります。また、VRF インポートポリシーのルートターゲットでワイルドカード文字または正規表現を使用することはできません。VRF インポート ポリシーのルート ターゲットに設定する各値は、単一の値である必要があります。
administrator
は管理者です。拡張コミュニティのタイプに応じて、AS番号またはIPバージョン4(IPv4)アドレスプレフィックスのいずれかになります。
assigned-number
は、ローカル プロバイダーを識別します。
Junos OSリリース9.1以降では、RFC 4893の4オクテットAS番号スペースのBGPサポートに定義されている4バイトAS番号と、Junos OS旧リリースがサポートする2バイトAS番号の両方を指定できます。プレーン番号形式では、1〜4,294,967,295の範囲の値を設定できます。プレーン番号形式で4バイトAS番号を含む target
または origin
拡張コミュニティを設定するには、番号の末尾に文字「L」を追加します。たとえば、4バイトAS番号 334,324で番号 132が割り当てられたターゲットコミュニティは、 target:334324L:132
と表されます。
4バイトASは拡張コミュニティの一部としてのみ指定できるため、基本BGP正規表現コミュニティでは文字「L」は使用できません。例えば、拡張コミュニティーとのマッチを許可するには、 の代わりに origin:334324L:*
や target:334324L:*
などの拡張コミュニティー表現を使用します 334324L:*
Junos OSリリース 9.2以降では、 target
および origin
拡張コミュニティに4バイトAS番号を定義する際に、ASドット表記を使用することもできます。ピリオドで連結された 2 つの整数を指定します。16-bit high-order value in decimal.16-bit low-order value in decimal. たとえば、プレーン番号形式で65546と表される4バイトAS番号は、ASドット表記では1.10と表されます。
例:BGP 拡張コミュニティーの定義
管理フィールドが 10458
で、割り当てられた数の 20
を使用して、ターゲット コミュニティを設定します。
[edit policy-options] community test-a members [ target:10458:20 ];
管理フィールドが 10.1.1.1 で、番号が割り当てられた 20 でターゲット コミュニティを設定します。
[edit policy-options] community test-a members [ target:10.1.1.1:20 ];
管理フィールドが10.1.1.1で、番号が割り当てられた20を使用して、送信元コミュニティを設定します。
[edit policy-options] community test-a members [ origin:10.1.1.1:20 ];
管理フィールドに100000の4バイトAS番号と130の割り当て番号を使用して、ターゲットコミュニティを設定します。
[edit policy-options] community test-b members [ target:100000L:130 ];