VNET to VNET で、複数の Microsoft Azure 仮想ネットワーク間を接続する

こんにちは。ネットワークサポート担当の比留間 友一です。

夏です。クラウドが熱いです。私たちのサポートチームでも、弊社で公開している Microsoft Azure の仮想マシンや仮想ネットワークについてのお問い合わせを担当させていただいております。Azure のお問い合わせをいただいた際に、「あれ?どこかで見かけたヤツが出てきたな?」と思われるお客様もいらっしゃるかもしれませんが、どうぞ今後ともよろしくお願いいたします。

さて、本日のお題は、Azure 仮想ネットワークにおける VNET to VNET (VNET間の接続) です。

VNET to VNET とは?

Azure の仮想ネットワークの機能のリリース以来、「仮想ネットワーク同士を接続する方法はないのか?」というお問い合わせをしばしばいただいておりました。このご要望にお応えする形で2014 年 5月のアップデートにて追加されたのが、「仮想ネットワーク同士をサイト間 VPN で接続する方法」、つまり VNET to VNET です。同時期のアップデートにて、一つの仮想ネットワークから複数のネットワークに VPN 接続を行うことができる、Multi Site VPN も追加されております。

設定方法は?

注意:以降の記載は、2014 年 7 月現在の Microsoft Azure の仕様に基づいて作成されております。将来的に予告なく変更される場合がございますので、予めご承知おきください。

今回の記事では、以下のようなシナリオを考えてみます。

  • 東日本リージョンに構築された、既存の Azure 仮想ネットワーク VNET-JAPAN (172.17.0.0/16)
  • 既存の社内ローカルネットワーク OnPremise (192.168.180.0/24)
  • VNET-JAPAN と社内ネットワーク OnPremise は、既にサイト間 VPN 接続の設定がなされている。
    (ただし、ゲートウェイが動的ルーティングモードであるものとします。動的ゲートウェイが作成されていないと、VNET-JAPAN に複数の VPN 接続を作成することができません。)
  • ここに新たに、東アジアリージョンに仮想ネットワーク VNET-ASIA (172.18.0.0/16)を追加し、VNET-JAPAN (172.17.0.0/16)と接続します。

VNET to VNET の要点は、2つの仮想ネットワークのサイト間接続となります。
これを実現するためには、以下のような設定をする必要があります。

  • VNET-ASIA からは、VNET-JAPAN をローカルネットワークとみなしてサイト間接続する。
  • VNET-JAPAN からは、VNET-ASIA をローカルネットワークとみなしてサイト間接続する。

つまり、VNET-JAPAN と VNET-ASIA ともに、仮想ネットワークとしての本来の設定と、ローカルネットワークとしての設定の 2つ を定義する必要があります。

整理すると、既存の状態から以下の各設定を実施する必要があります。

  • ローカルネットワークとしての VNET-JAPAN の定義の追加
  • ローカルネットワークとしての VNET-ASIA の定義の追加
  • 仮想ネットワークとしての VNET-ASIA の定義の追加と、ローカルネットワークとしての VNET-JAPAN とのサイト間接続
  • 仮想ネットワークとしての VNET-JAPAN と、ローカルネットワークとしての VNET-ASIA のサイト間接続

ローカルネットワークの定義は、管理ポータルの [+新規] ⇒ [ネットワーク サービス] ⇒ [仮想ネットワーク] ⇒ [ローカルネットワークの追加] で行うことができます。
ここでは、ローカルネットワークとしての VNET-JAPAN の定義を、LOCAL-JAPAN、ローカルネットワークとしての VNET-ASIA の定義を LOCAL-ASIA とします。

LOCAL-JAPAN の定義の追加

仮想ネットワーク VNET-JAPAN のダッシュボードから確認できるゲートウェイアドレスを設定します。仮にここでは、VNET-JAPAN のダッシュボードに表示されているゲートウェイアドレスが、X.X.X.X であるものと想定します。

VNET-JAPAN のアドレス空間 (172.17.0.0/16) を設定します。

LOCAL-ASIA の定義の追加

ゲートウェイアドレスはひとまず仮のものを入力しておきます。(後から変更します。)

VNET-ASIA のアドレス空間 (172.18.0.0/16) を設定します。

仮想ネットワークとしての VNET-ASIA の定義の追加

VNET-ASIA の仮想ネットワークを東アジアリージョンに作成します。

サイト間接続を有効にし、接続先のローカルネットワークを LOCAL-JAPAN とします。

アドレス空間は 172.18.0.0/24、ゲートウェイサブネットも作成しておきます。

仮想ネットワークが作成できたら、ゲートウェイを作成します。(ゲートウェイ作成時に動的ルーティングを選択するのをお忘れなく!)
VNET-ASIA のゲートウェイが作成できたら、ゲートウェイのIP アドレスを控えておきます。(仮に Y.Y.Y.Y とします)

ゲートウェイの作成まで終わると、ダッシュボードの表示は以下のようになります。

あらかじめ作成しておいた LOCAL-ASIA の設定を開き、[VPN デバイスの IPアドレス] を Y.Y.Y.Y に変更します。

 

VNET-JAPAN と VNET-ASIA 間の接続

ここまでできたら、あとは VNET-JAPAN と VNET-ASIA を接続する作業です。以降の作業には、仮想ネットワークの構成ファイルの編集が必要になります。
仮想ネットワークのダッシュボードから [ダウンロード] を選択すると、XML ファイル (NetworkConfig.xml) がダウンロードできます。いざという時の切り戻し用に、このファイルは保管しておくことをお勧めします。
ここまでの作業で、構成ファイル NetworkCOnfig.xml の内容は以下のような感じになっているはずです。


<NetworkConfiguration xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">  <VirtualNetworkConfiguration>    <Dns>      <DnsServers>        <DnsServer name="global" IPAddress="?.?.?.?" />      </DnsServers>    </Dns>    <LocalNetworkSites>      <LocalNetworkSite name="LOCAL-ASIA">        <AddressSpace>          <AddressPrefix>172.18.0.0/16</AddressPrefix>        </AddressSpace>        <VPNGatewayAddress>Y.Y.Y.Y</VPNGatewayAddress>      </LocalNetworkSite>      <LocalNetworkSite name="LOCAL-JAPAN">        <AddressSpace>          <AddressPrefix>172.17.0.0/16</AddressPrefix>        </AddressSpace>        <VPNGatewayAddress>X.X.X.X</VPNGatewayAddress>      </LocalNetworkSite>      <LocalNetworkSite name="OnPremise">        <AddressSpace>          <AddressPrefix>192.168.180.0/24</AddressPrefix>        </AddressSpace>        <VPNGatewayAddress>Z.Z.Z.Z</VPNGatewayAddress>      </LocalNetworkSite>    </LocalNetworkSites>    <VirtualNetworkSites>      <VirtualNetworkSite name="VNET-ASIA" Location="East Asia">        <AddressSpace>          <AddressPrefix>172.18.0.0/16</AddressPrefix>        </AddressSpace>        <Subnets>          <Subnet name="Subnet-1">            <AddressPrefix>172.18.0.0/19</AddressPrefix>          </Subnet>          <Subnet name="GatewaySubnet">            <AddressPrefix>172.18.254.0/29</AddressPrefix>          </Subnet>        </Subnets>        <DnsServersRef>          <DnsServerRef name="global" />        </DnsServersRef>        <Gateway>          <ConnectionsToLocalNetwork>            <LocalNetworkSiteRef name="LOCAL-JAPAN">              <Connection type="IPsec" />            </LocalNetworkSiteRef>          </ConnectionsToLocalNetwork>        </Gateway>      </VirtualNetworkSite>      <VirtualNetworkSite name="VNET-JAPAN" Location="Japan East">        <AddressSpace>          <AddressPrefix>172.17.0.0/16</AddressPrefix>        </AddressSpace>        <Subnets>          <Subnet name="Subnet-1">            <AddressPrefix>172.17.0.0/19</AddressPrefix>          </Subnet>          <Subnet name="GatewaySubnet">            <AddressPrefix>172.17.254.0/29</AddressPrefix>          </Subnet>        </Subnets>        <DnsServersRef>          <DnsServerRef name="global" />        </DnsServersRef>        <Gateway>          <ConnectionsToLocalNetwork>            <LocalNetworkSiteRef name="OnPremise">              <Connection type="IPsec" />            </LocalNetworkSiteRef>          </ConnectionsToLocalNetwork>        </Gateway>      </VirtualNetworkSite>    </VirtualNetworkSites>  </VirtualNetworkConfiguration></NetworkConfiguration>

VNET-JAPAN の定義セクションの中に、以下の3行を追加します。
これで、仮想ネットワーク VNET-JAPAN が、既存のローカルネット OnPremise に加え、LOCAL-ASIA と接続されるようになります。

            <LocalNetworkSiteRef name="LOCAL-ASIA">
              <Connection type="IPsec" />
            </LocalNetworkSiteRef>

ファイル全体は以下のような形になります。

<NetworkConfiguration xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">  <VirtualNetworkConfiguration>    <Dns>      <DnsServers>        <DnsServer name="global" IPAddress="?.?.?.?" />      </DnsServers>    </Dns>    <LocalNetworkSites>      <LocalNetworkSite name="LOCAL-ASIA">        <AddressSpace>          <AddressPrefix>172.18.0.0/16</AddressPrefix>        </AddressSpace>        <VPNGatewayAddress>Y.Y.Y.Y</VPNGatewayAddress>      </LocalNetworkSite>      <LocalNetworkSite name="LOCAL-JAPAN">        <AddressSpace>          <AddressPrefix>172.17.0.0/16</AddressPrefix>        </AddressSpace>        <VPNGatewayAddress>X.X.X.X</VPNGatewayAddress>      </LocalNetworkSite>      <LocalNetworkSite name="OnPremise">        <AddressSpace>          <AddressPrefix>192.168.180.0/24</AddressPrefix>        </AddressSpace>        <VPNGatewayAddress>Z.Z.Z.Z</VPNGatewayAddress>      </LocalNetworkSite>    </LocalNetworkSites>    <VirtualNetworkSites>      <VirtualNetworkSite name="VNET-ASIA" Location="East Asia">        <AddressSpace>          <AddressPrefix>172.18.0.0/16</AddressPrefix>        </AddressSpace>        <Subnets>          <Subnet name="Subnet-1">            <AddressPrefix>172.18.0.0/19</AddressPrefix>          </Subnet>          <Subnet name="GatewaySubnet">            <AddressPrefix>172.18.254.0/29</AddressPrefix>          </Subnet>        </Subnets>        <DnsServersRef>          <DnsServerRef name="global" />        </DnsServersRef>        <Gateway>          <ConnectionsToLocalNetwork>            <LocalNetworkSiteRef name="LOCAL-JAPAN">              <Connection type="IPsec" />            </LocalNetworkSiteRef>          </ConnectionsToLocalNetwork>        </Gateway>      </VirtualNetworkSite>      <VirtualNetworkSite name="VNET-JAPAN" Location="Japan East">        <AddressSpace>          <AddressPrefix>172.17.0.0/16</AddressPrefix>        </AddressSpace>        <Subnets>          <Subnet name="Subnet-1">            <AddressPrefix>172.17.0.0/19</AddressPrefix>          </Subnet>          <Subnet name="GatewaySubnet">            <AddressPrefix>172.17.254.0/29</AddressPrefix>          </Subnet>        </Subnets>        <DnsServersRef>          <DnsServerRef name="global" />        </DnsServersRef>        <Gateway>          <ConnectionsToLocalNetwork>            <LocalNetworkSiteRef name="OnPremise">              <Connection type="IPsec" />            </LocalNetworkSiteRef>            <LocalNetworkSiteRef name="LOCAL-ASIA"> <Connection type="IPsec" /> </LocalNetworkSiteRef>                      </ConnectionsToLocalNetwork>        </Gateway>      </VirtualNetworkSite>    </VirtualNetworkSites>  </VirtualNetworkConfiguration></NetworkConfiguration>

 

完成した構成ファイルは、管理ポータルの [+新規] ⇒ [ネットワーク サービス] ⇒ [仮想ネットワーク] ⇒ [構成のインポート] からアップロードすることができます。仮想ネットワークの設定変更中は一時的にネットワーク接続が切れる場合がございますので、作業前には予めご注意ください。

ゲートウェイの事前共有キーを合わせる

構成のアップロードが成功したら、VNET-JAPAN と VNET-ASIA 間の接続について、ゲートウェイの事前共有キーを同じものに合わせます。
これには、Windows Azure PowerShell の Get-AzureVNetGatewayKey を使用します。

まず、Get-AzureVNetGatewayKey で、VNET-JAPAN のゲートウェイの事前共有キーを取得します。

PS C:\> Get-AzureVNetGatewayKey -VNetName VNET-JAPAN -LocalNetworkSiteName LOCAL-ASIA | fl詳細: 12:48:36 - Begin Operation: Get-AzureVNetGatewayKey詳細: 12:48:38 - Completed Operation: Get-AzureVNetGatewayKey

Value : bwQctCrC4xUPsfkybexxkHmSP5LdXVwLOperationDescription : Get-AzureVNetGatewayKeyOperationId : 2377ab0e-5986-b7dd-823e-393a0a39b67dOperationStatus : Succeeded

Value として表示された bwQctCrC4xUPsfkybexxkHmSP5LdXVwL が事前共有キーになりますので、これを控えておきます。

次に、VPN-ASIA 側の、VPN-JAPAN に対するゲートウェイの事前共有キーを、Set-AzureVNetGatewayKey を使用して設定します。

PS C:\> Set-AzureVNetGatewayKey -VNetName VNET-ASIA -LocalNetworkSiteName LOCAL-JAPAN -SharedKey bwQctCrC4xUPsfkybexxkHmSP5LdXVwL詳細: 12:55:29 - Begin Operation: Set-AzureVNetGatewayKey詳細: 12:55:39 - Completed Operation: Set-AzureVNetGatewayKey

OperationDescription OperationId OperationStatus-------------------- ----------- ---------------Set-AzureVNetGatewayKey 0d432ea3-9779-bc54-bbae-deceb64941bd Succeeded

管理ポータルに戻って VNET-ASIA の設定を見ると、LOCAL-JAPAN (つまり VNET-JAPAN)と VPN 接続が行われているのが確認できます。

VNET-JAPAN も、OnPremise と VNET-ASIA の双方と接続された状態になっています。

 まとめ

ご覧いただきましたように、仮想ネットワークの構成ファイルを編集することによって、仮想ネットワーク間であっても VPN 接続を行うことができます。今回は、極力管理ポータルの操作を併用しましたが、慣れてくれば、構成ファイルを直接編集することでも今回のような構成を作成することが可能です。また、上記の例で、更に VNET-ASIA の定義に、ローカルネットワーク OnPremise との定義を追加すれば、三角形のトポロジーを生成することも可能です。
(お使いの VPN 装置が、複数の VPN トンネルに対応しているかどうかは事前にご確認ください。この場合も、事前共有キーを合わせることが必要です。)

VNET to VNET の要点は、とにかく仮想ネットワークとしての本来の設定と、ローカルネットワークとしての設定の 2つ を定義し、お互いを接続する という点にあります。

参考:

Configure a Multi-Site VPN

Configure a VNet to VNet Connection

VNET 間接続: 異なるリージョン間での Azure Virtual Network の接続

「コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。」