COMMUNITYアトリビュートの概要

COMMUNITYアトリビュートを利用すると、「特定の条件に基づいてBGPルート情報をグループ化する」ことができます。

WEIGHT、LOCAL_PREFERENCE、MED、AS_PATHアトリビュートはベストパス決定で利用します。ですが、COMMUNITYアトリビュートはベストパスの決定とは直接関係しません。

グループ化したルート情報の識別情報(タグ)がCOMMUNITYアトリビュートです。COMMUNITYアトリビュートは32ビットの数値です。しかし、32ビットの数値をそのまま使うと分かりにくいため、COMMUNITYアトリビュートは次のように16ビットのAS番号と16ビットの識別子を組み合わせて表記されます。

図 COMMUNITYのフォーマット
図 COMMUNITYのフォーマット

Ciscoルータでこの形式でCOMMUNITYアトリビュートを扱うためには、ip bgp-community new-formatコマンドが必要です。
1つのルートに複数のCOMMUNITYを付加することも可能です。

COMMUNITYアトリビュートによってグループ化したルート情報をどのように扱うかは自由です。フィルタしたりLOCAL_PREFERENCEやMEDなどのアトリビュートを再設定したりします。

図 COMMUNITYの利用
図 COMMUNITYの利用

COMMUNITYアトリビュートの特徴として、アトリビュートが伝達されていく範囲も注目すべき点です。LOCAL_PREFERENCEは自AS内、MEDはネイバーAS内というようにアトリビュートが伝達される範囲が限られています。しかし、COMMUNITYアトリビュートは、ASを越えてルート情報に付加されて伝達されていきます。そのため、離れたAS間でのルート情報の制御にCOMMUNITYアトリビュートを利用することが可能です。

図 COMMUNITYの有効範囲

このようなCOMMUNITYアトリビュートの特徴をまとめると、次のようになります。

COMMUNITYアトリビュートの特徴
  • 特定の条件に基づいてルート情報をグループ化するためにCOMMUNITYアトリビュートを利用する
  • COMMUNITYアトリビュートはグループ化したルート情報の識別情報である
  • COMMUNITYアトリビュートはASを越えて伝達されるので、離れたAS間でのルート情報の制御が可能になる

Well-known COMMUNITY

COMMUNITYの値には、予約されているWell-known COMMUNITYがあります。Well-known COMMUNITYをルートに付加すると、その種類に応じて自動的にルートのフィルタが可能です。Well-known COMMUNITYで、どこまでBGPルートが伝わるようにするかを簡単に制御することができます。

Well-known COMMUNITYの種類とその動作は次の通りです。

Well-known COMMUNITY動作値(16進数)
no_exportEBGPネイバーにルートを送信しない0xFFFFFF01
no_advertiseいかなるBGPネイバーにもルートを送信しない0xFFFFFF02
local_asEBGP/IEBGPネイバーにルートを送信しない0xFFFFFF03
表 Well-known COMMUNITY

Well-known COMMUNITYとその動作を図で表すと次のようになります。

図 Well-known COMMUNITY no_advertiseM
図 Well-known COMMUNITY no_advertise
図 Well-known COMMUNITY no_export
図 Well-known COMMUNITY no_export
図 Well-known COMMUNITY local_as
図 Well-known COMMUNITY local_as

COMMUNITYを付加するルータと実際にルートをフィルタするルータが違うルータであるに注意してください。ここが通常のルートフィルタが異なる点です。Well-known COMMUNITYを付加することで、他のルータにおけるルートの送信に影響を及ぼすことができます。


Well-known COMMUNITYによるルートフィルタの設定例は、以下の記事で解説しています。


COMMUNITYアトリビュートを利用するための手順

Well-known COMMUNITY以外にも任意のプライベートCOMMUNITYでルート制御を行うことができます。プライベートCOMMUNITYでは、離れたAS間でフィルタだけでなくアトリビュートの再設定などのさまざまな制御を行うことができます。そのためには、次のような手順で行います。

制御を行いたいAS間で協議

  • ASが異なるということは管理している組織も異なります。単体のASだけですべて完結するというわけにはいきせん。まず、AS間でどのようなルート情報に対してどのような制御を行うかを協議します。
  • 制御したいルート情報に対してどのような値のCOMMUNITYアトリビュートを設定するかを決定します。
STEP
1

ルートの送信元ASでCOMMUNITYアトリビュートを付加

  • COMMUNITYアトリビュートの付加はルートマップで行います。ルートマップのmatchの条件に一致したルート情報に対して、set communityコマンドで任意のCOMMUNITY値を付加することができます。あらかじめ協議した条件に基づいて、ルート情報にCOMMUNITYを付加します。
  • Ciscoルータでは、デフォルトでネイバーに対してCOMMUNITYアトリビュートをアドバタイズしません。ネイバーに対してCOMMUNITYアトリビュートをアドバタイズするためには、neighbor send-communityコマンドが必要です。
STEP
2

ルートの宛先ASでCOMMUNITYアトリビュートを参照してルート情報を制御

  • COMMUNITYアトリビュートの参照もルートマップで行います。ルートマップのmatch条件でmatch communityコマンドにより、ルート情報に付加されているCOMMUNITYアトリビュートを参照できます。
  • ルートマップでCOMMUNITYアトリビュートを参照して、あらかじめ協議していたルート情報の制御を行います。ルート情報の制御として、フィルタを行うことが多いでしょう。
  • Well-known COMMUNITYでは明示的な設定は不要です。前述のようにWell-known COMMUNITYの種類に応じて自動的にルートフィルタが行われます。
STEP
3
図 COMMUNITYによる制御の手順
図 COMMUNITYによる制御の手順



BGPの仕組み