BGP

組織間で経路情報をやりとりする時は、信頼できる相手とだけ経路情報を交換する必要があります。

本項では、BGP(Border Gateway Protocol)について説明します。

IGPとEGPの違い

BGPは、組織間の経路情報をやりとりするため、EGP(Exterior Gateway Protocol)に分類されます。EGPに対して、組織内部で使われるルーティングプロトコルは、IGP(Interior Gateway Protocol)と言われます。

以下は、EGPとIGPで使うルーティングプロトコルです。

【EGPとIGPで使うルーティングプロトコル】
区分 ルーティングプロトコル アルゴリズム 概略
EGP EGP ディスタンスベクター型 BGPの前に利用されていたが、現在は利用されていない。
BGP パスベクトル型 現在はBGP-4(version 4)が使われている。CIDR(Classless Inter-Domain Routing)にも対応。
IGP RIPv1 ディスタンスベクター型 CIDRなどに対応できない。
RIPv2 ディスタンスベクター型 CIDRなどに対応。
OSPF リンクステート型 CIDRなどに対応。

インターネットで経路情報をやりとりする時は、EGPに分類されたルーティングプロトコルを使う必要がありますが、実質的にはBGPだけが利用可能であり必須です。

AS番号

BGPを利用する時は、IPアドレス以外にAS(Autonomous System)番号が必須です。AS番号は、組織に割り当てられる番号です。ASは、自律システムと訳され、組織内部のネットワークを表します。

組織AにはAS番号64500、組織BにはAS番号64501が割り当てられている。

以前は、ASと言えばOSPFなど1つのルーティングプロトコルを利用するネットワークの範囲でした。今では、組織内でOSPFとRIPv2を使うなど混在する環境も多くなっていて、すべてを含めて1つのASとして扱われます。

IPアドレスのグローバルアドレスが組織に対して割り当てられるのと同様に、AS番号もインターネットの中で重複しないようにIANA(Internet Assigned Numbers Authority)を中心に管理されています。

AS番号は、最初2バイト(16ビット)で表していましたが番号が枯渇してきたため、今は4バイト(32ビット)のものも使われています。以下は、それぞれが使える範囲と、プライベートAS番号などです。

【2バイトと4バイトのAS番号】
項目 16ビット 32ビット
利用可能な範囲 0〜65535 0〜4294967295
プライベートAS番号 64512〜65534 64512〜65534、4200000000〜4294967294
予約 0、65535 0、65535、65552〜131071、4294967295
文書やサンプルで利用 64496〜64511 64496〜64511、65536〜65551
AS_TRANS 23456 23456

プライベートAS番号は、IPv4のプライベートアドレスと同じで組織内で自由に使えますが、インターネットでは使えません。

また、予約された番号、文書やサンプルで利用する番号は、本番環境で利用してはいけません。

AS_TRANSは、4バイトAS番号が使える時に2バイトAS番号しか使えないルーターと互換性を保つために利用されます(仮の番号として23456を使う)。

BGPピアとTCP接続

RIPv1がブロードキャスト、RIPv2とOSPFが主にマルチキャストでパケットを送受信するのに対し、BGPはTCP(ユニキャスト)で送受信します。BGPが有効なルーターを、BGPスピーカーと言います。

また、TCPなのでコネクションを張りますが、そのコネクションを張る相手をIPアドレスで明示的に設定します。コネクションを張る相手を、BGPピア(ネイバー)と呼びます。

組織AとBで、BGPピアをIPアドレスで設定している。

つまり、RIPなどのように相手がいる・いないに関わらずパケットを送信するのではなく、設定したIPアドレスのBGPピアとだけ経路情報をやりとりするということです。

BGPピアのIPアドレスを設定する際、AS番号も設定します。AS番号が異なるBGPピアを設定して経路情報をやりとりすることで、組織間のルーティングが行えるようになります。

組織AとBで、BGP識別子とBGPピアのAS番号を設定している。

BGPスピーカーには、BGP識別子を設定します。BGP識別子は、自身に設定されたIPアドレス(192.0.2.1など)を使います。BGPでは、このBGP識別子によってBGPピアを識別します。

BGPピアのIPアドレスを設定する時、必ずしもピアがBGP識別子で使っているIPアドレスを指定する必要はありません。BGP識別子は、BGPスピーカーを特定する名前のようなものです。経路を送信してきたBGPスピーカーを特定する時などに使います。

BGPピアと接続するためのIPアドレスは、接続先との間で一番接続性が保てる(例えば直結した先の)IPアドレスで設定します。TCPで接続した後、BGP識別子を受信することでBGPピアが特定されます。

経路情報のルーティングテーブルへの反映

BGPでは、パス属性やNLRI(Network Layer Reachability Information)を送信します。

BGPピアに、パス属性とNLRIを送信している。

図の例では、宛先192.0.2.0/24へのゲートウェイは203.0.113.1とルーティングテーブルに反映されます。

以下は、必須のパス属性です。

【パス属性】
パス属性 意味
ORIGIN BGPで再配布することになった元
AS_PATH 経由したAS番号の羅列
NEXT_HOP ネクストホップアドレス

ORIGINは、一般的にIGPからBGPへ再配布されるため、IGPになります。AS_PATHは、経由したAS番号が一番左に追加されていきます。ネクストホップアドレスは、通常は送信元のIPアドレスになります。

NLRIは、プレフィックス長とIPアドレスプレフィックスによって経路情報を示します。192.0.2.0/24であれば、プレフィックス長が24でプレフィックスは192.0.2です。

また、複数のISPと接続して複数の宛先192.0.2.0/24へのゲートウェイがある場合、必須のパス属性だけであればAS_PATHでAS番号の羅列数が少ないゲートウェイがルーティングテーブルに反映されます。つまり、経由したASが少ない経路が優先されるということです。

AS_PATHに2つのAS番号がある経路と、3つのAS番号がある経路では、2つのAS番号がある経路が優先される。

このように、BGPではパス属性を利用して経路を決定します。その際、OSPFのようにLSDBでエリア内全体の接続を把握するのではなく、次の方向(ベクトル=ネクストホップ)だけを把握します。このことから、パスベクトル型と呼ばれます。

BGPのメッセージ

BGPは、TCPの3ウェイハンドシェイクが完了すると、以下のメッセージを送受信します。

OPENとUPDATEが最初に送信され、KEEPALIVEは定期的に送信。NOTIFICATIONとROUTE-REFRESHは必要な時に送信。

以下は、各メッセージの説明です。

OPEN
最初に送信されるメッセージです。自身のAS番号やホールドタイマー、BGP識別子を送信します。ホールドタイマーとは、KEEPALIVEなどのメッセージをその時間BGPピアから受信しなかった場合、BGPピアがダウンしたと判断する時間です。ホールドタイマーを過ぎると、コネクションを切断してそのBGPピアから受信した経路をすべて無効にします。ホールドタイマーは、90秒が推奨されるデフォルト値です。また、オプションで4バイトのAS番号をサポートしているなど、サポートしている機能を通知することもできます。
UPDATE
パス属性やNLRIなどを送信します。また、無効になった経路も送信可能で、その場合は受信側でルーティングテーブルから削除されます。
KEEPALIVE
ホールドタイマーを過ぎないように、定期的に送信されます。妥当な時間は、ホールドタイマーの1/3(推奨値は30秒)とされています。
NOTIFICATION
エラーを通知する時に送信されます。例えば、ホールドタイマーを過ぎると、NOTIFICATIONを送信してTCPコネクションを終わらせます。
ROUTE-REFRESH
すべての経路情報を再送するように要求します。

BGPでは、UPDATEで送信した経路情報は、変更がなければTCPコネクションが継続している間、再送することはありません。これは、TCPなのでACKが返ってくれば相手が正常に受信していることがわかり、余計な通信を発生させないためです。

逆に言えば、TCPコネクションが切断されると経路がすべて無効になってしまうため、ホールドタイマーを経過しないようにKEEPALIVEを定期的に送信します。

ROUTE-REFRESHの補足

BGPの設定を変更しても、TCPコネクションが継続していればBGPピアからUPDATEは送信されないため、設定した内容でルーティングテーブルに反映されないことがあります。このため、設定変更した後はTCPコネクションを切断し、再接続する必要があります。この時、ルーティングテーブルから一時的に経路が削除されるため、一般の通信も切断される可能性があります。

BGPが切断されると経路も削除されて、通信段になる。

これを防ぐのが、ROUTE-REFRESHです。設定変更した時にROUTE-REFRESHを送信して、相手ピアからUPDATEを送信してくれるよう要求します。これで、TCPコネクションを切断する必要がなくなり、ルーティングテーブルから経路が削除されず、UPDATEを受信すれば設定変更した内容でルーティングテーブルにも変更されます。つまり、通信断を発生させることなく変更した設定を反映できるということです。

ROUTE-REFRESHを送信するとUPDATEが返ってきてルーティングテーブルが更新される。通信断にならない。

ROUTE-REFRESHは後から追加されたメッセージなので、サポートしていない機器もあります。このため、OPENメッセージのオプションで通知して、双方有効な時だけ利用されます。

TCP MD5認証

BGPは、TCP MD5認証をオプションで利用することができます。

TCP MD5認証では、設定されたパスワードをキーとして、TCPヘッダーなどからハッシュで16バイトのMAC(Message Authentication Code)を作成します、MACは、データと共に送信します。受信側も同じハッシュを行って、MACと値が同じ場合だけ通信が成立します。

パスワードとTCPヘッダーなどからMACが作られ、受信側でも同じ計算をして一致すれば通信が成立する。

値を比較した結果、異なる値の場合はTCP接続が成立しません。このため、BGPピアの成りすましや、データの改ざん、TCP接続の妨害(リセットされる)などが防げます。

BGPピア間では、同じパスワードを設定しておく必要があります。

参考文献

本ページでは、以下を参考にしています。

次のページEBGPとIBGP