現在のインターネットでは、さまざまな経路制御プロトコルが用いられています。 経路制御プロトコルにはそれぞれに固有の特徴がありますが、扱うネットワークの 規模に着目すると、IGPとEGPというグループに 分類することができます。
IGPは、Interior Gateway Protocolの略で、主に組織内のネットワークを 制御するために用いられます。 よく知られているIGPには、RIP、OSPF、IS-ISがあります。
EGPは、Exterior Gateway Protocolの略であり、IGPで運用される組織の間を 取り持ちます。 EGPは、IGPで管理されるネットワークを結びつけ、 インターネット全体の接続性を提供します。 よく知られているEGPとしてはBGPがあります。
従来は、BGPといえば一般のユーザではなくISPが使用するものでしたが、 最近では、IP-VPNサービスに代表されるように、一般のユーザがBGPを 使用するケースが増えています。
BGPでは、インターネットがAS(Autonomous System)という 部分から構成されているものと考えます。 ASは、特定の管理主体が統一的に管理するネットワークの範囲です。
ASには、AS番号という16bitの識別子が一意に割りあてられます。 ただし、64512から65535の範囲の番号は、プライベートな利用を想定しており、 重複して割りあてられる可能性があります。
BGPにはいくつかのバージョンがありますが、現在のインターネットでは、 バージョン4がよく使われており、これをBGP-4とよびます。 BGP-4に関する基本的な仕様はRFC1771として提案されています。
BGP-4は、BGP-3(BGP version 3)の拡張で、 CIDR(Classless Inter-Domain Routing)をサポートしていることが大きな特徴です。 他の経路制御プロトコルと比べると、次のような特徴があります。
経路情報の交換に信頼性を持たせるために、 TCPのコネクションを使って経路情報を交換します。 エラーなどが発生しない限りは、コネクションを閉じることはなく、 同じコネクションが永続的に使われます。 1つの相手に対して必要なコネクションは1つです。
RIPなどの経路制御プロトコルでは、定期的にすべての経路を広告しますが、 BGP-4では、経路が変化したときだけ、その差分を送信します。 つまり、経路の変化がなければ、経路情報は流れません。 ただし、キープアライブといって、 経路情報を含まないメッセージを定期的に流すことができます。
経路はパス(path)というAS番号の列で表現されます。パスを見れば、 経路のループを検出したり、経路の長さを比較するなど、 有用な情報を知ることができます。BGP-4では、 経路を表現する情報の要素をパス属性(Path Attribute) とよんでいます。
以下の例では、100番のASと200番のASがルータで接続されています。 RFC1771では、BGPに関係するルータなどをBGPスピーカ(speaker)とよんでいますが、 この文書ではBGPルータとよびます。
なお、実際のネットワーク構成では、ASの外へ接続するルータが3つ以上あったり、 1つのBGPルータが2つ以上のASと接続することもあります。
+----------------+ +----------------+ | AS 100 | | AS 200 | | | | | | | | | +-----+ +-----+ +-----+ +-----+ ==>| R1 |<========>| R2 |<========>| R3 |<========>| R4 |<=== +-----+ IBGP +-----+ EBGP +-----+ IBGP +-----+ | | | | | | | | | | | | +----------------+ +----------------+ R1〜R4: BGPルータ
この図の中の矢印は、BGPルータ間のTCPコネクションを示しています。このうち、 同じASに属するBGPルータの間のTCPコネクションを IBGP (Internal BGP)といいます。 一方、異なるASに属するBGPルータの間のTCPコネクションを EBGP (External BGP)といいます。
BGP-4では、他のBGPルータから教わった経路を、他のBGPルータに伝えようとしますが、 IBGPから教わった経路を他のIBGPへ伝えることはありません。 したがって、ASの中に複数のIBGPがあるときには、 それらをフルメッシュで接続する必要があります。
IBGPでは、ルータが直接につながっている必要はなく、 一般的には、複数のルータを経由してつながっています。 したがって、IBGP間の通信に必要な経路は、 OSPFなどのIGPによって用意されることになります。
一方、EBGPについては、間にルータをはさむことはなく、直接につながります。 実装によっては、直接につながらない場合を扱うものがありますが、 この文書では言及しません。
BGPの経路情報には、パス(Path)の情報が含まれています。パスとは、 宛先に至るまでに通過するASを列挙したものです。 BGPでは、経路を表現する情報の要素をパス属性(Path Attribute)とよんでいます。 主要なパス属性をいくつか説明します。
Originは、誰が経路を作ったかということを表します。 この属性のある経路を他のBGPルータに広告するときには、基本的には、 この属性を変更しないで広告します。 Originの値は、IGP、EGP、Incompleteの3つです。
AS Pathは、パスの途中で通過するASの番号(つまりAS番号)の列であり、 実際のパケットの通り道を表現するものです。
EBGPでは多くの場合、Next Hopは広告したルータのIPアドレスになります。 しかしながら、EBGPから受けた経路をIBGPで広告するときには、 経路の元のNext Hopをそのまま使います。
MEDは、複数のEBGPを持っているときに、 それぞれのEBGPから広告される同じ経路に対して優先順位を持たせるものです。 MEDの小さい経路がより優先的に選ばれます。
Local Preferenceも、MEDと同様に優先順位を持たせるために使用しますが、 EBGPではなく、IBGPの間で使用します。 どこかから受けた経路をIBGPに広告するときに、この属性が付与されます。 この属性は局所的にしか有効でなく、 ルータを越えて伝達されることはありません。 MEDとは逆に値の高いものが優先されます。
BGPルータはTCPの179番ポートに対してコネクションを接続します。 自分側のポート番号については、179番以外の空いている番号を使います。 2つのBGPルータが同時に接続を要求したときには、そのうちの1つを残し、 もう1つを終了します。
BGPルータは、 OPEN、UPDATE、KEEPALIVE、 NOTIFICATIONという4種類のメッセージを交換します。
KEEPALIVEメッセージを送信する間隔は、 HoldTimeというパラメータで決まります。 RTシリーズの実装では、HoldTimeパラメータのデフォルト値を180秒としています。 BGPルータは、 HoldTimeパラメータの1/3程度の間隔(つまり60秒のデフォルト値) でKEEPALIVEメッセージを送信します。 そして、 HoldTimeパラメータの時間だけ待ってもKEEPALIVEメッセージを受信できなかったら、 コネクションがダウンしたものと判断します。
UPDATEには、パス属性、 NLRI(Network Layer Reachability Information)、 Withdrawn Routesの3つが含まれます。 パス属性は、前述のとおり、 経路の通り道となるパスの情報です。そして、NLRIは到達可能な宛先を、 Withdrawn Routesは到達不可能な宛先を示します。
BGPで同じ宛先となる経路を複数受信した場合に、1つの経路を選択するための優先順位を示します。 優先順位は上位のものほど高くなります。
EBGPで受信した経路に対してbgp export filterコマンドとbgp exportコマンドで設定したpreference値の大きい経路を優先します。 この比較はEBGPで異なるASから受信した経路に対してにのみ働きますが、bgp export route selection ruleコマンドの存在する機種では設定によりIBGPで受信した経路も比較対象に含めることが可能です。
受信した経路のパス属性"Local Preference"の値の大きい経路を優先します。 この比較はIBGPで受信した経路同士の場合にのみ働きます。
経路種別によって優先する経路を選択します。経路種別は以下の3つに大別しており、優先順位は上位のものほど高くなります。
受信した経路のパス属性"MED"の値の小さい経路を優先します。 この比較はEBGPで同一のASから受信した経路同士の場合にのみ働きます。
受信した経路のパス属性"Origin"によって優先する経路を選択します。Origin属性は以下の3つが存在し、優先順位は上位のものほど高くなります。
受信した経路のパス属性"AS Path"の短い経路を優先します。
経路の受信元であるBGPルーターのIPアドレスが小さい経路を優先します。
RTシリーズは、RFC1771で規定される基本的な処理に対応します。 ただし、RFC1771に記述される機能の一部には対応していないものがあります。 また、RFC1771よりも新しいRFCで規定される機能 (ConfederationやRoute Refrectorなど)には対応していません。
機能や属性の対応状況は以下のようになっています。
RTシリーズでは、以下の機種およびファームウェアで、IBGPをサポートしています。
機種 | ファームウェア |
---|---|
vRX VMware ESXi版 | すべてのリビジョン |
vRX Amazon EC2版 | |
RTX3510 | |
RTX1300 | |
RTX1220 | |
RTX830 | |
NVR700W | |
RTX1210 | |
RTX5000 | |
RTX3500 | |
FWX120 | |
RTX810 | Rev.11.01.09以降 |
RTX1200 | Rev.10.01.42以降 |
RTX3000 | Rev.9.00.56以降 |
RTシリーズでは、以下の機種およびファームウェアで、TCP MD5認証をサポートしています。
機種 | ファームウェア |
---|---|
RTX3510 | すべてのリビジョン |
RTX1300 | |
RTX1220 | |
RTX830 | |
NVR700W | |
RTX1210 | Rev.14.01.11以降 |
RTX5000 | Rev.14.00.18以降 |
RTX3500 | |
FWX120 | Rev.11.03.22以降 |
RTX810 | Rev.11.01.28以降 |
vRX シリーズでは加えて、以下の制限事項が存在します。
bgp neighborコマンドでlocal-addressパラメータを設定しない場合の制限事項
BGPの接続を受けたインタフェースとBGPルータへの経路となるインタフェースが異なる場合は、BGPの通信に限り、送受信で異なるネットワークが用いられます。
同一サブネットに所属するBGPルータから別サブネットに所属するインタフェースへの接続が可能となりますが、このとき、広告された経路情報から経路テーブルに反映されるのは広告を受けたBGPルータが既知の経路に限られます。また、BGPルータに登録された経路のインタフェースはunknown interfaceとなりルーティングには使用されず、経路情報を受け取る前から存在する経路が継続して用いられます。
vRX VMware ESXi版の近隣ルーターおよび経路情報の更新契機に関する制限事項
以下のドキュメントを用意しています。