読む前にこの記事のポイントを音声で確認できます。この音声は本記事をもとにAIツール(NotebookLM)で自動生成したもので、発音や言い回しが不自然な箇所や、内容の誤りが含まれる可能性があります。理解の補助としてご利用ください。
BGPはインターネットを支えるルーティングプロトコルですが、OSPFやEIGRPとは考え方がかなり違うので、最初はとっつきにくく感じるかもしれません。この記事では、大阪から東京への旅行にたとえながら、BGPの基本となる考え方を順に整理します。
- BGPの役割と、AS・AS番号の考え方
- ネクストホップとIGPの関係、トランジット、eBGPとiBGPの違い
- AS_PATHを使った経路選択とループ防止(パスベクター型)
BGPとは?
BGP(Border Gateway Protocol)は、AS(自律システム)同士が経路情報を交換するためのプロトコルです。OSPFやEIGRPが組織の中の経路を決めるのに対し、BGPは組織と組織の間、つまりインターネット全体の経路を扱います。インターネット全体の「交通整理」役と考えるとイメージしやすいと思います。
標準はRFC 4271で定められていて、主に次のような特徴があります。
| 特徴 | 内容 |
|---|---|
| 信頼性 | TCPのポート179でセッションを張り、経路情報を確実に届けます。AS_PATHという情報で経路のループも防ぎます。 |
| 拡張性 | 大量の経路を扱えます。インターネットのフルルートはIPv4だけでも非常に多く、記事執筆時点で80万を超えていました(年々増えています)。 |
| 柔軟性 | パス属性を使って、組織ごとに異なるポリシーで経路を選べます。 |
| 安定性 | 頻繁に上下する経路(フラップ)を一時的に使わないようにする機能(ダンプニング)も用意されています。 |
AS番号とは?
AS(Autonomous System)は、1つの組織が同じ方針で運用しているネットワークのまとまりです。ISPや大きな企業、データセンター事業者などが、それぞれ1つ以上のASを持っています。AS番号は、そのまとまりを識別するための番号で、ネットワークの「住所」のようなものです。
ASの中ではOSPFやEIGRPなどのIGP(内部ゲートウェイプロトコル)で経路を決め、AS同士の間ではBGPで経路を交換します。
AS番号は、IANAが地域インターネットレジストリ(日本ではAPNIC/JPNIC)に番号の範囲を割り振り、そこから各組織に割り当てられます。もともとは16ビット(2バイト)でしたが、番号が足りなくなったため、現在は32ビット(4バイト)のAS番号も使われています。
| 範囲 | 用途 |
|---|---|
| 1〜64495 | グローバルAS番号(2バイト)。インターネットで使います。 |
| 64512〜65534 | プライベートAS番号(2バイト)。組織内や検証環境で使います。 |
| 65536〜 | 4バイトAS番号。主にグローバル用です。 |
| 4200000000〜4294967294 | プライベートAS番号(4バイト)。 |
上の表に含まれない番号(0、64496〜64511、65535 など)は、ドキュメント用や予約済みとして決められていて、通常の運用では使いません。
ASのイメージ
ここからは、ASの考え方を旅行にたとえて見ていきます。都道府県を1つのASと考えて、大阪=AS1、東京=AS2、名古屋=AS3 とします。この記事の後半でも、この番号のまま説明します。
旅行の例でASを理解する
大阪の通天閣から東京のスカイツリーへ行くとします。移動手段は新幹線と飛行機の2つです。
| ルート | 通る都道府県(AS) | 大阪から見た経由AS |
|---|---|---|
| 新幹線 | 大阪 → 名古屋 → 東京 | AS3、AS2 の2つ |
| 飛行機 | 大阪 → 東京 | AS2 の1つ |
BGPは、ほかの条件が同じであれば、通るASの数が少ない経路を選びます。この例では飛行機ルートが選ばれます。
ネクストホップとIGPの関係
飛行機ルートを選んだ場合、通天閣から東京へ向かう最初の行き先(ネクストホップ)は関西空港です。BGPが教えてくれるのは「東京へ行くなら関西空港へ向かえ」という情報までです。
通天閣から関西空港までの移動は、大阪の中(AS内)の話なので、BGPではなくIGP(OSPFやEIGRPなど)が経路を決めます。ネットワークで言えば、BGPで学習した経路のネクストホップに、IGPの経路を使ってたどり着く、という関係です。ネクストホップにIGPで到達できなければ、BGPの経路があっても使えません。
東京到着後の移動
東京に着いてからも同じです。羽田空港からスカイツリーまで、どの路線を使うかは東京の中(AS2の中)で決まることで、大阪のルータはその中身を知りません。BGPが扱うのは、どのASを通っていくかまでです。
トランジットの概念
トランジットは、あるASが別のAS同士の通信を中継することです。インターネットでは、直接つながっていないAS同士がたくさんあり、その間を中継してくれるASがあるおかげで、世界中のネットワークに届きます。
トランジットの具体例
大阪(AS1)から名古屋(AS3)のテレビ塔へ行くとします。普段は新幹線で名古屋へ直接行けますが、大阪と名古屋の間が通れない場合は、東京(AS2)を経由して名古屋へ向かうことになります。このとき東京(AS2)が、大阪から名古屋への移動を中継するトランジットASです。
トランジットの役割
| 役割 | 内容 |
|---|---|
| 経路の広告 | トランジットASは、自分の先にあるASの経路を隣のASへ伝えます。例では東京(AS2)が大阪(AS1)に「名古屋(AS3)へは自分を経由して届く」と広告します。 |
| データの中継 | 受け取ったデータを、次のASへ転送します。インターネットの通信の多くは、どこかのトランジットASを通っています。 |
| 経路の選択 | 通るASが少ない経路が基本ですが、コストや契約などの事情で、管理者が別の経路を選ばせることもあります(後述のポリシー)。 |
外部BGPと内部BGP
異なるAS同士(例:大阪と東京)のBGPを外部BGP(eBGP)、同じAS内のルータ同士(例:東京の中の東京と羽田空港)のBGPを内部BGP(iBGP)と呼びます。iBGPは、eBGPで受け取った経路を、AS内の他のBGPルータに配るために使います。
| 項目 | eBGP | iBGP |
|---|---|---|
| ピアの関係 | 異なるAS同士 | 同じAS内のルータ同士 |
| AS_PATH | 広告するときに自分のAS番号を追加する | 追加しない |
| 学習した経路の扱い | 他のピアへ広告する | iBGPで学習した経路は、別のiBGPピアへは広告しない(フルメッシュかルートリフレクタが必要) |
| アドミニストレーティブディスタンス(Cisco) | 20 | 200 |
iBGPの設定と動作確認は 内部BGP(iBGP)の記事 で詳しく扱っています。
パスベクター型プロトコルとは?
BGPは「パスベクター型」のプロトコルです。RIPやEIGRPのような距離ベクター型が「宛先までの距離(メトリック)と方向」で経路を選ぶのに対し、パスベクター型は「宛先までに通るASのリスト」を経路情報として持ちます。このリストがAS_PATHです。
| 種類 | 経路情報として持つもの | 例 |
|---|---|---|
| 距離ベクター型 | 宛先までの距離(メトリック)と、次に渡す方向 | RIP、EIGRP(拡張型) |
| パスベクター型 | 宛先までに通るASのリスト(AS_PATH) | BGP |
経路情報とパスベクターの例
旅行の例をAS_PATHに置き換えると、大阪(AS1)から見た東京(AS2)への経路は次のようになります。
- 新幹線ルート:AS_PATH = 3 2(名古屋、東京の順に通る)
- 飛行機ルート:AS_PATH = 2(東京へ直接)
AS_PATHが短い飛行機ルートが、ベストパスとして選ばれます。これをルータで確認したのが次の構成です。AS2のR2が持つ 2.2.2.2/32 を、AS1のR1がどう学習するかを見ます。
R1から見ると、2.2.2.2/32 の経路は2つあります。
- R5経由:AS1 → AS3 → AS2(AS_PATH = 3 2)
- R3経由:AS1 → AS2(AS_PATH = 2)
R1#show ip bgp
BGP table version is 1, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
* i 2.2.2.2/32 192.168.15.5 0 100 0 3 2 i
*>i 192.168.13.3 0 100 0 2 i
| 表示 | 意味 |
|---|---|
| * i / *>i | * は有効な経路、> はベストパス、i はiBGPで学習した経路です。R1はAS1の中のR5・R3からiBGPで受け取っています。 |
| Next Hop | この経路へ転送する先のアドレス。R5経由は 192.168.15.5、R3経由は 192.168.13.3 です。 |
| Weight / LocPrf | どちらの経路も Weight 0、LocPrf 100 で同じ値です。 |
| Path | AS_PATHと末尾のOrigin。3 2 i はAS3、AS2の順に通る経路、2 i はAS2へ直接の経路です。 |
WeightとLocPrfが同じなので、次に比べるAS_PATHの長さで決まり、短い 2 i(R3経由)がベストパス(>)になっています。
AS_PATHを利用したループ防止
BGPルータは、受け取った経路のAS_PATHに自分のAS番号が含まれていたら、その経路を受け入れません。自分のASを一度通ってきた経路なので、受け入れると経路がループしてしまうためです。
例えば、AS1が広告した経路が AS2、AS3 と伝わって再びAS1に戻ってくると、そのAS_PATHは「3 2 1」となり、自分の番号(1)が入っています。AS1のルータはこれを見て、ループしている経路だと判断して捨てます。
パスベクター型の他の特徴:経路選択の柔軟性
BGPはAS_PATHの長さだけで経路を決めるわけではありません。複数の属性を決まった順番で比べ、管理者はその属性を設定で変えることで、AS_PATHが長い経路をあえて優先させることもできます。旅行にたとえると、飛行機が混んでいるときは新幹線を選ぶ、という判断を設定で決められるイメージです。
Ciscoルータでは、主に次の順番で比べます(上から順に比べ、差が出たところで決まります)。
| 順番 | 比べる属性 | 優先されるもの |
|---|---|---|
| 1 | Weight(Cisco独自) | 大きい方 |
| 2 | LOCAL_PREF | 大きい方 |
| 3 | 経路の生成元 | 自分で生成した経路 |
| 4 | AS_PATHの長さ | 短い方 |
| 5 | Origin | IGP(i)、EGP(e)、incomplete(?)の順 |
| 6 | MED | 小さい方 |
| 7 | eBGP / iBGP | eBGPで学習した経路 |
| 8 | ネクストホップまでのIGPメトリック | 小さい方 |
8番目以降も、経路の古さやルータIDなどで比べる手順が続きます。AS_PATHを意図的に長くして相手に経路を選ばせにくくする「AS_PATHプリペンド」や、LOCAL_PREFで自AS内の出口を決める設定が、ポリシーによる経路制御の代表例です。
まとめ
| 用語 | ポイント |
|---|---|
| BGP | AS同士が経路を交換するプロトコル。TCP 179でセッションを張る |
| AS / AS番号 | 同じ方針で運用されるネットワークのまとまりと、その識別番号。2バイトと4バイトがある |
| ネクストホップとIGP | BGPが示すのはAS間の経路とネクストホップまで。そこへの到達はIGPが担う |
| トランジット | 他のAS同士の通信を中継すること |
| eBGP / iBGP | AS間のBGPと、AS内のBGP |
| AS_PATH | 経路が通るASのリスト。経路選択とループ防止に使う |
コメント