目次
BGP Well Known Mandatoryアトリビュートとは
BGPでアドバタイズするルート情報にはさまざまなパスアトリビュートが付加されます。パスアトリビュートによって、BGPのベストパスを選択し、AS間のルーティングを制御することができます。
パスアトリビュートの中でWell known Mandatoryアトリビュートは、どのようなBGPルートにも必ず付加されるという最も基本的なパスアトリビュートです。以降で、Well known Mandatoryの以下の3つのパスアトリビュートについて解説します。
- ORIGIN
- AS_PATH
- NEXT_HOP
ORIGINアトリビュート
ORIGINアトリビュートは、BGPルートの生成元を示すパスアトリビュートで、次の3つの種類があります。
- IGP
- EGP
- Incomplete
「IGP」
IGPのORIGINアトリビュートは、BGPルートがAS内のIGPから生成されているということを示しています。BGPテーブル上では、「i」で表されます。AS内のネットワークは、IGPでルーティングできるようになっていることを思い出してください。IGPのORIGINアトリビュートが付加されているBGPルートは、生成したルータが所属するASのネットワークです。そして、そのAS内でルーティング可能であることを示しています。ほとんどすべてのBGPルートのORIGINとして、IGPが付加されています。
Ciscoルータでは、networkコマンド、aggregate-addressコマンドで生成されたBGPルートにIGPのORIGINアトリビュートが付加されます。
「EGP」
EGPのORIGINアトリビュートは、BGPルートがEGP(Exterior Gateway Protocol)から生成されていることを示しています。EGPはBGPの前身のプロトコルで、いまでは利用することはありません。BGPテーブル上では「e」で表されます。ORIGNがEGPとなるようなBGPルートは、ないものとして考えてよいでしょう。
「Incomplete」
IncompleteのORIGINアトリビュートは、BGPルートの生成元が不明であることを示しています。BGPテーブル上では「?」で表されます。Ciscoルータでは、再配送によって生成したBGPルートにIncompleteのORIGINアトリビュートが付加されます。ただし、ルートの生成元が不明であるIncompleteのORIGINアトリビュートを付加したまま、他のASにアドバタイズするのは好ましくありません。IncompleteのORIGINアトリビュートが付加されているルートを他のASにアドバタイズするときには、IGPのORIGINアトリビュートに変更するのが一般的です。
AS_PATHアトリビュート
AS_PATHアトリビュートは、BGPルートが経由してきたAS番号のリストを表します。networkコマンドなどでBGPルートを生成したとき、初期のAS_PATHアトリビュートは空っぽです。他のASのネイバーであるEBGPネイバーにBGPルートをアドバタイズするとき、AS_PATHアトリビュートの左端に自AS番号を追加します。AS_PATHアトリビュートの左端に追加することを特に「プリペンド(prepend)」といいます。このようなAS_PATHアトリビュートのプリペンドの動作から、AS_PATHアトリビュートの右端のAS番号はそのルートの生成元のASと見なされます。
IBGPネイバーにBGPルートをアドバタイズするときには、AS_PATHアトリビュートは変更されません。これは、BGPではルートをAS単位で考えていることを表しています。AS_PATHアトリビュートのプリペンドの様子を表したのが次の図です。
この図は、AS1の中の100.0.0.0/8のルート情報に対して、AS_PATHアトリビュートがどのように変更されているかを示しています。
初期のAS_PATHアトリビュートは空白です。AS1からAS2のEBGPネイバーに100.0.0.0/8をアドバタイズするときにAS番号「1」がプリペンドされます。AS2内のIBGPネイバーにアドバタイズするときには、100.0.0.0/8のAS_PATHアトリビュートは変更されません。AS2からAS3のEBGPネイバーに100.0.0.0/8をアドバタイズするときにAS番号「2」がプリペンドされて、AS_PATHアトリビュートは「2 1」となります。
BGPは「パスベクタ型」ルーティングプロトコルと呼ばれることもあります。これは、パスアトリビュートの特別な変更を行っていなければ、AS_PATHアトリビュートが最も短いルートをベストパスとして決定することを表しています。
AS_PATHアトリビュートは、BGPルートがループすることを防止するという重要な役割も果たしています。受信したBGPルートのAS_PATHアトリビュートの中に自AS番号が入っているルートはループしているものと見なして破棄します。
BGPでは、ルート情報をAS単位で考えるのが基本です。そのため、BGPのルートが経由してきたAS番号をリストしているAS_PATHアトリビュートは重要なアトリビュートです。ルートをフィルタしたり、他のパスアトリビュートを付加したりするときにAS_PATHアトリビュートを基準にして行うことがよくあります。
AS_PATHアトリビュートを参照してBGPルートの制御を行うためには、AS_PATHアクセスリストという特殊なアクセスリストを利用します。AS_PATHアクセスリストは、AS_PATHアトリビュートを文字列として、そのパターンを正規表現で指定することで、AS_PATHアトリビュートを基準にしたルート情報を識別することができます。
NEXT_HOPアトリビュート
NEXT_HOPアトリビュートは、その名前の通り、ルートに対するネクストホップアドレスを示しています。ただし、BGPではルート情報をAS単位で考えることに注意してください。BGPルートをアドバタイズするネイバーによって、NEXT_HOPアトリビュートの扱い方が異なります。
BGPルートを生成したときの初期のNEXT_HOPアトリビュートは、ルーティングテーブル上のネクストホップアドレスです。そして、他のASのネイバーであるEBGPネイバーにBGPルートをアドバタイズするとき、NEXT_HOPアトリビュートを自分のIPアドレスに変更してアドバタイズします。このIPアドレスはネイバーを構成しているIPアドレスです。
また、次のような場合、NEXT_HOPアトリビュートは変更されません。
- マルチアクセスネットワーク上のEBGPネイバーにBGPルートをアドバタイズするとき
- IBGPネイバーにBGPルートをアドバタイズするとき
1.でNEXT_HOPアトリビュートが変更されないのは、実際のIPパケットのルーティングの効率を考えてのためです。次のような構成を考えます。
図では、R1(AS1)、R2(AS2)、R3(AS3)がイーサネットで同一ネットワークに接続されています。EBGPネイバーはR1(AS1)-R2(AS2)間とR2(AS2)-R3(AS3)間で構成されています。R2からR3へ100.0.0.0/8をアドバタイズするときにNEXT_HOPアトリビュートをR2の10.0.0.2に変更すると、実際のIPパケットのルーティングの効率が悪くなります。R3からは直接R1へパケットをルーティングする方が効率がよいです。そのため、NEXT_HOPアトリビュートのIPアドレスと同じネットワーク上のEBGPネイバーにBGPルートをアドバタイズするときは、NEXT_HOPアトリビュートを変更しません。
2.は、BGPではAS単位でルート情報を考えるためです。次の図のように、IBGPネイバーに対してBGPルートをアドバタイズするときは、デフォルトではNEXT_HOPアトリビュートを変更しません。
NEXT_HOPアトリビュートは、IPパケットをルーティングするときの転送先です。ですから、NEXT_HOPアトリビュートのIPアドレスに到達できないとIPパケットをルーティングできません。そのため、BGPルートを利用する大前提として、付加されているNEXT_HOPアトリビュートに到達できることが必要です。
BGPの仕組み
- BGPの概要 ~AS間でルート情報を交換~
- BGPの動作
- BGPの基本設定と確認コマンド
- BGPピアグループ(Peer Group) ~ネイバーの設定をまとめよう~
- BGPネイバーの状態
- BGPコンフェデレーションの設定
- BGPコンフェデレーションの設定例
- BGPネイバー認証
- BGP Well Known Mandatory アトリビュート -ORIGIN/AS_PATH/NEXT_HOP-
- 図解!BGPベストパス選択アルゴリズム
- BGP 基本的な設定についての演習[Cisco]
- BGPの基本的な設定についての演習 ~トラブルシュート~
- BGP KEEPALIVEタイマ/ホールドタイムの設定
- BGPルート 最小送信間隔の設定
- BGPルートダンプニング
- マルチホーム – インターネット接続の冗長化 –
- マルチホームAS BGPルートフィルタのポイント
- マルチホームAS ベストパス選択のポイント
- マルチホームAS IGPとBGPの連携のポイント
- マルチホームAS BGPの設定例
- IP-VPNでのBGPの利用 設定例
- BGPルートフィルタの種類
- BGPルートフィルタ -ディストリビュートリスト-
- BGPルートフィルタ -ディストリビュートリスト設定例-
- BGPルートフィルタ -プレフィクスリスト-
- BGPルートフィルタ -プレフィクスリスト設定例-
- BGPルートフィルタ -フィルタリスト(AS_PATH ACL)-
- BGPルートフィルタ -フィルタリスト(AS_PATH ACL)設定例-
- BGPルートフィルタ -ルートマップ(route-map)-
- BGPルートフィルタ -ルートマップ(route-map)設定例-
- BGP neighbor allowas-inコマンド
- BGP neighbor as-overrideコマンド
- BGPルート RIB Failure
- BGPルート アドミニストレイティブディスタンスの制御
- BGPルートの負荷分散
- BGPルート 条件付き生成
- BGPルート 条件付きアドバタイズ
- BGP ルート集約 自動集約
- BGPルート集約 networkコマンドによる集約
- BGPルート集約 networkコマンドによる集約 設定例
- BGP ルート集約 aggregate-addressコマンドによる集約
- aggregate-addressコマンドのオプション summary-only
- aggregate-addressコマンドのオプション attribute-map
- aggregate-addressコマンドのオプション as-set
- aggregate-addressコマンドのオプション advertise-map
- aggregate-addressコマンド as-set/attribute-map/advertise-map 設定例
- BGP選択型集約の概要
- BGP選択型集約 suppress-map
- BGP選択型集約 unsuppress-map
- BGP 選択型集約 suppress-map/unsuppress-map 設定例
- BGP local-as ~ネイバーに他のASのように見せる~
- BGP neighbor remove-private-ASコマンド
- bgp fast external-fallover
- BGP プレフィクス数の制限
- BGP COMMUNITYアトリビュートの使い方
- BGP Well-known COMMUNITYのルートフィルタ設定例
- BGP プライベートCOMMUNITYによるルート制御の設定例
- [演習]BGP応用 Part1:BGP基本設定
- [演習]BGP応用 Part2:ルート集約
- [演習]BGP応用 Part3:ポリシーベースルーティング
- [演習]BGP応用 Part4:トラブルシューティング
- BGP 設定ミスの切り分けと修正 Part1
- BGP 設定ミスの切り分けと修正 Part2
- BGP 設定ミスの切り分けと修正 Part3
- BGP 設定ミスの切り分けと修正 Part4
- BGP 設定ミスの切り分けと修正 Part5
- BGP 設定ミスの切り分けと修正 Part6
- BGP 設定ミスの切り分けと修正 Part7
- IPv6 BGPの設定例 Part1
- IPv6 BGPの設定例 Part2
- 2021年10月4日 Facebookに何が起こったか?
- IPv4 BGPネイバーでのIPv6プレフィックスの交換