Nested Hyper-V の VM からの外部への通信について

Teppei Ishii

こんにちは、Azure サポート部の石井です。

 

前回、Nested Hyper-V を使って、Azure 環境で VM の中で VM を動作させるという内容をご紹介しました。

 

Nested Hyper-V を使った VM の復旧

https://blogs.technet.microsoft.com/jpaztech/2017/10/13/recover_vm_using_nested_hyperv/

 

前回の記事では、「RDP できない VM の復旧」ということが主目的として、あくまで「コンソール接続をして、適宜復旧作業をする」ことを想定し、Nested Hyper-V を構築しました。

今回は、何かの理由でこの Nested Hyper-V 上の VM から、外部に通信をする必要がある場合の設定や、制限についてご紹介します。

 

- 前置き

Azure では、Azure IaaS の VM に対して、Azure 基盤側の仮想ネットワークから内部 IP アドレスを配っています。

静的な内部 IP アドレスであったとしても、DHCP サーバー経由で割り当てられるという意味になります。

VM on VM (Nested VM と呼びます) の場合、つまり Azure IaaS 基盤から認識をしていない Nested VM 側への IP アドレスを配ることは Azure 側からは出来ません。

このため、Azure VM として稼働させている、Nested Hyper-V のホスト側で NAT を構成しなければなりません。

以下の手順で、Nested Hyper-V ホストに NAT を構成し、VM が外部に到達出来るよう設定が行えます。

- 手順

1. ホスト OS の Hyper-V Manager より、[Virtual Switch Manager] を開きます。

2. "Internal" を選択し、[Create virtual Switch] します。名前は任意ですが、サンプルとしてここでは Internal Azure と名付けました。

 

3. 続いて、Nested Hyper-V ホストにて、PowerShell にて以下のコマンドを実行します。

 

// NAT を作成します。アドレス帯は任意に設定していただいても問題ありませんが、サンプルでは 172.16.1.0/24 と設定しています。

New-NetNat –Name myNAT –InternalIPInterfaceAddressPrefix "172.16.1.0/24"

// "InternalAzure" 仮想ネットワーク アダプターに対して、IP アドレスを設定します。

Get-NetAdapter "vEthernet (InternalAzure)"| New-NetIPAddress -IPAddress 172.16.1.1 -AddressFamily IPv4 -PrefixLength 24

 

4. [Hyper-V Manager] から、Nested VM の [Settings] を開き、Network Adapter に先ほど作成したインターナル用仮想スイッチに接続します。

 

 

5. Nested VM 上で、ネットワーク設定 (ncpa.cpl) を開き、IPv4 の設定を以下のようにセットします。

IP アドレス: 172.16.1.5 <任意のものでOK>

サブネット マスク: 255.255.255.0

デフォルト ゲートウェイ: 172.16.1.1

DNS サーバー: 168.63.129.16 (Azure標準のもの)

※ この設定は、Hyper-V ホスト (Nested Hyper-V ホスト) ではなく、Nested VM 側で行います。Hyper-V ホスト側で行うと通信が一切行えなくなってしまいます。

 

 

 

- 制限事項

Nested VM から外部に疎通することが出来るようになるため、この設定にてインターネットや Azure PaaS などのリソースにアクセスができる他、Nested Hyper-V ホストの同じ仮想ネットワーク上にも IP アドレス指定で接続が行えます。

しかしながら、外部から、この VM に対して通信を受けることはできません。

つまり、インターネット、あるいは、Nested Hyper-V VM と同じAzure VNET上の他の VM から、Nested VM への疎通を取ることができないということです。

このためユースケースとしては、Windows Server 2016 ベースのコンテナー テクノロジーでの利用、もしくはテスト環境の構築や検証といった用途が一般的となるかと想定します。

 

参考情報:

入れ子になった仮想化による仮想マシンでの Hyper-V の実行

https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/nested-virtualization

Nested Virtualization in Azure

https://azure.microsoft.com/en-us/blog/nested-virtualization-in-azure/