BGP
組織間で経路情報をやりとりする時は、信頼できる相手とだけ経路情報を交換する必要があります。
本項では、BGP(Border Gateway Protocol)について説明します。
IGPとEGPの違い
BGPは、組織間の経路情報をやりとりするため、EGP(Exterior Gateway Protocol)に分類されます。EGPに対して、組織内部で使われるルーティングプロトコルは、IGP(Interior Gateway Protocol)と言われます。
以下は、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は、自律システムと訳され、組織内部のネットワークを表します。
以前は、ASと言えばOSPFなど1つのルーティングプロトコルを利用するネットワークの範囲でした。今では、組織内でOSPFとRIPv2を使うなど混在する環境も多くなっていて、すべてを含めて1つのASとして扱われます。
IPアドレスのグローバルアドレスが組織に対して割り当てられるのと同様に、AS番号もインターネットの中で重複しないようにIANA(Internet Assigned Numbers Authority)を中心に管理されています。
AS番号は、最初2バイト(16ビット)で表していましたが番号が枯渇してきたため、今は4バイト(32ビット)のものも使われています。以下は、それぞれが使える範囲と、プライベート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ピア(ネイバー)と呼びます。
つまり、RIPなどのように相手がいる・いないに関わらずパケットを送信するのではなく、設定したIPアドレスのBGPピアとだけ経路情報をやりとりするということです。
BGPピアのIPアドレスを設定する際、AS番号も設定します。AS番号が異なるBGPピアを設定して経路情報をやりとりすることで、組織間のルーティングが行えるようになります。
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)を送信します。
図の例では、宛先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が少ない経路が優先されるということです。
このように、BGPではパス属性を利用して経路を決定します。その際、OSPFのようにLSDBでエリア内全体の接続を把握するのではなく、次の方向(ベクトル=ネクストホップ)だけを把握します。このことから、パスベクトル型と呼ばれます。
BGPのメッセージ
BGPは、TCPの3ウェイハンドシェイクが完了すると、以下のメッセージを送受信します。
以下は、各メッセージの説明です。
- 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コネクションを切断し、再接続する必要があります。この時、ルーティングテーブルから一時的に経路が削除されるため、一般の通信も切断される可能性があります。
これを防ぐのが、ROUTE-REFRESHです。設定変更した時にROUTE-REFRESHを送信して、相手ピアからUPDATEを送信してくれるよう要求します。これで、TCPコネクションを切断する必要がなくなり、ルーティングテーブルから経路が削除されず、UPDATEを受信すれば設定変更した内容でルーティングテーブルにも変更されます。つまり、通信断を発生させることなく変更した設定を反映できるということです。
ROUTE-REFRESHは後から追加されたメッセージなので、サポートしていない機器もあります。このため、OPENメッセージのオプションで通知して、双方有効な時だけ利用されます。
TCP MD5認証
BGPは、TCP MD5認証をオプションで利用することができます。
TCP MD5認証では、設定されたパスワードをキーとして、TCPヘッダーなどからハッシュで16バイトのMAC(Message Authentication Code)を作成します、MACは、データと共に送信します。受信側も同じハッシュを行って、MACと値が同じ場合だけ通信が成立します。
値を比較した結果、異なる値の場合はTCP接続が成立しません。このため、BGPピアの成りすましや、データの改ざん、TCP接続の妨害(リセットされる)などが防げます。
BGPピア間では、同じパスワードを設定しておく必要があります。
参考文献
本ページでは、以下を参考にしています。
次のページ「EBGPとIBGP」