入れ子になった仮想化による仮想マシンでの Hyper-V の実行Run Hyper-V in a Virtual Machine with Nested Virtualization

入れ子になった仮想化は、Hyper-V 仮想マシン (VM) 内での Hyper-V の実行を可能にする機能です。Nested virtualization is a feature that allows you to run Hyper-V inside of a Hyper-V virtual machine (VM). これは、仮想マシンで Visual Studio 電話エミュレーターを実行する場合や、通常は複数のホストが必要な構成のテストを行う場合に便利です。This is helpful for running a Visual Studio phone emulator in a virtual machine, or testing configurations that ordinarily require several hosts.

前提条件Prerequisites

  • Hyper-V ホストとゲストの両方が Windows Server 2016/Windows 10 Anniversary Update 以降であること。The Hyper-V host and guest must both be Windows Server 2016/Windows 10 Anniversary Update or later.
  • VM 構成バージョン 8.0 以上。VM configuration version 8.0 or greater.
  • VT-x および EPT テクノロジを使用する Intel プロセッサ。入れ子は現在 Intel のみでサポートされています。An Intel processor with VT-x and EPT technology -- nesting is currently Intel-only.
  • 第 2 レベルの仮想マシンの仮想ネットワークとは、いくつかの違いがあります。There are some differences with virtual networking for second-level virtual machines. 入れ子になった仮想マシン ネットワークに関する記述をご覧ください。See "Nested Virtual Machine Networking".

入れ子になった仮想化の構成Configure Nested Virtualization

  1. 仮想マシンを作成します。Create a virtual machine. 必要な OS と VM のバージョンについては、前述の前提条件をご覧ください。See the prerequisites above for the required OS and VM versions.
  2. 仮想マシンがオフ状態のときに、次のコマンドを物理的 Hyper-V ホスト上で実行します。While the virtual machine is in the OFF state, run the following command on the physical Hyper-V host. これで、この仮想マシンに対して入れ子になった仮想化が有効になります。This enables nested virtualization for the virtual machine.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
  1. 仮想マシンを開始します。Start the virtual machine.
  2. Hyper-V を仮想マシン内にインストールします。方法は物理サーバーの場合と同様です。Install Hyper-V within the virtual machine, just like you would for a physical server. Hyper-V のインストールの詳細については、Hyper-V のインストールに関するページを参照してください。For more information on installing Hyper-V see, Install Hyper-V.

入れ子になった仮想化の無効化Disable Nested Virtualization

停止している仮想マシンに対して、入れ子になった仮想化を無効にするには、次の PowerShell コマンドを使用します。You can disable nested virtualization for a stopped virtual machine using the following PowerShell command:

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $false

動的メモリとランタイム メモリ サイズ変更Dynamic Memory and Runtime Memory Resize

Hyper-V が仮想マシンの中で実行されているときに、仮想マシンのメモリを調整するには、仮想マシンをオフにする必要があります。When Hyper-V is running inside a virtual machine, the virtual machine must be turned off to adjust its memory. つまり、動的メモリが有効になっている場合でも、メモリの量が変動することはありません。This means that even if dynamic memory is enabled, the amount of memory will not fluctuate. 動的メモリが有効になっていない仮想マシンでは、仮想マシンがオンの状態でメモリの量を調整しようとすると失敗します。For virtual machines without dynamic memory enabled, any attempt to adjust the amount of memory while it's on will fail.

なお、入れ子になった仮想化を有効にするだけでは、動的メモリやランタイム メモリ サイズ変更への影響はありません。Note that simply enabling nested virtualization will have no effect on dynamic memory or runtime memory resize. これらに対応できなくなるのは、Hyper-V が VM の中で実行中のときに限られます。The incompatibility only occurs while Hyper-V is running in the VM.

ネットワーク オプションNetworking Options

入れ子になった仮想マシンのネットワーキングには、2 つのオプションがあります。There are two options for networking with nested virtual machines:

  1. MAC アドレスのスプーフィングMAC address spoofing
  2. NAT ネットワークNAT networking

MAC アドレスのスプーフィングMAC Address Spoofing

2 つの仮想スイッチを通じてネットワーク パケットをルーティングするには、仮想スイッチの最初の (L1) レベルで MAC アドレスのスプーフィングを有効にする必要があります。In order for network packets to be routed through two virtual switches, MAC address spoofing must be enabled on the first (L1) level of virtual switch. この処理は、次の PowerShell コマンドを使って完了できます。This is completed with the following PowerShell command.

Get-VMNetworkAdapter -VMName <VMName> | Set-VMNetworkAdapter -MacAddressSpoofing On

ネットワーク アドレス変換 (NAT)Network Address Translation (NAT)

2 番目のオプションは、ネットワーク アドレス変換 (NAT) に依存します。The second option relies on network address translation (NAT). この方法は、MAC アドレスのスプーフィングを利用できない場合 (パブリック クラウド環境など) に最適です。This approach is best suited for cases where MAC address spoofing is not possible, like in a public cloud environment.

最初に、仮想 NAT スイッチをホストの仮想マシン ("中間"の VM) に作成する必要があります。First, a virtual NAT switch must be created in the host virtual machine (the "middle" VM). IP アドレスはただの一例で、環境によって異なることに注意してください。Note that the IP addresses are just an example, and will vary across environments:

New-VMSwitch -Name VmNAT -SwitchType Internal
New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix “192.168.100.0/24”

次に、IP アドレスをネット アダプターに割り当てます。Next, assign an IP address to the net adapter:

Get-NetAdapter "vEthernet (VmNat)" | New-NetIPAddress -IPAddress 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24

入れ子になった仮想マシンごとに 1 つの IP アドレスと 1 つのゲートウェイが割り当てられている必要があります。Each nested virtual machine must have an IP address and gateway assigned to it. ゲートウェイ IP は、前の手順で説明した NAT アダプターをポイントする必要があります。Note that the gateway IP must point to the NAT adapter from the previous step. 必要に応じて、DNS サーバーも割り当てます。You may also want to assign a DNS server:

Get-NetAdapter "Ethernet" | New-NetIPAddress -IPAddress 192.168.100.2 -DefaultGateway 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24
Netsh interface ip add dnsserver “Ethernet” address=<my DNS server>

入れ子になった仮想化のしくみHow nested virtualization works

最新のプロセッサには、仮想化をさらに高速かつ安全にするためのハードウェア機能が含まれています。Modern processors include hardware features that make virtualization faster and more secure. Hyper-V は、これらのプロセッサ拡張機能に依存して仮想マシンを実行しています (Intel VT-x や AMD-V など)。Hyper-V relies on these processor extensions to run virtual machines (e.g. Intel VT-x and AMD-V). 通常、Hyper-V が起動すると、他のソフトウェアがこれらのプロセッサ機能を使用できなくなります。Typically, once Hyper-V starts, it prevents other software from using these processor capabilities. これは、ゲスト仮想マシンによる Hyper-V の実行を回避します。This prevents guest virtual machines from running Hyper-V.

入れ子になった仮想化では、このハードウェア サポートをゲスト仮想マシンでも利用できます。Nested virtualization makes this hardware support available to guest virtual machines.

次の図は、入れ子になっていない Hyper-V を示しています。The diagram below shows Hyper-V without nesting. Hyper-V ハイパーバイザーは、ハードウェア仮想化機能 (オレンジ色の矢印) を完全に制御し、ゲスト オペレーティング システムには公開しません。The Hyper-V hypervisor takes full control of the hardware virtualization capabilities (orange arrow), and does not expose them to the guest operating system.

これに対し、次の図は、入れ子になった仮想化が有効な状態の Hyper-V を示しています。In contrast, the diagram below shows Hyper-V with nested virtualization enabled. この場合、Hyper-V は、ハードウェア仮想化拡張機能をその仮想マシンに公開します。In this case, Hyper-V exposes the hardware virtualization extensions to its virtual machines. 入れ子が有効になると、ゲスト仮想マシンは独自のハイパーバイザーをインストールし、独自のゲスト VM を実行します。With nesting enabled, a guest virtual machine can install its own hypervisor and run its own guest VMs.

サード パーティの仮想化アプリ3rd Party Virtualization Apps

Hyper-V 以外の仮想化アプリケーションは Hyper-V 仮想マシンではサポートされず、ほとんどの場合は実行に失敗します。Virtualization applications other than Hyper-V are not supported in Hyper-V virtual machines, and are likely to fail. これには、ハードウェア仮想化拡張機能を必要とするソフトウェアも含まれます。This includes any software that requires hardware virtualization extensions.