Skip to content

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

OSPFBGP
ゲートウェイプロトコル内部ゲートウェイプロトコル外部ゲートウェイプロトコル
実装簡単繁雑
収束速い遅い
設計階層ネットワークが可能メッシュ
方式距離ベクトル型経路ベクトル型
デバイスリソースの必要性大量のメモリとCPUルーティングテーブルのサイズに依存しますが、BGPはスケーリングに優れています。
ネットワークのサイズ一元的に管理できる主に小規模なネットワークで使用されます。主にインターネットなどの大規模ネットワークで使用されます。
機能最速ルートが最短ルートよりも優先されます。定めたポリシーに合致する最適なパスが決定されます。
使用されるアルゴリズムダイクストラアルゴリズム最適パスアルゴリズム
プロトコルIPTCP

Autonomous System

AS とは、「単一」の「明確に定義された」ルーティングポリシーを持つ 1 つまたは複数のネットワーク運営組織が運営する、相互に接続された 1 つまたは複数の IP プレフィックスのグループです。

BGP では、インターネット上での各 AS を識別するために 16bit の AS 番号と呼ばれる識別子を割り当てています。(32bit の 4byte AS number の仕様策定も進んでいる)

経路情報はより多くのプロバイダと接続しているプロバイダに集まり、トランジット接続により下位のプロバイダから上位のプロバイダへと経路情報が収束されていきます。 インターネット全体におけるプロバイダのつながりは階層化された木構造になっていて、ツリーの最上位にあるプロバイダにはインターネット全体の経路情報が集まります。 このようにフルルートを他のプロバイダに依存することなく得られるプロバイダは Tier1 に位置づけられ、現在以下の 15 のプロバイダが Tier1 として認識されています。

NameAS numberCAIDA AS rank
AT&T701824
Deutsche Telekom Global Carrier332025
GTT Communications32577
Liberty Global683029
Lumen Technologies33561
NTT Communications29144
Orange551113
PCCW Global349110
T-Mobile US123922
Tata Communications64538
Telecom Italia Sparkle67625
Arelion (formerly Telia Carrier)12992
Telxius1295616
Verizon Enterprise Solutions70121
Zayo Group64619

他にも、
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]

sh
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

ルーティングテーブルは以下のコマンドで確認可能です。

sh
vyos@rEX:/$ show ip route

BGP セッションの状態は以下のコマンドで確認可能です。

sh
vyos@rEX# show ip bgp summary
BGPの状態説明
IdleBGPの設定直後の状態。BGPネイバーへのIP到達性があればTCP接続を開始する状態。BGPネイバーへのIP到達性があれば「Connect」状態へ遷移する。
ConnectTCP接続の完了を待っている状態。TCP接続が成功した場合はOPENメッセージを送信して「OPEN Sent」状態へ遷移する。TCP接続が失敗した場合は「Active」状態へ遷移。
ActiveTCP接続を試行している状態。ネイバーのIPアドレス、AS番号、認証パスワードの設定ミスがある場合、Active状態のままとなるか「idle→Active→idle」という状態を繰り返す。
Open SentOPENメッセージを送信し、BGPネイバーからのOPENメッセージ確認を待っている状態。OPENメッセージが受理できる場合、KEEPALIVEメッセージの送信を開始して、OPENConfirm状態に遷移。受理できない場合は、NOTIFICATIONを送信してidle状態へ遷移。
Open ConfirmKEEPALIVEメッセージ、または、NOTIFICATIONメッセージを待っている状態。KEEPALIVEを受信すれば「Established」状態へ遷移(BGPネイバー確立の成功) AS番号の不一致などによってNOTIFICATIONを受信した場合は「idle」状態へ遷移。
EstablishedBGPネイバーが正常に確立している状態。この状態の後、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 -mphp -sなどが簡単です。

答え

[s1]

sh
root@s1:~# echo "Success!" > index.html
root@s1:~# python3 -m http.server 80

[例: r1]

sh
vyos@rEX:/$ curl http://server.{traQ ID}
Success!