Azure ExpressRouteの高可用性構成を完全解説!冗長化とVPNバックアップの構築手法
生徒
「会社のネットワークとAzureを専用線でつなぐExpressRoute(エクスプレスルート)を導入したいのですが、もし回線が切れたら仕事が止まってしまいませんか?」
先生
「非常に重要な視点ですね。クラウド活用において、通信の安定性は命綱です。ExpressRouteには標準で備わっている冗長化(じょうちょうか)の仕組みや、さらに信頼性を高めるVPNバックアップという構成があります。」
生徒
「冗長化...難しそうな言葉ですね。具体的にどうやって二重化して守るのか教えてください!」
先生
「はい!物理的な故障や災害に備えた高可用性(こうかようせい)の構築手法を、初心者の方にもわかりやすく解説していきますね。」
1. Azure ExpressRouteとは?専用線の基本を知ろう
Azure ExpressRoute(アジュール・エクスプレスルート)とは、インターネットを経由せずに、お客様のオンプレミス(自社所有の設備)環境とMicrosoftのクラウドサービスを直接つなぐ専用線接続サービスのことです。一般的なインターネット接続に比べて、低遅延(ていちえん)で安定した通信が可能になり、セキュリティも非常に高いのが特徴です。
しかし、どんなに優れた専用線でも、物理的なケーブルの断線や、接続機器の故障といったリスクはゼロではありません。そこで必要になるのが、システムを止めないための工夫である「高可用性(こうかようせい)」の設計です。これは、一部が壊れても予備のルートで通信を継続できる状態を指します。
2. ExpressRouteの標準冗長化(プライマリとセカンダリ)
実は、ExpressRouteを契約すると、標準で2本の接続(回路)が提供されます。これを「プライマリ(主系統)」と「セカンダリ(副系統)」と呼びます。Microsoft側では、この2本の回線を別々のルーター(MSEE:Microsoft Enterprise Edge)に収容することで、片方の機器がメンテナンスや故障で停止しても、もう一方で通信ができるようになっています。
この仕組みを活かすには、ユーザー側のルーターも2台用意し、それぞれに接続するのが理想的です。これを「冗長化(じょうちょうか)」と呼び、システムに余裕を持たせる手法として一般的です。まずは、ルーターの設定を確認するための簡単なPythonスクリプト例を見てみましょう。ネットワーク機器のステータスをチェックするイメージです。
# ルーターの接続状態を確認するシミュレーションプログラム
def check_connection(status):
if status == "Active":
print("接続は正常です。専用線通信を利用中。")
elif status == "Standby":
print("予備回線が待機中です。")
else:
print("警告:回線に異常があります!")
# プライマリ回線の状態を確認
check_connection("Active")
3. サイト間VPNによるバックアップ構成のメリット
ExpressRouteの2本の回線が同時に使えなくなるような、大規模な災害や広域な通信障害に備える方法があります。それが「サイト間VPN(ブイピーエヌ)バックアップ」です。これは、普段は高速な専用線(ExpressRoute)を使い、万が一専用線が全滅した時には、予備ルートとしてインターネットを通るVPNに自動で切り替える仕組みです。
この構成の最大のメリットは、コストを抑えつつ三段構えの守りを固められる点です。2つ目のExpressRouteを引くのは高額ですが、VPNなら比較的安価に構築できます。以下に、VPN接続設定のパラメータを管理するJSONデータの例を示します。
{
"connectionName": "S2S-VPN-Backup",
"gatewayType": "Vpn",
"vpnType": "RouteBased",
"enableBgp": true,
"sharedKey": "YourComplexSharedKey123"
}
4. BGPプロトコルによるルート制御の仕組み
専用線とVPNの切り替えを人間が手動で行うのは大変です。そこで「BGP(ボーダー・ゲートウェイ・プロトコル)」という仕組みを使います。BGPは、どの道が一番近くて速いかをルーター同士が教え合う合唱のようなものです。
ExpressRouteとVPNの両方が生きている場合、ルーターは「専用線の方が速いからこっちを通ろう」と判断します。専用線が切れると、BGPが「専用線の道がなくなったから、次はVPNの道を使おう」と自動でルートを書き換えてくれます。このように、賢い自動切り替えを実現するのがBGPの役割です。ここでは、ルーティング情報の優先度を整理するSQLの例を見てみましょう。
id | route_type | priority | description
---+--------------+----------+-------------------
1 | ExpressRoute | 100 | メインの高速専用線
2 | SiteToSiteVPN| 200 | 予備のバックアップ
3 | PublicNet | 999 | 最終手段(非推奨)
このデータを元に、優先度の高いルートを取得するSQLは以下のようになります。
SELECT route_type
FROM network_routes
WHERE priority = (SELECT MIN(priority) FROM network_routes)
ORDER BY id ASC;
route_type
----------
ExpressRoute
5. ゲートウェイサブネットの作成と注意点
Azure内でこれらを構築するには、Virtual Network(仮想ネットワーク)の中に「GatewaySubnet(ゲートウェイ・サブネット)」という特別なエリアを作る必要があります。このサブネットには、ExpressRoute用とVPN用の2つの仮想ネットワークゲートウェイを配置します。
注意点として、GatewaySubnetのサイズは「/27」や「/26」といった少し余裕のある大きさに設定することが推奨されています。将来的にVPNとExpressRouteを併用する場合、アドレスが足りなくなると再構築が必要になるからです。インフラエンジニアは、こうした初期設計に一番気を遣います。
6. ゾーン冗長ゲートウェイでさらに高める信頼性
Azureには「アベイラビリティ・ゾーン(AZ)」という概念があります。これは、同じ地域(リージョン)内でも、物理的に場所が離れたデータセンターのまとまりのことです。最新の構築手法では、ゲートウェイ自体を複数のゾーンに分散させる「ゾーン冗長ゲートウェイ」を選択します。
これにより、一つのデータセンターが火災や停電でダウンしても、別のゾーンにあるゲートウェイが処理を引き継ぐため、さらに高い可用性が実現します。可用性(アベイラビリティ)を高めることは、ビジネスの継続性(BCP対策)に直結します。ここで、サーバーの稼働時間を計算する簡単なJavaScriptコードを紹介します。
// 年間の目標稼働率(99.9%)から許容される停止時間を算出
const totalMinutesInYear = 365 * 24 * 60;
const availabilityRate = 0.999;
const downtimeAllowed = totalMinutesInYear * (1 - availabilityRate);
console.log("年間の許容停止時間は " + downtimeAllowed + " 分です。");
年間の許容停止時間は 525.6 分です。
7. 構築後のテストと正常性の確認
高可用性構成を作っただけで満足してはいけません。実際に「プライマリ回線を切断してみて、セカンダリに切り替わるか」「両方の専用線を止めて、VPNに切り替わるか」というテストが必要です。これを障害試験(しょうがいしけん)と呼びます。ログを確認し、パケットがどのルートを通っているかを追跡します。
Linux環境であれば、tracerouteコマンドを使って、通信経路を確認することができます。経路が専用線のIPからVPNのゲートウェイIPに変わっていれば成功です。以下は、コマンド実行のイメージです。
traceroute 10.0.0.4
traceroute to 10.0.0.4 (10.0.0.4), 30 hops max
1 192.168.1.1 (192.168.1.1) 1.23 ms
2 10.254.0.1 (10.254.0.1) 15.45 ms # ここがExpressRouteの経路
3 10.0.0.4 (10.0.0.4) 16.10 ms
8. ExpressRoute高可用性のベストプラクティス
最後に、より強固なネットワークを作るためのポイントを整理しましょう。まず、物理的な冗長化です。社内ルーターを2台に分け、さらにそれらをつなぐ電源や回線も別々のルート(異経路)にすることが望ましいです。次に、監視(モニタリング)の自動化です。Azure Monitorを使用して、回線のスループットやエラーを常に監視し、異常があればすぐにアラートが飛ぶように設定しましょう。
Azure ExpressRouteの導入は、単なる接続ではなく「止まらないインフラ」への第一歩です。VPNバックアップやBGPによる自動制御を組み合わせることで、どんな時でも安心して業務を行える環境を整えることができます。ネットワークの仕組みはパズルに似ていますが、一つ一つのピース(設定)を丁寧にはめていけば、必ず強固なシステムが完成します。これからも少しずつAzureの知識を深めていきましょう!
まとめ
アジュール・エクスプレスルート(Azure ExpressRoute)を活用した高可用性ネットワークの構築は、企業の基幹システムを支える極めて重要な工程です。今回の解説を通じて、専用線接続における冗長化(じょうちょうか)の仕組み、そして不測の事態に備えたバックアップ構成の重要性をご理解いただけたかと思います。単に一本の専用線を引くだけでは、物理的な断線やルーターの故障といったリスクにさらされてしまいます。そのため、標準提供されるプライマリとセカンダリの二系統を最大限に活用し、ユーザー側の拠点でもルーターを二台構成にすることが推奨されます。これにより、片方の系統でメンテナンスが発生しても、もう一方で通信を継続できる堅牢なインフラが実現します。
さらに信頼性を高める手法として、サイト間VPN(Site-to-Site VPN)によるバックアップ構成についても触れました。これは、高コストな専用線を二重に契約する代わりに、比較的低コストなインターネットVPNを待機系として利用する賢い設計です。この自動切り替えを司るのがBGP(ボーダー・ゲートウェイ・プロトコル)であり、動的な経路制御によって人間が介在することなく瞬時にルートを変更できる点が大きなメリットです。クラウドエンジニアとしては、ゲートウェイサブネットの適切な設計や、アベイラビリティ・ゾーンを活用したゾーン冗長ゲートウェイの選択など、将来の拡張性と可用性を両立させる視点が欠かせません。
ここからは、学習した内容をさらに深めるために、実務で役立つサンプルプログラムやデータベースの管理手法を整理してみましょう。まずは、ネットワーク経路情報を管理するためのデータベース構造と、その優先度を制御するSQLの実行例を確認します。これにより、どのようにシステムが優先ルートを識別しているかの論理的なイメージが掴めるはずです。
ネットワーク経路管理テーブルの構成
システムの冗長化設計において、現在どのルートが有効であり、どの優先度でパケットを流すべきかを管理するテーブルを想定します。下記のテーブルでは、各接続方式の優先度(数値が小さいほど優先)を定義しています。
id | connection_name | route_type | priority | is_active | location
---+-----------------+--------------+----------+-----------+----------
1 | Primary-ER | ExpressRoute | 10 | 1 | Tokyo-DC
2 | Secondary-ER | ExpressRoute | 10 | 1 | Tokyo-DC
3 | Backup-VPN | SiteToSiteVPN| 50 | 1 | Osaka-DC
4 | Disaster-Recov | SiteToSiteVPN| 100 | 0 | Seoul-DC
5 | Legacy-Link | PublicNet | 999 | 0 | Unknown
このテーブルから、現在アクティブなルートの中で最も優先度が高い(数値が最小の)接続情報を取得するクエリを実行します。
SELECT connection_name, route_type, priority
FROM network_status_table
WHERE is_active = 1
AND priority = (SELECT MIN(priority) FROM network_status_table WHERE is_active = 1);
実行結果は以下のようになります。プライマリとセカンダリの専用線が同等の優先度で選出されることが分かります。
connection_name | route_type | priority
----------------+--------------+----------
Primary-ER | ExpressRoute | 10
Secondary-ER | ExpressRoute | 10
接続断検知とバックアップ切り替えの制御コード
次に、C#(シーシャープ)を用いて、ネットワークの接続状態を監視し、異常時にバックアップルートへの切り替えをシミュレーションするロジックを見てみましょう。実務ではSDKを利用しますが、ここでは概念的なフローを記述します。
using System;
public class NetworkMonitor
{
public static void Main()
{
string currentRoute = "ExpressRoute";
bool isExpressRouteAlive = false; // 障害発生を想定
int retryCount = 3;
Console.WriteLine("ネットワーク監視を開始します...");
if (!isExpressRouteAlive)
{
Console.WriteLine("警告:専用線の瞬断を検知しました。リトライを開始します。");
for (int i = 1; i <= retryCount; i++)
{
Console.WriteLine($"{i}回目の再接続試行中...");
}
// BGPによる自動切り替えのシミュレーション
currentRoute = "SiteToSiteVPN";
Console.WriteLine("切替完了:バックアップのVPNルートへ移行しました。");
}
Console.WriteLine($"現在の通信経路: {currentRoute}");
}
}
プログラムの実行結果は、以下の通り表示されます。専用線の異常を検知し、即座にVPNルートへ切り替わっている様子が確認できます。
ネットワーク監視を開始します...
警告:専用線の瞬断を検知しました。リトライを開始します。
1回目の再接続試行中...
2回目の再接続試行中...
3回目の再接続試行中...
切替完了:バックアップのVPNルートへ移行しました。
現在の通信経路: SiteToSiteVPN
経路追跡による正常性確認
構築が完了した後は、必ず物理的な通信経路をテストします。リナックス(Linux)のコマンドラインから、パケットが期待通りのゲートウェイを通過しているかを確認する手順です。
ip route show
default via 10.0.0.1 dev eth0 proto static
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.4
172.16.0.0/12 via 10.254.0.1 dev eth0 # ExpressRouteゲートウェイ経由
万が一、専用線を意図的に停止させた場合には、以下のように経路がVPN用ゲートウェイ(10.255.0.1など)に自動更新されることを確認します。
ip route show
default via 10.0.0.1 dev eth0 proto static
172.16.0.0/12 via 10.255.0.1 dev eth0 # VPNゲートウェイへの自動切り替え完了
最後に、高可用性構成を維持するための運用上の注意点についてもまとめておきます。重要なのは「作って終わり」にしないことです。アジュール(Azure)のアップデートにより、新しいVPNゲートウェイのSKU(性能区分)が登場したり、ゾーン冗長機能が強化されたりすることがあります。定期的にアーキテクチャを見直し、常に最新のベストプラクティスを適用することで、ビジネスの継続性をより確実なものにできるでしょう。
生徒
「先生、まとめまで読んで、エクスプレスルートの冗長化がいかに重要かよくわかりました!標準で二本の回線があるというのは、すごく安心感がありますね。でも、あえてVPNも組み合わせる三段構えにするのは、やはりそれだけリスクに備えたい企業が多いからでしょうか?」
先生
「その通りです。例えば、地域の通信事業者の基幹ケーブルが大規模な工事事故や自然災害で切れてしまう可能性もゼロではありません。専用線が二本あっても、それらが同じ地下道を通っていれば同時に切れてしまうこともあります。だからこそ、インターネットという全く別の経路を使うVPNが、最後の砦(とりで)として輝くのです。」
生徒
「なるほど、経路を物理的に分けるという考え方ですね。さきほどのSQLの例でも、優先度を設定して自動で選ばれる仕組みが面白かったです。これなら、もしメインが直ったら、また自動で速い専用線の方に戻ってくれるんですよね?」
先生
「鋭いですね!BGPの設定で、優先度(ASパスやメトリック)を正しく設定しておけば、障害が復旧した瞬間に、パケットは再び高速な専用線ルートを自動的に選びます。インフラエンジニアは、この『自動で元に戻る』という動きまでしっかりとテストして、システムの自律性を高めているんですよ。」
生徒
「プログラムでリトライ処理を書くのと同じで、インフラ側でも二重三重の保険をかけているんですね。ゲートウェイサブネットのサイズについても、将来困らないように最初から広めに取っておこうと思います。丁寧な解説、ありがとうございました!」
先生
「その意気です!細かい設定一つひとつが、将来の大きなトラブルを防ぐ鍵になります。アジュールのネットワークは奥が深いですが、基礎を固めれば必ず武器になります。これからも一緒に頑張りましょうね!」