가상 컴퓨터에서 중첩된 가상화를 사용하여 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 1주년 업데이트 이상이어야 합니다.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.
  • 두 번째 수준 가상 컴퓨터에 대한 가상 네트워킹에는 몇 가지 차이점이 있습니다.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

중첩된 가상 컴퓨터에는 두 가지 네트워킹 옵션이 있습니다.There are two options for networking with nested virtual machines:

  1. MAC 주소 스푸핑MAC address spoofing
  2. NAT 네트워킹NAT networking

MAC 주소 스푸핑MAC Address Spoofing

네트워크 패킷을 두 가상 스위치를 통해 전송하려면 첫 번째 수준(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)

두 번째 옵션은 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.

먼저 호스트 가상 컴퓨터("중간" VM)에서 가상 NAT 스위치를 만들어야 합니다.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

중접된 가상 컴퓨터 각각에는 IP 주소와 게이트웨이가 할당되어 있어야 합니다.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.