■BGPの概要
BGP( Border Gateway Protocol )はインターネット用ルーティングプロトコルとして知られています。インターネットはAS( Autonomouse System )の集合体です。BGPは異なるAS間でルーティング情報を共有するために使われています。
BGPは信頼性のある転送プロトコルが利用されます。具体的にはTCP/179を使用します。
BGPについて注意すべき点はAS内ルーティングについては一切気にしないということです。BGPはASで使われているOSPFやEIGRPなど( IGP )にAS内ルーティングは一任しています。BGPが扱うのはあくまでAS間ルーティングです。
■BGPの用語
AS( Autonomouse System) | AS内ルーティングを管理する1つまたは複数のIGPと AS間ルーティングのためのBGPを使った同一の運営管理下にある デバイスの集合体。 |
BGPスピーカー | BGPが稼働しているルーターのこと。 |
BGPピア | 2つのBGPスピーカーが相互に形成しているTCPコネクションのこと。 |
eBGP | 異なるASのBGPピア間でルーティング情報を交換するためのプロトコル。 |
iBGP | 同一のAS内にあるBGPピア間でルーティング情報を交換するためのプロトコル。 |
AS間ルーティング | 異なる自律システム間で行われるルーティング。 |
AS内ルーティング | 同一自律システム内で行われるルーティング。 |
■BGPの動作
BGPにより世界中に広がったAS間におけるルーティング情報のやりとりが可能になります。
同一AS内でBGPを使うデバイスは全てiBGPを使って相互に通信します。iBGPを使うデバイスが多くある場合について注意すべき点はデバイスの全てが相互にピアをはる必要があることです。iBGPが適切に動作するには安全メッシュを構成する必要があります。BGPを使うデバイスは全てにレイヤ3到達可能性が必要であるからです。ただし、オプションを使うことによりフルメッシュ構成は必須ではありません。詳細は後述。
eBGPは異なるASのBGPを使うデバイス同士で利用されます。iBGPと同様にeBGPピアリングセッションでもBGPを使う参加デバイスが相互にレイヤ3接続性を持つ必要があります。
ピアの形成後にBGPを使うデバイスはピアリング情報を使って関係のあるASのループなしのグラフは作成します。これをBGPツリーと言います。BGPデバイスはピアを形成して自分のBGPツリーを作成すると経路情報を交換します。それ以降、ピアは自分たちのBGPルーティングテーブルの増分更新を交換しコネクションを維持させておくためにkeepaliveメッセージの交換を行います。
■BGPのネゴシエーション
ピア形成の第一歩はTCP179ポートを使ってBGPスピーカーが相互にTCPセッションをはることです。これが行われないとBGPスピーカーはお互いにピアになることができません。TCPセッションの確立後、BGPスピーカーは相互にOPENメッセージを送信します。それ以降、BGPスピーカーは増分のUPDATEメッセージ、NOTIFICATIONメッセージ、KEEPALIVEメッセージを送信します。
BGPメッセージの種類 | |
Open | BGPセッション確立時にcapabilityを交換 |
UPDATE | NLRI( マスク長、ネットワーク番号 )、 Path Attributesなどから構成される |
KEEPALIVE | BGPセッションの継続のため定期的に交換。 デフォルトで60秒ごとに送信、holdtimeは180秒 |
NOTIFICATION | エラー時に送信。その後、BGPセッションを切断する。 |
BGPピアがEstablished状態に達するとルーティング情報の交換を始めます。上記のUPDATEメッセージのところでBGPではルート情報を管理するためのBGPアトリビュートを付与してメッセージを送付します。アトリビュートには以下のものがあげられ、厳密には以下だけではありませんが簡単に紹介致します。
BGPアトリビュート一覧 | ||
属性のタイプ | アトリビュート名 | 説明 |
Well-Known Mandatory | Origin (type code 1) |
BGPがどうやって経路を学習したのか。 IGP / EGP / incompleteのいずれか。 |
AS-PATH (type code 2) |
通過したAS番号のリスト | |
Next Hop (type code 3) |
ネクストホップルータ / ASのIPアドレス | |
Well-Known Discretionary | Local-Preference (type code 5) |
他ASへの出口ポイントを設定する際に使用。 影響範囲はAS内 |
Atomic Aggregate (type code 6) |
集成前の詳細経路に付加されていた情報が欠落していたことを示す | |
Optional No-Transitive | Multi_Exit_Discriminator (type code 4) |
複数の入り口ポイントを持つASが他のASへ優先度を強制させる |
Optional Transitive | Aggregator (type code 7) |
集約ルートを生成したAS番号およびルータを示す |
Communities (type code 8) |
ルーティングポリシーを簡潔化するために使用 共通の特性を共有するルートをグループ化 ルートにコミュニティタグを付与 |
BGPスピーカ同士が隣接関係を形成する際には以下のステップを踏みます。
BGPピアの状態 | |
IDLE状態 | BGPセッションをはじめる際の最初の状態。 |
Connection状態 | BGPスピーカーがTCPコネクション形成を待っている状態。 |
Active状態 | BGPスピーカーがピアを張りたいと希望するルータとTCPセッションを 開始しようとしている状態。 |
OpenSent状態 | リモートのBGPスピーカーからOpenメッセージの受信を待っている状態。 |
OpenConfirm状態 | リモートのBGPスピーカーからKEEPALIVEメッセージ受信を待っている状態。 |
Established状態 | ネゴシエーションの全てが完了した状態。 |
■BGPの経路選択
BGPスピーカーが経路を学習する際、その経路はBGPスピーカーのルーティング情報ベース( Routing Information Base : RIB )を通る必要があります。BGPを使うデバイスは全てRIBを持っています。RIBは次の3つの部分で構成されています。
・Adj-RIB-In
BGPスピーカーが持つピア1つに対して1つのAdj-RIB-Inがあります。
このRIBは受信したBGP経路が格納されるところです。BGP経路は中に入れられると入力ポリシーエンジンにかけられます。
入力ポリシーエンジンとはルータのアドミニストレータが設定した事前定義ポリシーに基づいて
経路のフィルタリングやその属性の処理が行われるところです。
・Loc-RIB
Loc-RIBはルータが自分自身のBGPルーティング決定を行うために使うものです。
次にルータはLoc-RIBに入ったすべてのBGP経路を出力ポリシーエンジンにおくります。
出力ポリシーエンジンとはBGP経路をAdj-RIB-Outに入れる前にフィルタリングと処理を行うためにルータのアドミニストレータが設定した事前定義ポリシーです。
・Adj-RIB-Out
BGP経路が出力ポリシーエンジンを通過できるとその経路はAdj-RIB-Outに入ります。
Adj-RIB-OutはBGPスピーカーのピアごとにあります。Adj-RIB-Outに入った経路はBGPスピーカーごとにピアにアドバタイズされます。
BGP経路はそのアドバタイズ先であるBGPスピーカーごとにこのルーチンを繰り返します。
①BGPスピーカーがBGP経路を受信します。
②受信したBGP経路がAdj-RIB-Inに入れられます。
③BGP経路が入力ポリシーエンジンに送られます。
④入力ポリシーエンジンは管理者が設定したポリシーに基づいてフィルタリングと処理を行います。
入力ポリシーエンジンによって振るい落とされたBGP経路はここで破棄されます。
⑤残りのBGP経路がLoc-RIBに転送されます。
⑥BGPスピーカーはLoc-RIBに経路を格納します。これらの経路を使って経路を決定します。
⑦BGP経路は出力ポリシーエンジンに転送されます。
⑧出力ポリシーエンジンは管理者が設定したポリシーに基づいてフィルタリングと処理を行います。
出力ポリシーエンジンによって振るい落とされたBGP経路はここで破棄されます。
⑨出力ポリシーエンジンを通過できたBGP経路はAdj-RIB-Outに転送されます。
⑩受信した経路はAdj-RIB-Outに格納されます。
⑪Adj-RIB-Outに格納されたすべての経路がBGPスピーカーのすべてのピアにアドバタイズされます。
BGPスピーカーがどの経路を受け入れるのか、ローカルで使用する経路、ピアにアドバタイズする経路を決定するプロセスのことを決定プロセスと言います。
決定プロセスは次の3つのフェーズで成り立っています。
Phase-1 | フェーズ1では近隣するASから学習した経路の優先度を計算します。 優先度の最も高い経路のローカルASのBGPスピーカーへのアドバタイズも行います。 |
Phase-2 | 指定した宛先までどの経路が最適か決定します。次にこの経路をLoc-RIBに格納します。 BGPスピーカーはこのフェーズの間にインストールされた経路を使って BGPルーティングの決定を行います。 |
Phase-3 | 出力ポリシーエンジンに設定されたポリシーに基づいて 近隣するASのピアにどの経路をアドバタイズするか決定するフェーズです。 また、このフェーズの間に経路集約を行うこともできます。 |
CiscoのBGP実装では経路選択のために以下の10個のステップを取り入れています。
- 経路がアクセス不能なネクストホップを指定している場合、その経路を破棄
- weightの最も大きい経路を優先
- weightが同じ場合、local preferenceの最も大きい経路を選択
- local preferenceが同じ場合、自身を送信元とする経路を優先
- 経路が送信されなかった場合、AS_PATHの最も短い経路を優先
- AS_PATH長が同じ場合、orijinタイプの最も低い経路を優先
- originコードが同じ場合、MED属性の最も低い経路を優先 <—— 通常はここまでで勝負あり!
- MEDが同じ場合、内部経路よりも外部経路を優先
- それも同じ場合、最低メトリックのIGP近隣ルータを通る経路を優先
- BGPネイバールータIDが最も低い経路を優先
■経路フィルタリング
BGP経路フィルタリングは様々な理由で使われます。BGPの属性の処理に使われると経路に対する見方に影響を及ぼすことになります。経路フィルタリングを使って特定の経路に関しBGPスピーカでの受け入れやスピーカーによる経路広報を許可または拒絶することもできます。BGP経路フィルタリングは入力または出力ののどちらかとして行われ、以下の複数の方法があります。
- route-mapに基づくフィルタ
- ネットワーク番号に基づくフィルタ( distribute-list )
- AS-Pathに基づくフィルタ( filter-list )
- Prefixに基づくフィルタ( prefix-list )
実際の設定方法については後述します。