Azure ExpressRouteとBGPプロトコルを徹底解説!ルート広報の仕組みとルーティング設計の基本
生徒
「会社のネットワークとAzureを専用線でつなぎたいのですが、ExpressRoute(エクスプレスルート)って何が凄いんですか?」
先生
「ExpressRouteは、インターネットを通らずに直接Azureとつなぐ専用線接続サービスです。安定した通信速度と高いセキュリティが特徴ですね。」
生徒
「設定でBGP(ビージーピー)という言葉が出てきたのですが、これは何ですか?」
先生
「BGPは、どの道を通ってデータを届けるか決めるための「経路情報の交換ルール」のことです。これがないと、Azureと社内ネットワークはお互いの場所がわかりません。」
生徒
「なるほど!ルート広報(こうほう)やルーティング設計についても詳しく知りたいです!」
先生
「それでは、初心者の方にも分かりやすく、ExpressRouteとBGPの仕組みを紐解いていきましょう!」
1. Azure ExpressRouteの概要と専用線のメリット
Azure ExpressRoute(アジュール・エクスプレスルート)とは、Microsoft(マイクロソフト)が提供するクラウド接続サービスです。通常、クラウドへの接続にはインターネットを使いますが、ExpressRouteは閉域網(へいいきもう)と呼ばれる、自分たちだけの専用の通り道を使います。
このサービスの最大のメリットは、インターネットの混雑に左右されない「一貫したネットワークパフォーマンス」です。また、公共のインターネットを通らないため、データの盗聴リスクが極めて低く、金融機関や官公庁などの高いセキュリティが求められる環境で重宝されています。接続場所となるエッジルーターを介して、企業のオンプレミス環境とAzureのデータセンターを物理的に接続するイメージです。
2. BGP(Border Gateway Protocol)とは何か?
BGP(ボーダー・ゲートウェイ・プロトコル)は、インターネット上のルーター同士が「私の後ろにはこのIPアドレスのグループ(ネットワーク)がありますよ」と教え合うためのプロトコルです。これをルート広報(こうほう)と呼びます。
ExpressRouteにおいてBGPが必須な理由は、Azure側のネットワーク(仮想ネットワーク:VNet)と、会社側のネットワークが、お互いにどのIPアドレス範囲(CIDR:サイダー)を持っているかを動的に伝える必要があるからです。静的ルーティング(手動設定)でも繋げなくはないですが、クラウドのように頻繁にネットワークが変わる環境では、自動で経路を更新してくれるBGPが非常に効率的なのです。
ここで、BGPの設定に関連する簡単な設定値の例をJSON形式のイメージで見てみましょう。これはAzureのゲートウェイ設定を模したものです。
// BGP設定の構成イメージ(概念的なパラメータ定義)
var bgpConfig = new
{
Asn = 65515, // 自律システム番号
PeeringAddress = "169.254.0.1", // BGPピアリング用IP
PeerWeight = 100 // 経路の優先度
};
Console.WriteLine($"BGP ASN: {bgpConfig.Asn} で接続を開始します。");
3. ルート広報の仕組みとAS番号の役割
ルート広報(ルートアドバタイズ)とは、自分の知っているネットワーク経路を隣のルーターに宣伝することです。この時、重要になるのがAS番号(Autonomous System Number:自律システム番号)です。世界中のネットワークは「AS」という単位で管理されており、それぞれ固有の番号を持っています。
ExpressRouteでは、Azure側は通常「12076」という番号を使いますが、お客様側のオンプレミス側にも任意の番号を割り当てる必要があります。BGPはこのAS番号をバトンのように渡していくことで、データの通り道を記録します。これをASパスと呼び、最も短いパスが最適なルートとして選ばれる仕組みになっています。
ルーティングテーブルの状況を確認する際のイメージコード(疑似コマンド実行)を以下に示します。
show ip bgp summary
BGP router identifier 10.0.0.1, local AS number 65001
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
192.168.1.1 4 12076 150 160 45 0 0 01:22:10 5
4. ExpressRouteの接続回線(サーキット)とピアリング
ExpressRouteを契約すると、「サーキット」と呼ばれる論理的な接続回線が作成されます。一つのサーキットの中には、主に2種類の接続方式(ピアリング)が存在します。
- Azure Private Peering(プライベートピアリング):社内LANとAzure上の仮想ネットワークを接続するために使います。社内PCからAzure上の仮想マシン(VM)へアクセスする際に利用します。
- Microsoft Peering(マイクロソフトピアリング):Microsoft 365(旧Office 365)やAzureのストレージ(Blob)などのパブリックサービスに専用線でアクセスするために使います。
これらを正しく設計しないと、せっかく専用線を引いたのに通信がインターネットに漏れてしまうといったトラブルが発生します。設計時には、通信先がプライベートIPなのかパブリックIPなのかを明確に区別することが大切です。
5. ルーティング設計における優先順位の決定
複数の拠点からAzureに接続する場合や、VPNとExpressRouteを併用してバックアップ構成にする場合、どちらのルートを優先するかを決める「ルーティング設計」が非常に重要になります。BGPには、優先度を制御するための「属性」という仕組みがあります。
例えば、Local Preference(ローカルプリファレンス)やAS Path Prepending(ASパスプリペンディング)という手法を使います。ASパスプリペンディングは、わざと自分のAS番号を複数並べて「この道は遠いよ!」と嘘の宣伝をすることで、他のルートへ誘導するテクニックです。
ルーティング設定で優先度を処理するロジックを簡単なC#コードで表現すると以下のようになります。
string bestRoute;
int expressRouteCost = 10;
int vpnBackupCost = 50;
// コストが低い方を優先ルートとして選択するロジック
if (expressRouteCost < vpnBackupCost)
{
bestRoute = "ExpressRouteをメイン経路として使用します。";
}
else
{
bestRoute = "VPNをメイン経路として使用します。";
}
Console.WriteLine(bestRoute);
6. 重複するネットワークとルートフィルタリング
設計でよくある失敗が、オンプレミスとAzureで使っているIPアドレス範囲が重なってしまう(重複する)ことです。IPアドレスが重なると、ルーターはどちらにデータを送ればいいか迷子になってしまいます。これを防ぐために、あらかじめIPアドレス設計(サイジング)をしっかり行い、必要なルートだけを通すルートフィルタリングを設定します。
特にMicrosoft Peeringでは、全世界のMicrosoftの経路が流れてくるため、自分に関係のない経路を遮断しないと、ルーターのメモリがいっぱいになってパンクしてしまう恐れがあります。BGPコミュニティというタグ機能を使って、必要な地域やサービスの経路だけを抽出するのが一般的です。
ルート情報の管理状況をデータベースで管理する想定のデータ例と、抽出クエリを以下に示します。
id | prefix | community | description
---+-----------------+-------------+-------------------
1 | 10.0.0.0/16 | 12076:5010 | Azure VNet Tokyo
2 | 10.1.0.0/16 | 12076:5010 | Azure VNet Osaka
3 | 13.64.0.0/16 | 12076:5030 | Microsoft 365
4 | 192.168.1.0/24 | Local | On-premise Office
-- 東京リージョンのルート情報だけを抽出する
SELECT prefix, description
FROM routes
WHERE community = '12076:5010';
prefix | description
----------------+-------------------
10.0.0.0/16 | Azure VNet Tokyo
10.1.0.0/16 | Azure VNet Osaka
7. 双方向のルート伝播を理解する
BGPの通信は一方通行ではありません。オンプレミスのルーターがAzureに経路を教えるだけでなく、Azure側の「仮想ネットワークゲートウェイ」も、自分が管理しているVNetの情報をオンプレミスに教えます。これにより、行きも帰りも正しい道を通ることができます。
これを双方向のルート伝播(でんぱ)といいます。もし、帰りのルート(Azureからオンプレミス)が正しく広報されていないと、リクエストは届くのに返事が返ってこない「片通じ」の状態になります。トラブルシューティングの際は、まずAzureポータルの「ルートテーブル」を確認し、オンプレミスのIPアドレスが表示されているかチェックするのが鉄則です。
8. ExpressRoute接続を維持するための死活監視
専用線といえども、物理的な断線やルーターの故障リスクはゼロではありません。そのため、BGPのセッションが維持されているかを常に監視する必要があります。BGPには「キープアライブ」というパケットがあり、定期的にお互いが生きているか確認しています。これが途切れると「BGPダウン」となり、通信が止まります。
モダンな運用では、Azure Monitor(アジュール・モニター)などの監視ツールを使って、BGPの状態をグラフ化し、異常があればすぐにアラートを飛ばす仕組みを構築します。可用性を高めるためには、同じ場所から2本の回線を引く「冗長化(じょうじょうか)」構成が標準となっています。
監視ログを解析する簡単なプログラムの例です。
string bgpStatus = "Down"; // 監視システムから取得したステータス
switch (bgpStatus)
{
case "Established":
Console.WriteLine("BGPセッションは正常です。安定稼働中。");
break;
case "Idle":
case "Active":
Console.WriteLine("警告:BGPセッションが確立されていません。接続を確認してください。");
break;
default:
Console.WriteLine("不明なステータスです。ログを詳細調査してください。");
break;
}
9. ルーティング設計のベストプラクティス
最後に、ExpressRoute導入時のルーティング設計で押さえておくべきポイントを整理します。
第一に、アドレス設計の余白です。将来的にVNetが増えたり、拠点が追加されたりすることを想定し、狭すぎるIP範囲を指定しないようにしましょう。第二に、優先順位の明確化です。メイン回線とバックアップ回線の切り替わりタイミングをBGP属性で制御し、意図しない経路変更(フラッピング)が起きないように設計します。
これらの基本を押さえることで、安定したハイブリッドクラウド環境を実現できます。ネットワークの知識は一見難しそうに見えますが、一つ一つのパズルのピースを組み合わせるようなものです。BGPとExpressRouteの仕組みを理解して、強固なインフラ基盤を作り上げましょう!
まとめ
Azure ExpressRouteとBGPプロトコルについて、その基礎からルーティング設計の実践的なポイントまで詳しく解説してきました。専用線接続は、単に「線を繋ぐ」だけではなく、BGPという共通のルール(プロトコル)を用いて、お互いのネットワーク情報を正しく交換することで初めて通信が可能になります。
ExpressRouteを導入する最大の理由は、インターネットの不安定さを排除し、専用の閉域網による高い信頼性と低遅延を実現することにあります。特に、金融機関や大規模な基幹システムをクラウドへ移行する際には、この安定性がビジネスの根幹を支える要素となります。
BGP(Border Gateway Protocol)は、動的にルート情報を広報するため、ネットワーク構成に変更があった際も柔軟に対応できるのが強みです。AS番号の管理や、ASパスプリペンディングによる経路制御、Local Preferenceの設定など、BGPの属性を正しく理解し、設計に組み込むことで、意図した通りのトラフィックフローを構築できます。
また、冗長化設計やルートフィルタリングも欠かせない要素です。物理的な障害に備えて複数の回線を確保し、BGPセッションを維持することで、24時間365日の安定稼働を目指します。Microsoft Peeringを利用する場合は、必要なルートだけを受け取るようにフィルタリングを行い、ルーターの負荷を適切に管理することが重要です。
インフラ設計は、将来的な拡張性を見据えたIPアドレスの採番(サイジング)から始まります。オンプレミスとAzure側でネットワーク範囲が重複しないよう、事前のプランニングを徹底しましょう。これら一連の知識を習得することで、セキュアで強固なハイブリッドクラウド環境の構築が可能になります。
BGP設定情報の管理サンプル
実際の運用現場では、接続先拠点ごとのBGP設定(AS番号やピアリングIP)をデータベース等で一元管理することがよくあります。以下に、管理テーブルのデータ例と、特定の拠点の情報を抽出するSQLプログラムの例を示します。
id | site_name | local_asn | peer_ip | circuit_status
---+--------------+-----------+--------------+---------------
1 | Tokyo_Office | 65001 | 10.255.0.1 | Active
2 | Osaka_Branch | 65002 | 10.255.0.5 | Active
3 | Nagoya_Lab | 65003 | 10.255.0.9 | Maintenance
4 | Fukuoka_DC | 65004 | 10.255.0.13 | Provisioning
5 | Sapporo_Sub | 65005 | 10.255.0.17 | Active
-- 現在稼働中(Active)の拠点のBGP接続情報を取得する
SELECT site_name, local_asn, peer_ip
FROM bgp_configs
WHERE circuit_status = 'Active';
site_name | local_asn | peer_ip
-------------+-----------+--------------
Tokyo_Office | 65001 | 10.255.0.1
Osaka_Branch | 65002 | 10.255.0.5
Sapporo_Sub | 65005 | 10.255.0.17
BGP経路情報の監視ロジック例
次に、取得したBGPの状態を判定し、管理者に通知を送るための簡単なC#プログラムの例を紹介します。
using System;
public class BgpMonitor
{
public static void Main()
{
// 監視対象のステータスリスト
string[] neighborStatuses = { "Established", "Idle", "Active", "Established" };
string[] neighborNames = { "Router-A", "Router-B", "Router-C", "Router-D" };
for (int i = 0; i < neighborStatuses.Length; i++)
{
Console.WriteLine($"拠点の確認中: {neighborNames[i]}");
if (neighborStatuses[i] == "Established")
{
Console.WriteLine($" <i class='bi bi-check-circle-fill'></i> 正常: {neighborNames[i]} のBGP接続は確立されています。");
}
else
{
Console.WriteLine($" <i class='bi bi-exclamation-triangle-fill'></i> 警告: {neighborNames[i]} の接続が不安定です。現在の状態: {neighborStatuses[i]}");
}
}
}
}
拠点の確認中: Router-A
正常: Router-A のBGP接続は確立されています。
拠点の確認中: Router-B
警告: Router-B の接続が不安定です。現在の状態: Idle
拠点の確認中: Router-C
警告: Router-C の接続が不安定です。現在の状態: Active
拠点の確認中: Router-D
正常: Router-D のBGP接続は確立されています。
生徒
「先生、まとめまで読んでExpressRouteとBGPの繋がりがすごくよく分かりました!つまり、専用線という物理的な土台の上に、BGPという情報のやり取りをする仕組みが乗っかっているんですね。」
先生
「その通りです!物理的な接続(レイヤー1・2)が正しくても、BGPの設定(レイヤー3)が間違っていると通信は成立しません。パズルのピースがしっかり噛み合う必要があるんです。」
生徒
「AS番号やルート広報という言葉も、最初は難しく感じましたが、自分の住所を相手に教える「自己紹介」のようなものだと考えるとイメージしやすかったです。」
先生
「良い例えですね。特に行きと帰りの両方のルートを教え合う「双方向の伝播」を意識することが、トラブルを防ぐ最大のポイントです。」
生徒
「あと、C#のコード例を見て、ステータスを監視して「Established」になっているかチェックする仕組みも理解できました。実際にシステムを組むときのイメージが湧きます!」
先生
「それは良かったです。ネットワークは目に見えないので、プログラムで状態を可視化(監視)することが非常に大切です。これからもAzureのネットワーク設計、頑張っていきましょう!」
生徒
「はい!ありがとうございました!」