BGP の経路(プレフィックス)には、パス属性(Path Attribute)と呼ばれる情報がいくつも付いています。ルータは、この属性を見て経路をどう扱うか、複数の経路のうちどれをベストパスにするかを決めます。
この記事では、パス属性の4つのカテゴリと代表的な属性を整理し、実際の UPDATE メッセージのキャプチャで、eBGP と iBGP で付く属性の違いを確認します。
- パス属性の4つのカテゴリ(Well-known Mandatory/Discretionary、Optional Transitive/Non-transitive)
- ORIGIN、AS_PATH、NEXT_HOP、LOCAL_PREF、MED の意味
- eBGP と iBGP の UPDATE メッセージに付く属性の違い
パス属性の4つのカテゴリ
すべての BGP パス属性は、次の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文字がこの属性です。
| 表示 | 値 | 意味 |
|---|---|---|
| i | IGP | 主に network コマンドで BGP に載せた経路 |
| e | EGP | EGP(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 属性がどう付いているかを確認します。
この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
R1–R2(eBGP)の UPDATE メッセージ
| Source | Destination | Protocol | Length | Info |
|---|---|---|---|---|
| 192.168.12.1 | 192.168.12.2 | BGP | 113 | UPDATE Message |
| 192.168.23.2 | 192.168.23.3 | BGP | 120 | UPDATE 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
| No. | 表示 | 意味 |
|---|---|---|
| 1 | ORIGIN: IGPAS_PATH: 1NEXT_HOP: 192.168.12.1 | Well-known Mandatory の3つ。R1 が eBGP で広告するので、AS_PATH に自分の AS 番号 1 が入り、NEXT_HOP は R1 自身のアドレスになっている |
| 2 | MULTI_EXIT_DISC: 0 | Optional Non-transitive の MED |
| 3 | 1.1.1.1/32 | NLRI(広告する経路のプレフィックス)。上の属性はこのプレフィックスに付いている |
R2–R3(iBGP)の UPDATE メッセージ
| Source | Destination | Protocol | Length | Info |
|---|---|---|---|---|
| 192.168.12.1 | 192.168.12.2 | BGP | 113 | UPDATE Message |
| 192.168.23.2 | 192.168.23.3 | BGP | 120 | UPDATE 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
| No. | 表示 | 意味 |
|---|---|---|
| 1 | AS_PATH: 1NEXT_HOP: 192.168.12.1 | iBGP なので、R2 は自分の AS 番号(23)を追加せず、NEXT_HOP も R1 のアドレスのまま渡している |
| 2 | MULTI_EXIT_DISC: 0 | R1 から受け取った MED を、AS 内の iBGP ピアへそのまま渡している |
| 3 | LOCAL_PREF: 100 | eBGP の UPDATE にはなかった属性。LOCAL_PREF は iBGP ピアの間でだけ送られる |
| 属性 | R1 → R2(eBGP) | R2 → R3(iBGP) |
|---|---|---|
| ORIGIN | IGP | IGP |
| AS_PATH | 1(R1 が自分の AS を追加) | 1(R2 は追加しない) |
| NEXT_HOP | 192.168.12.1(R1 自身) | 192.168.12.1(変えない) |
| MED | 0 | 0(そのまま渡す) |
| LOCAL_PREF | なし | 100 |
まとめ
| 属性 | カテゴリ | 内容 | 優先 |
|---|---|---|---|
| ORIGIN | Well-known Mandatory | 経路の生成元(i/e/?) | i > e > ? |
| AS_PATH | Well-known Mandatory | 通過した AS の並び。eBGP のループ防止にも使う | 短い方 |
| NEXT_HOP | Well-known Mandatory | 次の宛先。iBGP では変えずに渡す | —(到達できることが前提) |
| LOCAL_PREF | Well-known Discretionary | AS からの出口を選ぶ値。iBGP 内だけ | 大きい方 |
| COMMUNITY | Optional Transitive | 経路に付けるタグ | — |
| MED | Optional Non-transitive | 隣の AS に入口を伝える値 | 小さい方 |
なお、show ip bgp に表示される Weight は Cisco 独自の値で、BGP のパス属性ではありません。そのルータの中だけで使われ、他のルータには伝わりません。
コメント