VNET 間接続: 異なるリージョン間での Azure Virtual Network の接続
このポストは、6 月 17 日に投稿した VNet-to-VNet: Connecting Virtual Networks in Azure across Different Regions の翻訳です。
概要
TechEd 2014 では、マルチサイト VPN、リージョン内の VNET 間接続、複数のリージョン間での VNET 間接続などの機能が公開されました。ここではミニ シリーズ記事として今回から数回にわたり、VNET 間接続を使用して Virtual Network を接続するための構成手順と例をご紹介します。
VNET 間接続では Azure VPN ゲートウェイを利用し、IPsec/IKE S2S VPN トンネルによって 2 つ以上の Virtual Network 間にセキュアな接続を確立します。マルチサイト VPN と併用することで、Virtual Network とオンプレミスのサイトをビジネス ニーズに適したトポロジで接続することができます。以下の図は、Virtual Network とオンプレミスのサイト間で完全に接続されたトポロジの簡単な例を示しています。
この接続を確立できるシナリオは複数あります。以下の 3 つはその一例です。
- 複数のリージョン間にわたる地理冗長性と地理プレゼンスの確保 (例: 異なる Azure リージョン間での SQL AlwaysOn)
- Azure による複数のサブスクリプション間や組織間のコミュニケーション
- 分離境界が強力なリージョン多層アプリケーション、異なる Virtual Network の既存のワークロードを接続した新しいアプリケーションの形成
考慮事項
VNET 間接続の要件および考慮事項の詳細については、こちらのページ (英語) を参照してください。ここでは、主要なポイントのみをご紹介します。
- Virtual Network を接続するには、Azure Dynamic Routing VPN ゲートウェイを作成または使用する必要があります。VNET 間接続では、Static Routing VPN ゲートウェイはサポートされません。
- 各 Virtual Network には、最大 10 個の「ネットワーク」を接続できます。つまり、Virtual Network とオンプレミスのサイトの合計数が 10 を超えることはできません。
- 接続されたすべてのネットワークでアドレス プレフィックスが重複することはできません。
- VNET 間接続は、リージョン間およびサブスクリプション間で機能します。1 つのリージョン内や異なるリージョン間、1 つのサブスクリプション内や複数のサブスクリプション間で有効です。
以上を踏まえて、Virtual Network を接続する簡単な例をゼロから構築してみましょう。
1 つのサブスクリプション内で 2 つの Virtual Network を接続する
ある Azure Virtual Network から別の Virtual Network への接続は、Site-to-Site (S2S) VPN 経由でオンプレミス ネットワークに接続する場合と基本的には同じです。ここでは、1 つの Azure サブスクリプション内で Virtual Network と VPN ゲートウェイをゼロから作成して接続します。以下の手順を実行します。
- Virtual Network とそれに対応するローカル ネットワークを複数作成し、クロスプレミス接続を確立する
- Virtual Network に Azure Dynamic Routing VPN ゲートウェイを作成する
- Virtual Network どうしを接続する
以下の図のように、VNet1 と VNet2 という 2 つの Virtual Network を作成して接続します。
- VNet1: アドレス空間 = 10.1.0.0/16、アフィニティ グループ = WestUS
- VNet2: アドレス空間 = 10.2.0.0/16、アフィニティ グループ = NorthEurope
この例では、Azure PowerShell コマンドレットを使用します。以下の Azure PowerShell ページの手順に従って、PowerShell 環境をインストールおよび構成してください。
- Azure PowerShell に関する MSDN 記事: https://msdn.microsoft.com/ja-jp/library/azure/jj156055.aspx
- Azure PowerShell のインストールおよび構成手順: https://azure.microsoft.com/en-us/documentation/articles/install-configure-powershell/ (英語)
ここで説明するような単純な VNET 間接続のセットアップの場合は、Azure 管理ポータルを使用して、以下の手順 1 と 2 を実行できます。今回 PowerShell を使用している理由は、今後も継続的に Virtual Network に接続を追加する場合 (マルチサイト VPN など)、現時点ではこれらの機能の構成に Azure PowerShell コマンドレットまたは REST API しか使用できないためです。
[手順 1] VNet1 と VNet2、およびこれらに対応するローカル ネットワークを作成する
最初に、2 つの Virtual Network と、それぞれに対応するローカル ネットワークを作成します。一方の Virtual Network (VNet1) から見ると、もう一方の Virtual Network (VNet2) は単に Azure プラットフォームで定義された VPN 接続の 1 つにすぎません。そのため、以下の接続を作成および定義する必要があります。
Virtual Network |
Virtual Network サイトの定義 |
接続先のローカル ネットワーク サイト |
VNet1 |
VNet1 (10.1.0.0/16) |
VNet2 (10.2.0.0/16) |
VNet2 |
VNet2 (10.2.0.0/16) |
VNet1 (10.1.0.0/16) |
各 Virtual Network はそれぞれ 2 度定義する必要があります。1 度目は Azure Virtual Network として、2 度目はもう一方の Virtual Network に接続するローカル ネットワークとして定義します。両方の定義で指定されるアドレス空間は同じである必要があります。アドレス空間が異なると、2 つの Virtual Network 間のコミュニケーションが正常に機能しません。わかりやすくするために、この例では Virtual Network とローカル ネットワークの両方の定義に同じ名前を使用します。これは必須ではありませんが、この方が定義がわかりやすくなります。
以下の PowerShell コマンドレットにより、2 つの Virtual Network に 2 つのアフィニティ グループを作成します。お望みの場合は、同一のリージョンの既存のアフィニティ グループを再利用することもできます。
PS D:\> New-AzureAffinityGroup -Name WestUS -Location "West US"
PS D:\> New-AzureAffinityGroup -Name NorthEurope -Location "North Europe"
アフィニティ グループを作成したら、以下のコマンドレットを使用して現在のネットワーク構成ファイル (NETCFG.XML) をエクスポートします。
PS D:\> Get-AzureVNetConfig -ExportToFile "D:\MyCurrentNETCFG.XML"
2 つの Virtual Network と対応するローカル ネットワークを作成するには、メモ帳などのテキスト エディターを使用して、NETCFG ファイル (この例では MyCurrentNETCFG.XML) に次のセグメントを挿入します。
<LocalNetworkSites>
<LocalNetworkSite name="VNet1">
<AddressSpace>
<AddressPrefix>10.1.0.0/16</AddressPrefix>
</AddressSpace>
<VPNGatewayAddress>1.0.0.1</VPNGatewayAddress>
</LocalNetworkSite>
<LocalNetworkSite name="VNet2">
<AddressSpace>
<AddressPrefix>10.2.0.0/16</AddressPrefix>
</AddressSpace>
<VPNGatewayAddress>2.0.0.2</VPNGatewayAddress>
</LocalNetworkSite>
</LocalNetworkSites>
<VirtualNetworkSites>
<VirtualNetworkSite name="VNet1" AffinityGroup="WestUS">
<AddressSpace>
<AddressPrefix>10.1.0.0/16</AddressPrefix>
</AddressSpace>
<Subnets>
<Subnet name="Subnet-1">
<AddressPrefix>10.1.0.0/24</AddressPrefix>
</Subnet>
<Subnet name="GatewaySubnet">
<AddressPrefix>10.1.200.0/29</AddressPrefix>
</Subnet>
</Subnets>
<Gateway>
<ConnectionsToLocalNetwork>
<LocalNetworkSiteRef name="VNet2">
<Connection type="IPsec" />
</LocalNetworkSiteRef>
</ConnectionsToLocalNetwork>
</Gateway>
</VirtualNetworkSite>
<VirtualNetworkSite name="VNet2" AffinityGroup="NorthEurope">
<AddressSpace>
<AddressPrefix>10.2.0.0/16</AddressPrefix>
</AddressSpace>
<Subnets>
<Subnet name="Subnet-1">
<AddressPrefix>10.2.0.0/24</AddressPrefix>
</Subnet>
<Subnet name="GatewaySubnet">
<AddressPrefix>10.2.200.0/29</AddressPrefix>
</Subnet>
</Subnets>
<Gateway>
<ConnectionsToLocalNetwork>
<LocalNetworkSiteRef name="VNet1">
<Connection type="IPsec" />
</LocalNetworkSiteRef>
</ConnectionsToLocalNetwork>
</Gateway>
</VirtualNetworkSite>
</VirtualNetworkSites>
上記のセグメントでは、VNet1 と VNet2 という 2 つの Virtual Network と、VNet1 と VNet2 という 2 つのローカル ネットワークを定義しています。次の手順に進む前に、以下の事項を確認してください。
- 単純化するために、上記の例では各 Virtual Network に “GatewaySubnet” 以外に 1 つのサブネット (“Subnet-1”) のみが含まれ、DNSServersRef 要素は省略されています。また、“VPNClientAddressPool” 要素も省略します。これらの要素は、必要に応じて NETCFG に追加することができます。
- NETCFG に既に “LocalNetworkSites” および “VirtualNetworkSites” のセクションが存在する場合は、対応する “LocalNetworkSite” 要素と “VirtualNetworkSite” 要素をその 2 つのセクションにそれぞれコピーしてください。
- LocalNetworkSite の “VPNGatewayAddress” は Virtual Network に対応する Azure VPN ゲートウェイの VIP (パブリック IP) アドレスです。実際のアドレスは、Azure VPN ゲートウェイが作成されるまでわかりません。現時点では、その 2 つのアドレスの一時的なプレースホルダーとして “1.0.0.1” と “2.0.0.2” を使用します。
上記の手順を完了したら、新しい NETCFG に “MyNewNETCFG.XML” という名前を付けて保存し、以下の PowerShell コマンドレットを使用して、更新した NETCFG ファイルを Azure サブスクリプションにアップロードします。
PS D:\> Set-AzureVNetConfig -ConfigurationPath D:\MyNewNETCFG.XML
この手順が完了するまでには数分かかります。完了すると、Azure 管理ポータルに Virtual Network とローカル ネットワークが表示されます。
[手順 2] 各 Virtual Network に Dynamic Routing VPN ゲートウェイを作成する
Virtual Network を作成し、対応する VPN 接続を確立したら、次に各 Virtual Network に Azure VPN ゲートウェイを作成します。この手順には、Azure 管理ポータルまたは Azure REST API を使用できます。サポートされているゲートウェイは、Dynamic Routing ゲートウェイのみです。ただし現在、Azure PowerShell コマンドレットの “New-AzureVNetGateway” では、Dynamic Routing ゲートウェイの作成はサポートされていません (マイクロソフトはこの問題に現在対応中です。この Azure PowerShell の動作の問題が解消されるまで今しばらくお待ちください)。
Azure 管理ポータルで [Networks] ページに移動してから、VNet1 と VNet2 の両方の [Dashboard] ページに移動します。以下の図のように、各ページの下部の [Networks] をクリックして [Dynamic Routing] を選択します。
[手順 3] VPN ゲートウェイを接続する
両方のゲートウェイを作成すると、Azure 管理ポータルまたは以下のコマンドレットを使用して、2 つの VPN ゲートウェイのパブリック IP アドレスを取得できるようになります。
PS D:\> Get-AzureVNetGateway -VNetName VNet1 | ft VIPAddress
VIPAddress
----------
191.xxx.82.62
PS D:\> Get-AzureVNetGateway -VNetName vnet2 | ft VIPAddress
VIPAddress
----------
191.yyy.135.20
xxx と yyy には実際の数字が入りますが、当然のことながら、セキュリティ上の理由により伏せてあります。ゲートウェイのパブリック IP アドレスを取得したら、NETCFG セグメントの VNet1 と VNet2 の LocalNetworkSite 定義を NETCFG ファイル (MyNewNETCFG.XML) の IP アドレスと一致するように更新します。
<LocalNetworkSite name=“VNet1”>
<AddressSpace><AddressPrefix>10.1.0.0/16</AddressPrefix></AddressSpace>
<VPNGatewayAddress>191.xxx.82.62</VPNGatewayAddress>
</LocalNetworkSite>
<LocalNetworkSite name=“VNet2”>
<AddressSpace><AddressPrefix>10.2.0.0/16</AddressPrefix></AddressSpace>
<VPNGatewayAddress>191.yyy.135.20</VPNGatewayAddress>
</LocalNetworkSite>
その後、更新した NETCFG ファイルを再度アップロードします。
PS D:\> Set-AzureVNetConfig -ConfigurationPath D:\MyNewNETCFG.XML
最後に、同じ IPsec/IKE の事前共有キーを設定します。この手順には、Azure REST API または Azure PowerShell コマンドレットを使用できます。以下の例では、PowerShell コマンドレットを使用してキーの値を A1b2C3d4 に設定しています。
PS D:\> Set-AzureVNetGatewayKey -VNetName VNet1 -LocalNetworkSiteName VNet2 -SharedKey A1b2C3d4
PS D:\> Set-AzureVNetGatewayKey -VNetName VNet2 -LocalNetworkSiteName VNet1 -SharedKey A1b2C3d4
上記の手順を完了すると、IPsec/IKE によって S2S VPN トンネルが確立され、VNet1 と VNet2 が接続されます。以下のコマンドレットにより、接続の状態を表示します。
PS D:\> Get-AzureVNetConnection -VNetName VNet1 | ft LocalNetworkSiteName, ConnectivityState
LocalNetworkSiteName ConnectivityState
-------------------- -----------------
VNet2 Connected
PS D:\> Get-AzureVNetConnection -VNetName VNet2 | ft LocalNetworkSiteName, ConnectivityState
LocalNetworkSiteName ConnectivityState
-------------------- -----------------
VNet1 Connected
これで、VNet1 と VNet2 が接続されていることを確認できました。Virtual Network に既に VM が存在する場合は、2 つの Virtual Network 間でトラフィックの送受信が開始されます。
Azure プラットフォームでは、ConnectivityState は 5 分に 1 回しか更新されません。そのため、キーが適切に設定されてから通常 1 分以内に接続は確立されますが、状態が更新されて “Connected” と表示されるまでには最長で 5 ~ 7 分ほどかかる場合があります。
予告
次回もこの単純なトポロジを利用して、異なるサブスクリプション間での VNET 間接続を確立する方法をご説明します。また、マルチサイト VPN 機能についてもご紹介する予定です。