Chapter7: BGP
この章では BGP(Border Gateway Protocol)に関する基礎知識とその設定を学びます。
Lesson
BGP
経路制御をするルーティングプロトコルには AS(Autonomous System)内部で使用される IGP(Interior Gateway Protocol)と AS 外部で使用される EGP(Exterior Gateway Protocol)に分けられます。 Routing の章で紹介した OSPF などは AS 内部での経路制御に用いられる IGP の 1 つです。
一方 BGP は AS 外部、つまり AS 間での経路情報の交換に使用されるルーティングプロトコルです。(AS 内部で BGP を用いた経路制御をする場合もあります) BGP は、パスベクタ(経路ベクトル)型ルーティングプロトコルで、AS 内のルート情報に付加されたパス属性を送信して最適経路を決定します。
基本的には、宛先ネットワークまでに経由する AS が少ない経路を最適パスとして使用しますが、接続相手との契約内容に基づいた細かい経路制御も可能です。 インターネットのすべての経路情報(フルルート)をもつためデフォルトルートの設定は不要ですが、コストとの兼ね合いから一部の経路のみに BGP を使用する場合もあります。
BGP の特徴としては以下のような点が挙げられます。
特徴 | 説明 |
---|---|
転送プロトコルにTCPを使用 | TCPポート179を使用し、TCP接続を行い信頼性のあるルーティングアップデートを実行 |
差分アップデート | 定期的なルーティングアップデートを行わず、変更発生時にのみ差分アップデートを実行 |
パス属性 | パス属性をルートに付加して、詳細なポリシーを定義したルーティングを実現 |
ループフリー | AS-PATHリストを使用することで、ループフリーの構成を実現 |
クラスレスルーティングプロトコル | CIDRによるルート集約、VLSMによるサブネット分割時の可変長マスクを実現 |
OSPF vs BGP
OSPF | BGP | |
---|---|---|
ゲートウェイプロトコル | 内部ゲートウェイプロトコル | 外部ゲートウェイプロトコル |
実装 | 簡単 | 繁雑 |
収束 | 速い | 遅い |
設計 | 階層ネットワークが可能 | メッシュ |
方式 | 距離ベクトル型 | 経路ベクトル型 |
デバイスリソースの必要性 | 大量のメモリとCPU | ルーティングテーブルのサイズに依存しますが、BGPはスケーリングに優れています。 |
ネットワークのサイズ | 一元的に管理できる主に小規模なネットワークで使用されます。 | 主にインターネットなどの大規模ネットワークで使用されます。 |
機能 | 最速ルートが最短ルートよりも優先されます。 | 定めたポリシーに合致する最適なパスが決定されます。 |
使用されるアルゴリズム | ダイクストラアルゴリズム | 最適パスアルゴリズム |
プロトコル | IP | TCP |
Autonomous System
AS とは、「単一」の「明確に定義された」ルーティングポリシーを持つ 1 つまたは複数のネットワーク運営組織が運営する、相互に接続された 1 つまたは複数の IP プレフィックスのグループです。
BGP では、インターネット上での各 AS を識別するために 16bit の AS 番号と呼ばれる識別子を割り当てています。(32bit の 4byte AS number の仕様策定も進んでいる)
経路情報はより多くのプロバイダと接続しているプロバイダに集まり、トランジット接続により下位のプロバイダから上位のプロバイダへと経路情報が収束されていきます。 インターネット全体におけるプロバイダのつながりは階層化された木構造になっていて、ツリーの最上位にあるプロバイダにはインターネット全体の経路情報が集まります。 このようにフルルートを他のプロバイダに依存することなく得られるプロバイダは Tier1 に位置づけられ、現在以下の 15 のプロバイダが Tier1 として認識されています。
Name | AS number | CAIDA AS rank |
---|---|---|
AT&T | 7018 | 24 |
Deutsche Telekom Global Carrier | 3320 | 25 |
GTT Communications | 3257 | 7 |
Liberty Global | 6830 | 29 |
Lumen Technologies | 3356 | 1 |
NTT Communications | 2914 | 4 |
Orange | 5511 | 13 |
PCCW Global | 3491 | 10 |
T-Mobile US | 1239 | 22 |
Tata Communications | 6453 | 8 |
Telecom Italia Sparkle | 6762 | 5 |
Arelion (formerly Telia Carrier) | 1299 | 2 |
Telxius | 12956 | 16 |
Verizon Enterprise Solutions | 701 | 21 |
Zayo Group | 6461 | 9 |
他にも、
Tier2: 一部のネットワークと無料でピアリングしているが、IP トランジットを購入するか、インターネットの少なくとも一部へ到達するためにピアリングの料金を支払うネットワーク。
Tier3: インターネットへ参加するために他のネットワークからトランジット/ピアリングのみを購入するネットワーク
のような分け方が一般的ですが、Tier 自体は明確に定められているわけではないので業界の認識に左右されます。
ピアとトランジット
BGP を利用するルータ同士の直接の接続をピア、もしくはピアリングと呼びます。
ピアリングは、組織同士の個別交渉によって行われ、お互いの合意の元に経路情報が交換されます。 これにより、接続した組織同士や、その顧客同士の通信を可能とします。 ピアリングで直接相互接続できるのは地理的に近い ISP に限られることから、各 AS は他のインターネット全域の AS に対する接続性(フルルート)を別の(上位の)AS から提供してもらうのが一般的です。 この接続性の提供を「トランジット」と呼び、トランジットを提供する AS を、「トランジット AS」と呼びます。
トランジットは一般的にトラフィック量に応じた従量課金が発生する商用サービスとして提供されます。 実際のケースとしては、トランジットの提供を受けるほかに、トランジット AS 以外とのピアリングを並行して行うことが一般的です。
ピアリングの理由として大きく以下の 2 つのメリットがあげられ、利用者が多く存在するような特定のネットワークの費用や品質を向上するために利用されます。
- ピアリング相手の AS との通信を、トランジットを介さないで賄うことで、トランジット費用の軽減が期待できる
- ピアリングによって AS と直接接続をするとその AS とネットワークとして近くなるため、トランジットを経由することによる遅延などの影響を受けにくくなる
他の事業者と接続するためには、装置や回線が必要となります。そのため事業者間の接続を容易とするために、専用のスイッチを提供し接続している事業者同士で自由にピアリングを行えるようにする IX(Internet eXchange)事業者が存在します。 ピアリングにはこの IX 事業者によって提供されるスイッチ上で行われるパブリックピアリングと、組織同士が直接回線を接続するプライベートピアリングがあります。
ISP の相互接続においては、このような接続形態を、それぞれの要件により組み合わせて利用されることが一般的です。
INFO
SAKURA Internet はLooking Glassというサービスを提供している
Assignment
1. Chapter6でトンネルを張った相手とBGPのピアリングを行ない、相手のr1に対してpingが通るように設定してみよう
INFO
トンネリングしたのは eBGP の TTL が 1 であるためです。
WARNING
BGP は経路情報の交換に TCP の 179 番ポートを使用するので、ポートが開放されているか注意してください。
ヒント1
IP トンネリングと同様、お互いに設定する必要があります。 (経路を一方的に広告したい場合は自分側が開いてなくても問題有りません。)
ヒント2
相手のグローバル IP と AS 番号が必要です。
ヒント3
自分のネットワーク内から広告したい範囲を指定する必要があります。
答え
[rEX]
root@150-95-184-195:~# attach rEX
vyos@rEX:/$ config
[edit]
vyos@rEX# edit protocols bgp <自分のAS番号> ;
vyos@rEX# set parameters router-id <自分のグローバルIP>
vyos@rEX# set neighbor <相手のグローバルIP> remote-as <相手のAS番号>
vyos@rEX# set network <広告したいネットワークの範囲> ;自分から見えるルーティングテーブルの範囲に存在しなければならない。
vyos@rEX# commit
vyos@rEX# save
[edit]
vyos@rEX# exit
exit
ルーティングテーブルは以下のコマンドで確認可能です。
vyos@rEX:/$ show ip route
BGP セッションの状態は以下のコマンドで確認可能です。
vyos@rEX# show ip bgp summary
BGPの状態 | 説明 |
---|---|
Idle | BGPの設定直後の状態。BGPネイバーへのIP到達性があればTCP接続を開始する状態。BGPネイバーへのIP到達性があれば「Connect」状態へ遷移する。 |
Connect | TCP接続の完了を待っている状態。TCP接続が成功した場合はOPENメッセージを送信して「OPEN Sent」状態へ遷移する。TCP接続が失敗した場合は「Active」状態へ遷移。 |
Active | TCP接続を試行している状態。ネイバーのIPアドレス、AS番号、認証パスワードの設定ミスがある場合、Active状態のままとなるか「idle→Active→idle」という状態を繰り返す。 |
Open Sent | OPENメッセージを送信し、BGPネイバーからのOPENメッセージ確認を待っている状態。OPENメッセージが受理できる場合、KEEPALIVEメッセージの送信を開始して、OPENConfirm状態に遷移。受理できない場合は、NOTIFICATIONを送信してidle状態へ遷移。 |
Open Confirm | KEEPALIVEメッセージ、または、NOTIFICATIONメッセージを待っている状態。KEEPALIVEを受信すれば「Established」状態へ遷移(BGPネイバー確立の成功) AS番号の不一致などによってNOTIFICATIONを受信した場合は「idle」状態へ遷移。 |
Established | BGPネイバーが正常に確立している状態。この状態の後、UPDATEメッセージを交換できBGPテーブルやルーティングテーブルが生成される。この「Established」状態になってもNOTIFICATIONメッセージを受信した場合には「idle」状態へ遷移する。 |
2. HTTPサーバーを立ててみよう
s1~3 のどれかで何らかの HTTP サーバーをポート80で起動し、{サーバーのIPアドレス} server.{あなたのtraQ ID}
と言う形式で共有してください。(個人でやる場合には互いのサーバーに IP アドレスとドメイン名の対応が反映されていれば問題ありません。) 共有されている IP アドレスとドメイン名の対応を/etc/hosts
に反映し、curl
コマンドで実際にアクセス出来ることを確かめてください。
INFO
DNS 以外に/etc/hosts
を参照することでも、ドメイン名から IP アドレスを引くことができます。
ヒント
python -m
やphp -s
などが簡単です。
答え
[s1]
root@s1:~# echo "Success!" > index.html
root@s1:~# python3 -m http.server 80
[例: r1]
vyos@rEX:/$ curl http://server.{traQ ID}
Success!