以下が記事本文です。


Nested Hyper-V on Azure — Azure上でHyper-Vをネストして動かす方法

この記事の内容

  • Nested Hyper-V(ネストされた仮想化)とは何か、その仕組みを解説します
  • Azure上でNested Hyper-Vを利用するための前提条件と注意事項を説明します
  • Nested Hyper-Vに対応したAzure VMサイズの選び方を紹介します
  • Hyper-VをAzure VM上で有効化する具体的な手順をデモで確認します
  • ネスト環境におけるネットワーク構成の課題とNATを使った解決策を解説します

Nested Hyper-Vとは

Nested Hyper-V(ネストされたHyper-V)とは、Hyper-VのホストOS上に作成した仮想マシン(ゲストOS)の中で、さらにHyper-Vを動かして仮想マシンを作成する技術です。つまり「仮想マシンの中でさらに仮想マシンを動かす」ということになります。

通常のHyper-V環境では、CPUが持つ仮想化支援機能(Virtualization Extensions)はホストOSにのみ提供されます。ゲストOSにはこの機能が見えないため、ゲストOS上でHyper-Vを有効化することができません。

Nested Hyper-Vではこの制限を取り除き、仮想化支援機能をゲストOSにも提供します。これにより、ゲストOS上でもHyper-Vを有効化して、さらにその中にゲストOSを作成することが可能になります。


Nested Hyper-V on Azureとは

「Nested Hyper-V on Azure」とは、AzureのVM上でNested Hyper-Vを実行することを指します。

オンプレミス環境でNested Hyper-Vを利用する場合は、ホストOSのPowerShellから以下のコマンドを実行し、仮想化支援機能をゲストのvCPUに公開します。

Set-VMProcessor -VMName <VM名> -ExposeVirtualizationExtensions $true

しかしAzure上では、このような根本的な設定を利用者が直接実行することはできません。そのため、あらかじめNested Hyper-Vが有効化されたVMサイズを選択するというアプローチになります。


利用条件と注意事項

Nested Hyper-Vを利用するには、以下の条件を満たす必要があります。

  • ホストOSとゲストOSの両方が、Windows Server 2016以降、またはWindows 10 Anniversary Update以降であること
  • IntelのCPU(VT-xおよびEPTテクノロジーをサポートするもの)であること
  • AMDのCPUは現時点では非対応(Windows 11でサポートされる可能性があるとの情報もありますが、公式発表の確認が必要です)

また、Nested Hyper-VはゲストOSを多段階で動かすため、CPU・メモリのリソースを大量に消費します。それなりのスペックのVMを選択するよう注意してください。


Azure VMサイズの選択

AzureでNested Hyper-Vを利用するには、対応しているVMサイズを選ぶ必要があります。対応VMサイズはMicrosoftの公式ドキュメントに記載されています。

本デモでは以下のサイズを使用しました。

項目設定値
VMサイズD16s v4
OSWindows Server 2019
リージョン東日本

フィルターで「Nested Virtualization対応」を絞り込む機能はポータル上に存在しないため、ドキュメントを参照しながらサイズを選定する必要があります。


Hyper-Vの有効化手順

VMサイズを正しく選定すれば、Azure VM上でのHyper-V有効化は通常のWindowsサーバーと同じ手順で行えます。

1. サーバーマネージャーから役割を追加する

サーバーマネージャーを開き、「役割と機能の追加」 から 「Hyper-V」 を選択してインストールします。

インストール中に仮想スイッチの設定画面が表示されます。ここで外部ネットワーク用のスイッチを作成しておきます。なお、このホストOSのNICが外部スイッチに紐付けられる形になるため、インストール完了後はHyper-Vの仮想スイッチ経由でIPアドレスを取得する構成になります。

2. 再起動後にHyper-Vマネージャーを確認する

インストール完了後にリモートデスクトップ接続が切れますが、しばらく待ってから再接続します。再接続後、Hyper-Vマネージャーを開くと、正常に有効化されていることを確認できます。

3. データディスクをフォーマットする

ゲストVMのディスクファイルを保存するため、Azureポータルで追加したデータディスクをフォーマットしておきます。本デモではDドライブに割り当てました。


ゲストVMの作成

Hyper-Vマネージャーから 「新規 → 仮想マシン」 でゲストVMを作成します。OSのインストールにはISOファイルを使用します。ISOファイルはホストVM上にダウンロードして、Hyper-Vマネージャーからマウントしてください。

VOMS::DW:i\nd(owsServ)er2019Datacenter()

ネットワーク構成の課題

ゲストVMを起動してOSのインストールが完了しても、そのままではネットワークに接続できません。これはAzure環境に起因する制限です。

ゲスト間通信について

同じ仮想スイッチに接続された複数のゲストVM同士であれば、通信は可能です。ただし、Windowsファイアウォールがデフォルトで有効になっているため、通信テストを行う場合はファイアウォールを一時的に無効化する必要があります。

外部通信ができない理由

Azure環境ではNICに対するMACアドレスが厳密に管理されています。ネスト環境では、ゲストVM → ホストVM → Azureインフラと複数のレイヤーを経由するため、ゲストVMが使用するMACアドレスがAzure側で認識されず、通信ができません。

オンプレミスではMACアドレスのスプーフィング設定で回避できますが、Azureではこの手法は使えません

解決策:NAT構成

Azureにおける現実的な解決策は NAT(ネットワークアドレス変換) を使う構成です。

手順1: Internal仮想スイッチの作成

Hyper-Vマネージャーの 「仮想スイッチマネージャー」 から、種類を 「内部」 に設定した仮想スイッチを新規作成します。

:I:ntVeMrNnaatl

手順2: NATの設定(PowerShell)

ホストOS上でPowerShellを管理者権限で実行し、NATを構成します。

# NATの作成
New-NetNat -Name "VMNat" -InternalIPInterfaceAddressPrefix "192.168.100.0/24"

手順3: ホストOSのNATアダプターにIPを割り当てる

Internalスイッチを作成すると、ホストOS上に対応するNICが自動作成されます。このNICにゲートウェイとなるIPアドレスを設定します。

IDPNS::1:9(22.5:15)6.(82.515)0.02.515.0/24)

手順4: ゲストVMのネットワーク設定

  • 仮想スイッチを先ほど作成した VMNat に変更します
  • ゲストOS内でIPアドレスを手動設定します
IDPNS::1:9822..5:815.6.18829..52815.0.1026.58x5..1(000.)1

この設定により、ゲストVMはホストOSのNATを経由してインターネットへアクセスできるようになります。また、同じVMNatスイッチに接続したゲストVM同士の通信も、もちろん可能です。


まとめ

Azure上でNested Hyper-Vを構成するポイントは以下の3点です。

  1. VMサイズの選定が最重要 — Nested Hyper-Vに対応したVMサイズを公式ドキュメントで確認し、必ず対応サイズを選ぶこと
  2. Hyper-Vの有効化はオンプレミスと同じ手順 — 正しいVMサイズを選定すれば、あとはサーバーマネージャーから通常通り有効化するだけ
  3. ネットワークはNATで解決 — Azure環境ではMACアドレススプーフィングが使えないため、Hyper-V上にInternal仮想スイッチとNATを構成してゲストVMの外部通信を実現する

この構成を活用すれば、Storage Spaces Directなど複数のHyper-Vホストを必要とする検証環境も、Azure上の単一VMで再現できます。物理マシンを複数台用意しなくても高度な仮想化検証が可能になりますので、ぜひ試してみてください。