【BGP】属性(アトリビュート)

BGP の経路(プレフィックス)には、パス属性(Path Attribute)と呼ばれる情報がいくつも付いています。ルータは、この属性を見て経路をどう扱うか、複数の経路のうちどれをベストパスにするかを決めます。

この記事では、パス属性の4つのカテゴリと代表的な属性を整理し、実際の UPDATE メッセージのキャプチャで、eBGP と iBGP で付く属性の違いを確認します。

この記事でわかること
  1. パス属性の4つのカテゴリ(Well-known Mandatory/Discretionary、Optional Transitive/Non-transitive)
  2. ORIGIN、AS_PATH、NEXT_HOP、LOCAL_PREF、MED の意味
  3. eBGP と iBGP の UPDATE メッセージに付く属性の違い

パス属性の4つのカテゴリ

すべての BGP パス属性は、次の4つのカテゴリのいずれかに分類されます。

パス属性Well-knownOptionalMandatory必ず含めるDiscretionary含めなくてよいTransitive知らなくても渡すNon-transitive知らなければ捨てるORIGINAS_PATH / NEXT_HOPLOCAL_PREFCOMMUNITYMED
図1 パス属性の4つのカテゴリと代表的な属性
カテゴリ意味例
Well-known Mandatoryすべての BGP ルータが認識しなければならず、経路を載せた UPDATE メッセージに必ず含める。ない場合はエラーとして通知されるORIGIN、AS_PATH、NEXT_HOP
Well-known Discretionaryすべての BGP ルータが認識しなければならないが、UPDATE メッセージに含めるかは任意LOCAL_PREF
Optional Transitive認識できなくてもよい。認識できないルータも、その属性を付けたまま次のピアへ渡すCOMMUNITY
Optional Non-transitive認識できなくてもよい。認識できないルータは、その属性を無視し、次のピアへは渡さないMED(MULTI_EXIT_DISC)

Well-known(よく知られている)は、すべてのルータがその属性を認識しなければならないという意味です。Optional(オプション)は、ルータがその属性を必ずしも認識しなくてよいという意味です。Transitive(推移的)と Non-transitive(非推移的)の違いは、その属性を認識できないルータが、次のピアへ属性を渡すかどうかです。

Well-Known Mandatory

すべての BGP ルータが認識し、経路を広告する UPDATE メッセージに必ず含める属性です。ORIGIN、AS_PATH、NEXT_HOP の3つがあります。

ORIGIN

経路がどのようにして BGP に載ったか(経路の生成元)を表します。show ip bgp の Path 列の末尾に表示される1文字がこの属性です。

表示値意味
iIGP主に network コマンドで BGP に載せた経路
eEGPEGP(BGP より前の古いプロトコル)で学習した経路。現在は使われない
?Incomplete生成元が不明な経路。主に再配布(redistribute)で BGP に載せた経路

AS_PATH

その経路に到達するまでに通過する AS 番号の並びです。ルータは eBGP ピアへ経路を広告するときに、自分の AS 番号を AS_PATH の先頭に追加します。iBGP ピアへ広告するときは追加しません。

  • ループの防止:受け取った経路の AS_PATH に自分の AS 番号が含まれていれば、ループと判断してその経路を捨てます。これは eBGP のループ防止の仕組みです。iBGP では AS_PATH が変わらないので使えず、代わりに「iBGP で学習した経路を他の iBGP ピアへ広告しない」ルールでループを防ぎます。
  • ベストパスの選択:同じプレフィックスを複数の経路で学習した場合、AS_PATH が短い(AS 番号の数が少ない)経路が優先されます。ただし、Weight や LOCAL_PREF など、AS_PATH より先に比較される項目で差があればそちらで決まります。

NEXT_HOP

その経路へ転送するときの次の宛先です。eBGP ピアへ経路を広告するときは、デフォルトで、広告するルータ自身のアドレスが NEXT_HOP になります。iBGP ピアへ広告するときは、デフォルトで NEXT_HOP は変更されず、そのまま渡されます。

そのため、AS 内のルータから見た NEXT_HOP は、直接つながった隣のルータではなく、AS の出口の先にある外部 AS のルータのアドレスになることがよくあります。NEXT_HOP に到達できない経路はベストパスになりません(Next-Hop-Self の記事)。

Well-Known Discretionary

すべての BGP ルータが認識しなければなりませんが、UPDATE メッセージに含めるかどうかは任意の属性です。

LOCAL_PREF

AS 内のルータに、AS から出ていくトラフィックの出口(どのルータから外へ出るか)を選ばせるための値です。値が大きい経路が優先され、デフォルト値は 100 です。LOCAL_PREF は AS 内の iBGP ピアの間でだけ受け渡され、eBGP ピアには送られません。

Optional Transitive

BGP ルータが認識できなくてもよい属性ですが、認識できないルータも、属性を付けたまま他の BGP ルータへ渡します。代表的なものに COMMUNITY 属性があります。COMMUNITY は経路にタグを付ける属性で、受け取った側のルータがタグを見てポリシーを適用するのに使います。

Optional Non-Transitive

BGP ルータが認識できなくてもよく、認識できないルータは他のルータへ渡さない属性です。ルートリフレクタで使う ORIGINATOR_ID と CLUSTER_LIST もこのカテゴリです(ルートリフレクタの記事)。

MULTI_EXIT_DISC(MED)

隣の AS に対して、自分の AS に入ってくるトラフィックがどの入口を使ってほしいかを伝える値(メトリック)です。値が小さい経路が優先されます。

  • 受け取った MED は、AS 内の iBGP ピアへは渡されますが、さらに別の AS へは渡されません。
  • Cisco のデフォルトでは、MED は同じ隣接 AS から受け取った経路同士でだけ比較されます。

UPDATE メッセージで属性を確認する

次の構成で、R1 が広告した 1.1.1.1/32 の UPDATE メッセージをキャプチャし、BGP 属性がどう付いているかを確認します。

AS1AS23eBGPiBGP.1.2.2.3192.168.12.0/24192.168.23.0/24R1R2R3Lo0 1.1.1.1/32
図2 確認に使った構成。R1–R2 は eBGP、R2–R3 は iBGP
画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

R1–R2(eBGP)の UPDATE メッセージ

パケットキャプチャ(Wireshark)画面イメージ
SourceDestinationProtocolLengthInfo
192.168.12.1192.168.12.2BGP113UPDATE Message
192.168.23.2192.168.23.3BGP120UPDATE Message
▸ Frame 15: 113 bytes on wire (904 bits), 113 bytes captured (904 bits)▸ Internet Protocol Version 4, Src: 192.168.12.1, Dst: 192.168.12.2▸ Transmission Control Protocol, Src Port: 25828, Dst Port: 179▾ Border Gateway Protocol - UPDATE Message    Length: 55    Type: UPDATE Message (2)    Withdrawn Routes Length: 0    Total Path Attribute Length: 27  ▾ Path attributes1    ▸ Path Attribute - ORIGIN: IGP    ▸ Path Attribute - AS_PATH: 1    ▸ Path Attribute - NEXT_HOP: 192.168.12.12    ▸ Path Attribute - MULTI_EXIT_DISC: 0  ▾ Network Layer Reachability Information (NLRI)3    ▸ 1.1.1.1/32
図3 R1 から R2 への UPDATE メッセージ(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1ORIGIN: IGP
AS_PATH: 1
NEXT_HOP: 192.168.12.1
Well-known Mandatory の3つ。R1 が eBGP で広告するので、AS_PATH に自分の AS 番号 1 が入り、NEXT_HOP は R1 自身のアドレスになっている
2MULTI_EXIT_DISC: 0Optional Non-transitive の MED
31.1.1.1/32NLRI(広告する経路のプレフィックス)。上の属性はこのプレフィックスに付いている

R2–R3(iBGP)の UPDATE メッセージ

パケットキャプチャ(Wireshark)画面イメージ
SourceDestinationProtocolLengthInfo
192.168.12.1192.168.12.2BGP113UPDATE Message
192.168.23.2192.168.23.3BGP120UPDATE Message
▸ Frame 16: 120 bytes on wire (960 bits), 120 bytes captured (960 bits)▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 192.168.23.3▸ Transmission Control Protocol, Src Port: 179, Dst Port: 37322▾ Border Gateway Protocol - UPDATE Message    Length: 62    Type: UPDATE Message (2)    Withdrawn Routes Length: 0    Total Path Attribute Length: 34  ▾ Path attributes1    ▸ Path Attribute - ORIGIN: IGP    ▸ Path Attribute - AS_PATH: 1    ▸ Path Attribute - NEXT_HOP: 192.168.12.12    ▸ Path Attribute - MULTI_EXIT_DISC: 03    ▸ Path Attribute - LOCAL_PREF: 100  ▾ Network Layer Reachability Information (NLRI)    ▸ 1.1.1.1/32
図4 R2 から R3 への UPDATE メッセージ(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1AS_PATH: 1
NEXT_HOP: 192.168.12.1
iBGP なので、R2 は自分の AS 番号(23)を追加せず、NEXT_HOP も R1 のアドレスのまま渡している
2MULTI_EXIT_DISC: 0R1 から受け取った MED を、AS 内の iBGP ピアへそのまま渡している
3LOCAL_PREF: 100eBGP の UPDATE にはなかった属性。LOCAL_PREF は iBGP ピアの間でだけ送られる
属性R1 → R2(eBGP)R2 → R3(iBGP)
ORIGINIGPIGP
AS_PATH1(R1 が自分の AS を追加)1(R2 は追加しない)
NEXT_HOP192.168.12.1(R1 自身)192.168.12.1(変えない)
MED00(そのまま渡す)
LOCAL_PREFなし100

まとめ

属性カテゴリ内容優先
ORIGINWell-known Mandatory経路の生成元(i/e/?)i > e > ?
AS_PATHWell-known Mandatory通過した AS の並び。eBGP のループ防止にも使う短い方
NEXT_HOPWell-known Mandatory次の宛先。iBGP では変えずに渡す—(到達できることが前提)
LOCAL_PREFWell-known DiscretionaryAS からの出口を選ぶ値。iBGP 内だけ大きい方
COMMUNITYOptional Transitive経路に付けるタグ—
MEDOptional Non-transitive隣の AS に入口を伝える値小さい方

なお、show ip bgp に表示される Weight は Cisco 独自の値で、BGP のパス属性ではありません。そのルータの中だけで使われ、他のルータには伝わりません。

コメント