Azure VPN Gatewayの高可用性設計を解説!アクティブ/アクティブ構成で接続断を防ぐ
生徒
「会社とAzureをVPN(ブイピーエヌ)で繋ぎたいのですが、もしVPNゲートウェイが故障したら通信が止まってしまいますよね?」
先生
「その通りです。クラウド上の仮想ネットワークの入り口が一つだけだと、そこが弱点になってしまいます。これを単一障害点(たんいつしょうがいてん)と呼びます。」
生徒
「止まらないようにするには、どうすればいいんでしょうか?」
先生
「Azure VPN Gateway(アジュール・ブイピーエヌ・ゲートウェイ)の『アクティブ/アクティブ構成』を使えば、二つの通り道を同時に使って冗長化(じょうちょうか)ができます。詳しく解説していきましょう!」
1. Azure VPN Gatewayの高可用性とは?
Azure VPN Gateway(アジュール・ブイピーエヌ・ゲートウェイ)とは、お使いのパソコンやオンプレミス(自社運用)のネットワークと、Microsoft Azure上の仮想ネットワーク(VNet)を安全に結ぶための専用デバイスです。インターネット上に暗号化されたトンネルを作るイメージですね。
高可用性(こうかようせい)とは、システムが止まることなく動き続ける能力のことです。ITの世界では「アベイラビリティ」とも呼ばれます。もしVPNの装置が1台しかなく、それがメンテナンスや故障で止まってしまったら、全ての業務がストップしてしまいます。これを防ぐために、あらかじめ予備を用意したり、複数学を同時に動かしたりする設計が不可欠です。Azureでは、この高可用性を実現するために複数の構成パターンが用意されています。
2. アクティブ/スタンバイ構成とアクティブ/アクティブ構成の違い
まず、基本となる二つの構成について説明します。Azure VPN Gatewayを新規で作成すると、デフォルトでは「アクティブ/スタンバイ」という形式になっています。
- アクティブ/スタンバイ:1台がメインで働き、もう1台は予備として待機します。メインが壊れた時に予備が起動しますが、切り替わる数分間は通信が途切れます。
- アクティブ/アクティブ:2台のゲートウェイが同時に働きます。両方の通り道にデータが流れるため、片方が止まっても、もう片方の道で即座に通信を継続できます。
アクティブ/アクティブ構成の最大の特徴は、切り替えによるダウンタイム(停止時間)がほぼゼロになることです。また、二つのトンネルを同時に使うため、利用可能な帯域幅(通信の太さ)が実質的に増えるというメリットもあります。ビジネスにおいて24時間365日の稼働が求められるシステムでは、このアクティブ/アクティブ構成が強く推奨されます。
3. アクティブ/アクティブ構成の仕組みとBGPの役割
アクティブ/アクティブ構成を支える重要な技術がBGP(Border Gateway Protocol:ボーダー・ゲートウェイ・プロトコル)です。これは、ネットワーク同士が「どの道を通れば目的地に着けるか」という情報を交換するためのルールです。
通常、道が二つあるとコンピュータはどちらを通ればいいか迷ってしまいます。そこでBGPを使って「今は両方の道が使えるよ」「こっちの道が壊れたから、もう一方だけを使って」という情報をリアルタイムでやり取りします。Azure VPN Gatewayが二つの異なるパブリックIPアドレスを持ち、オンプレミス側のルーターとそれぞれ接続することで、網の目のような冗長なネットワークが完成します。歴史的には、インターネットの巨大なネットワークを繋ぎ合わせるために開発された非常に信頼性の高いプロトコルです。
4. 設定状況を確認するためのSQLシミュレーション
VPNの構成情報を管理するデータベースの例を見てみましょう。どのような設定が入っているかを確認するシーンを想定します。まずは現在の設定テーブルを確認します。
id | gateway_name | sku | active_active | bgp_enabled
---+--------------+-----------+---------------+------------
1 | vpn-gw-prod | VpnGw2 | true | true
2 | vpn-gw-dev | VpnGw1 | false | false
3 | vpn-gw-test | Basic | false | false
4 | vpn-gw-hq | VpnGw3 | true | true
次に、アクティブ/アクティブ構成が有効になっているゲートウェイだけを抽出するSQLを実行します。
SELECT gateway_name, sku
FROM azure_vpn_configs
WHERE active_active = true AND bgp_enabled = true;
実行結果は以下の通りです。本番環境(prod)や本社(hq)のゲートウェイが正しく冗長化されていることがわかります。
gateway_name | sku
-------------+--------
vpn-gw-prod | VpnGw2
vpn-gw-hq | VpnGw3
5. PowerShellを使用した構成変更の例
Azureの操作はポータル画面(マウス操作)だけでなく、PowerShell(パワーシェル)というコマンド操作でも行えます。特に大量の設定を確認したり、自動化したりする際に便利です。ここでは、既存のゲートウェイがアクティブ/アクティブ構成になっているかを確認するスクリプトの例を紹介します。
// C#風のロジックで記述した、設定確認の疑似コード例です
var gateway = GetAzureVpnGateway("myResourceGroup", "vpn-gw-prod");
if (gateway.EnableActiveActiveFeature == true)
{
Console.WriteLine("このゲートウェイはアクティブ/アクティブ構成で冗長化されています。");
}
else
{
Console.WriteLine("警告:このゲートウェイはシングル構成です。冗長化を検討してください。");
}
実際の設定変更では、以下のようなコマンド体系が使われます。初心者のうちはポータル画面での設定がおすすめですが、中級者以上になるとこうしたコマンドを組み合わせて、インフラをコードで管理(IaC)するようになります。
6. 接続状態をコマンドラインで確認する
設定が完了したら、実際に通信ができているかを確認する必要があります。Linuxサーバーなどから接続性を確認する際は、基本的なネットワークコマンドを使用します。ここでは、VPN経由でプライベートIPアドレスに対して接続テストを行う様子をシミュレートします。
ping -c 4 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=15.2 ms
64 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=14.8 ms
64 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=15.0 ms
64 bytes from 10.0.0.4: icmp_seq=4 ttl=64 time=14.9 ms
もしアクティブ/アクティブ構成の片方の経路を遮断しても、このように応答が返り続ければ成功です。もし片方のゲートウェイに問題が発生しても、BGPが即座にルートを切り替えるため、利用者からは何も起きていないかのように通信が継続されます。
7. アクティブ/アクティブ構成を導入する際の注意点
非常に強力なアクティブ/アクティブ構成ですが、導入にあたっていくつか知っておくべきポイントがあります。まず、コスト面です。アクティブ/アクティブ構成にすると、内部的に2つのゲートウェイ・インスタンスがフル稼働するため、標準的な価格設定よりもコストがかかる場合があります。ただし、Azure VPN GatewayのSKU(スペックの種類)によっては、標準で2つのIPアドレスが提供されるものもあります。
次に、オンプレミス側の機器(VPNルーター)の対応状況です。Azure側が2つの口(IPアドレス)を用意しても、接続元である会社のルーターが1つのトンネルしか張れない場合、本当の意味での冗長化は達成できません。会社側のルーターも、2つのパブリックIPアドレスに対して同時にVPN接続を確立できる機能や、BGPプロトコルに対応している必要があります。導入前には必ず、自社のネットワークエンジニアや機器のメーカーに仕様を確認しましょう。
8. 異常検知とモニタリングの重要性
「冗長化しているから安心」と放置するのは禁物です。なぜなら、2本あるうちの1本が切れていても、通信自体はもう片方で継続できてしまうため、故障に気づきにくいからです。もしそのまま放置して、残りの1本も故障してしまったら、その時初めて全停止という最悪の事態になります。
そこで重要になるのがAzure Monitor(アジュール・モニター)による監視です。ゲートウェイのメトリック(数値データ)を確認し、接続されているトンネルの数が減少した際にアラート(通知)が飛ぶように設定しておきましょう。これにより、片系障害が発生した瞬間に管理者が気づき、完全停止する前に復旧作業を行うことができます。可用性を高めるためには、設計だけでなく、運用監視のセットアップまでがワンセットだと考えてください。
// 監視システムの動作イメージ
void CheckGatewayHealth(int connectedTunnels)
{
const int RequiredTunnels = 2;
if (connectedTunnels < RequiredTunnels)
{
SendAlert("警告:VPNトンネルの一部が切断されています。確認してください。");
}
else
{
Console.WriteLine("正常:全てのVPN経路が確立されています。");
}
}
9. VPN接続の設計におけるベストプラクティス
最後に、より強固なネットワークを作るためのヒントをお伝えします。アクティブ/アクティブ構成に加えて、物理的な場所の冗長化も考慮するとさらに安全です。例えば、Azureには「可用性ゾーン(アベイラビリティ・ゾーン)」という仕組みがあり、異なるデータセンター建物にゲートウェイを分散配置することができます。これにより、万が一データセンター一つが停電しても通信を維持できます。
また、VPNはインターネット回線を利用するため、プロバイダーの障害にも左右されます。非常に重要なシステムであれば、VPNをメイン回線としつつ、バックアップとして「Azure ExpressRoute(アジュール・エクスプレスルート)」という専用線を導入する、あるいはその逆の構成をとることで、最強の高可用性ネットワークを構築することが可能です。自分のプロジェクトの重要度と予算に合わせて、最適な設計を選んでいきましょう。難しいと感じるかもしれませんが、一つずつ用語を理解していけば、必ずマスターできますよ。
まとめ
Azure VPN Gateway(アジュール・ブイピーエヌ・ゲートウェイ)の高可用性設計について詳しく解説してきました。クラウドとオンプレミスを安全に接続するこのサービスにおいて、通信の安定性はビジネスの継続性に直結します。デフォルトの設定である「アクティブ/スタンバイ構成」では、メインのゲートウェイが故障した際に予備機への切り替えが発生し、その数分間は通信が途絶えてしまうという課題がありました。しかし、今回ご紹介した「アクティブ/アクティブ構成」を採用することで、2つのゲートウェイインスタンスを同時に稼働させ、ダウンタイムをほぼゼロに抑えることが可能になります。
この高可用性を支える基盤技術がBGP(ボーダー・ゲートウェイ・プロトコル)です。BGPは動的に最適な経路を選択し、万が一片方の経路が遮断された場合でも、即座にもう一方の正常な経路へトラフィックを誘導します。ネットワークの冗長化は、単に機器を2台並べるだけではなく、こうしたルーティングプロトコルを正しく組み合わせることで初めて完成します。また、運用面ではAzure Monitorを活用した継続的な監視が欠かせません。片系障害が発生した際に即座に検知し、完全な通信断絶に至る前に復旧作業を行う体制を整えることが、真の意味での高可用性(ハイ・アベイラビリティ)の実現に繋がります。
構成管理のためのデータベース操作例
実際の運用現場では、多数のVPN接続情報をデータベースで管理することが一般的です。ここでは、ゲートウェイの冗長化設定を更新し、その結果を確認する一連の流れをシミュレーションしてみましょう。
更新前のゲートウェイ設定テーブル
id | gateway_name | sku | active_active | bgp_enabled | location
---+----------------+------------+---------------+-------------+-----------
1 | vpn-gw-tokyo | VpnGw2 | true | true | japaneast
2 | vpn-gw-osaka | VpnGw1 | false | false | japanwest
3 | vpn-gw-sub | Basic | false | false | japaneast
4 | vpn-gw-backup | VpnGw1 | false | true | japaneast
5 | vpn-gw-global | VpnGw3 | true | true | uswest
次に、大阪拠点のゲートウェイ(id: 2)をアクティブ/アクティブ構成にアップグレードするSQLを実行します。
UPDATE azure_vpn_configs
SET active_active = true, bgp_enabled = true, sku = 'VpnGw2'
WHERE id = 2;
SELECT * FROM azure_vpn_configs WHERE id = 2;
更新後のゲートウェイ設定テーブル
id | gateway_name | sku | active_active | bgp_enabled | location
---+----------------+------------+---------------+-------------+-----------
1 | vpn-gw-tokyo | VpnGw2 | true | true | japaneast
2 | vpn-gw-osaka | VpnGw2 | true | true | japanwest
3 | vpn-gw-sub | Basic | false | false | japaneast
4 | vpn-gw-backup | VpnGw1 | false | true | japaneast
5 | vpn-gw-global | VpnGw3 | true | true | uswest
プログラムによる可用性チェックのロジック
システムが正常に動作しているかを判定するプログラムの例です。複数の接続ポイントを持つアクティブ/アクティブ構成において、すべてのトンネルが確立されているかを論理的にチェックします。
using System;
public class VpnMonitor
{
public static void Main()
{
string gatewayName = "vpn-gw-osaka";
bool isInstanceAConnected = true;
bool isInstanceBConnected = true;
CheckConnectivity(gatewayName, isInstanceAConnected, isInstanceBConnected);
}
public static void CheckConnectivity(string name, bool nodeA, bool nodeB)
{
Console.WriteLine("--- VPN接続ステータス確認開始 ---");
if (nodeA && nodeB)
{
Console.WriteLine($"ゲートウェイ {name}: フル冗長状態で稼働中です。");
}
else if (nodeA || nodeB)
{
Console.WriteLine($"警告: {name} は片系のみで動作しています。速やかに調査が必要です。");
}
else
{
Console.WriteLine($"重大エラー: {name} の全経路が切断されました!");
}
}
}
上記のプログラムを実行した際の出力結果は以下の通りです。
--- VPN接続ステータス確認開始 ---
ゲートウェイ vpn-gw-osaka: フル冗長状態で稼働中です。
ネットワーク診断コマンドの活用
設定変更後、Linuxターミナルからルーティング情報が正しく反映されているか、またパケットの経路に異常がないかを確認することが重要です。
ip route show
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.10 metric 100
10.0.0.0/16 via 10.1.0.1 dev tun0
10.2.0.0/16 via 10.1.0.1 dev tun1
このように、複数のトンネルインターフェース(tun0, tun1)を経由して、宛先ネットワーク(10.0.0.0/16など)へのルートが確立されていることを確認できれば、物理的にも論理的にも冗長化が機能している証拠です。
生徒
「先生、アクティブ/アクティブ構成の凄さがよく分かりました!2つのトンネルを同時に使うことで、片方が倒れても止まらない『不屈のネットワーク』になるんですね。」
先生
「その通りです。特にBGPが裏側で『今はこっちの道が通れるよ』と賢く交通整理をしてくれるおかげで、私たちは意識することなく安全に通信ができるんですよ。」
生徒
「でも、さっきのSQLやC#のコードを見て思いましたが、設定しただけで満足してはいけませんね。ちゃんと2本とも動いているか、常に監視しておくことが大切だと学びました。」
先生
「素晴らしい気づきですね!片方が切れていても通信自体はできてしまうので、放置すると最後には全滅してしまいます。監視ツールを組み合わせて、異常をすぐに見つけられるようにしましょう。」
生徒
「コストやルーターの対応状況など、事前に確認すべき点も多いですが、止まらないシステムを作るためには欠かせない知識ですね。ありがとうございました!」
先生
「どういたしまして。これからもAzureの機能を使いこなして、信頼性の高いインフラエンジニアを目指してくださいね。応援しています!」