この章ではBGP(Border Gateway Protocol)に関する基礎知識とその設定を学びます。
経路制御を行うルーティングプロトコルにはAS(Autonomous System)内部で使用されるIGP(Interior Gateway Protocol)とAS外部で使用されるEGP(Exterior Gateway Protocol)に分けられます。 Routingの章で紹介したOSPFなどはAS内部での経路制御に用いられるIGPの一つです。
一方BGPはAS外部、つまりAS間での経路情報の交換に使用されるルーティングプロトコルです。(AS内部でBGPを用いた経路制御を行う場合もあります) BGPは、パスベクタ(経路ベクトル)型ルーティングプロトコルで、AS内のルート情報に付加されたパスアトリビュートを送信して最適経路を決定します。
基本的には、宛先ネットワークまでに経由するASが少ない経路を最適パスとして使用しますが、接続相手との契約内容に基づいた細かい経路制御も可能です。 インターネットのすべての経路情報(フルルート)をもつためデフォルトルートの設定は不要ですが、コストとの兼ね合いから一部の経路のみにBGPを使用する場合もあります。
BGPの特徴としては以下のような点が挙げられます。
特徴 | 説明 | |
---|---|---|
転送プロトコルにTCPを使用 | TCPポート179を使用し、TCP接続を行い信頼性のあるルーティングアップデートを実行 | |
差分アップデート | 定期的なルーティングアップデートを行わず、変更発生時にのみ差分アップデートを実行 | |
パスアトリビュート | パスアトリビュートをルートに付加して、詳細なポリシーを定義したルーティングを実現 | |
ループフリー | AS-PATHリストを使用することで、ループフリーの構成を実現 | |
クラスレスルーティングプロトコル | CIDRによるルート集約、VLSMによるサブネット分割時の可変長マスクを実現 |
OSPF | BGP | |
---|---|---|
ゲートウェイプロトコル | 内部ゲートウェイプロトコル | 外部ゲートウェイプロトコル |
実装 | 簡単 | 繁雑 |
収束 | 速い | 遅い |
設計 | 階層ネットワークが可能 | メッシュ |
方式 | 距離ベクトル型 | 経路ベクトル型 |
デバイスリソースの必要性 | 大量のメモリとCPU | ルーティングテーブルのサイズに依存しますが、BGPはスケーリングに優れています。 |
ネットワークのサイズ | 一元的に管理できる主に小規模なネットワークで使用されます。 | 主にインターネットなどの大規模ネットワークで使用されます。 |
機能 | 最速ルートが最短ルートよりも優先されます。 | 定めたポリシーに合致する最適なパスが決定されます。 |
使用されるアルゴリズム | ダイクストラアルゴリズム | 最適パスアルゴリズム |
プロトコル | IP | TCP |
ASとは、「単一」の「明確に定義された」ルーティングポリシーを持つ1つまたは複数のネットワーク運営組織が運営する、相互に接続された1つまたは複数のIPプレフィックスのグループです。
BGPでは、インターネット上での各ASを識別するために16bitのAS番号と呼ばれる識別子を割り当てています。(32bitの4byte AS numberの仕様策定も進んでいる)
経路情報はより多くのプロバイダと接続しているプロバイダに集まり、トランジット接続により下位のプロバイダから上位のプロバイダへと経路情報が収束されていきます。 インターネット全体におけるプロバイダのつながりは階層化された木構造になっていて、ツリーの最上位にあるプロバイダにはインターネット全体の経路情報が集まります。 このようにフルルートを他のプロバイダに依存することなく得られるプロバイダはTier1に位置づけられ、現在以下の17のプロバイダがTier1として認識されています。
Name | Headquarters | AS number | CAIDA AS Rank |
---|---|---|---|
Lumen Technologies (formerly CenturyLink formerly Level 3) | United States | 3356 | 1 |
Telia Carrier | Sweden | 1299 | 2 |
Cogent Communications (formerly PSINet) | United States | 174 | 3 |
NTT Ltd. (formerly Verio) | United Kingdom | 2914 | 4 |
GTT Communications, Inc. | United States | 3257 | 5 |
Telecom Italia Sparkle (Seabone) | Italy | 6762 | 6 |
Tata Communications (formerly Teleglobe) | India | 6453 | 8 |
Zayo Group (formerly AboveNet) | United States | 6461 | 9 |
PCCW Global | Hong Kong | 3491 | 10 |
Lumen Technologies (formerly CenturyLink formerly Level 3 formerly Global Crossing) | United States | 3549 | 13 |
Telxius (Subsidiary of Telefónica) | Spain | 12956 | 15 |
Orange (OpenTransit) | France | 5511 | 17 |
Deutsche Telekom Global Carrier | Germany | 3320 | 19 |
Verizon Enterprise Solutions (formerly UUNET) | United States | 701 | 20 |
AT&T | United States | 7018 | 21 |
Liberty Global | United Kingdom | 6830 | 25 |
Sprint (T-Mobile US) | United States | 1239 | 32 |
他にも、
Tier2: 一部のネットワークと無料でピアリングしているが、IPトランジットを購入するか、インターネットの少なくとも一部に到達するためにピアリングの料金を支払うネットワーク
Tier3: インターネットに参加するために他のネットワークからトランジット/ピアリングのみを購入するネットワーク
のような分け方が一般的ですが、Tier自体は明確に定められているわけではないので業界の認識に左右されます。
BGPを利用するルータ同士の直接の接続をピア、もしくはピアリングと呼びます。
ピアリングは、組織同士の個別交渉によって行われ、お互いの合意の元に経路情報が交換されます。 これにより、接続した組織同士や、その顧客同士の通信を可能とします。 ピアリングで直接相互接続できるのは地理的に近いISPに限られることから、各ASは他のインターネット全域のASに対する接続性(フルルート)を別の(上位の)ASから提供してもらうのが一般的です。 この接続性の提供を「トランジット」と呼び、トランジットを提供するASを、「トランジットAS」と呼びます。
トランジットはトラフィック量に応じた従量課金が発生する商用サービスであることが一般的です。 実際のケースとしては、トランジットの提供を受けるほかに、トランジットAS以外とのピアリングを並行して行うことが一般的です。
ピアリングの理由として大きく以下の二つのメリットがあげられ、利用者が多く存在するような特定のネットワークの費用や品質を向上するために利用されます。
- ピアリング相手のASとの通信を、トランジットを介さないで賄うことで、トランジット費用の軽減が期待できる
- ピアリングによってASと直接接続をするとそのASとネットワークとして近くなるため、トランジットを経由することによる遅延などの影響を受けにくくなる
他の事業者と接続するためには、装置や回線が必要となりますので、 事業者間の接続を容易にするために、専用のスイッチを提供し、接続している事業者同士で自由にピアリングを行えるようにするIX(Internet eXchange)事業者が存在します。 ピアリングにはこのIX事業者によって提供されるスイッチ上で行われるパブリックピアリングと、組織同士が直接回線を接続するプライベートピアリングがあります。
ISPの相互接続においては、このような接続形態を、それぞれの要件により組み合わせて利用されることが一般的です。
[INFO]
SAKURA InternetはLooking Glassというサービスを提供している
[INFO]
トンネリングしたのはeBGPのTTLが1であるためです。
[WARN]
BGPは経路情報の交換にTCPの179番ポートを使用するので、ポートが開放されているか注意してください。
ヒント1
IPトンネリングと同様、お互いが設定する必要があります。 (経路を一方的に広告したい場合は自分側が開いてなくても問題有りません。)
ヒント2
相手のグローバルIPとAS番号が必要です。
ヒント3
自分のネットワーク内から広告したい範囲を指定する必要があります。
s1~3のどれかで何らかのHTTPサーバーをポート80で起動し、{サーバーのIPアドレス} server.{あなたのtraQ ID}
と言う形式で共有してください。(個人でやる場合には互いのサーバーにIPアドレスとドメイン名の対応が反映されていれば問題ありません。)
共有されているIPアドレスとドメイン名の対応を/etc/hosts
に反映し、curl
コマンドで実際にアクセス出来ることを確かめてください。
[INFO]
DNS以外に/etc/hosts
を参照することでも、ドメイン名からIPアドレスを引くことができます。
ヒント
python -m
やphp -s
などが簡単です。