안녕하세요.

2071년 첫 포스팅입니다. 2017년에는 조금 더 자주 포스팅 하겠습니다.

 

이번 포스팅은 Windows Server 2016 Hyper-V에서 새롭게 추가된 가상머신에서 Hyper-V를 실행할 수 있도록 해주는 중첩 가상화(Nested Virtualization) 기술입니다. 중첩 가상화는 Hyper-V 가상 컴퓨터 내부에서 Hyper-V를 실행할 수있게 해주는 기능으로 중첩된 가상화를 사용하면 Hyper-V 호스트 자체를 가상화 할 수 있습니다. 중첩된 가상화의 사용 사례 중 일부는 가상화 된 컨테이너 호스트에서 Hyper-V 컨테이너를 실행하거나 가상화된 환경에서 Hyper-V 테스트 랩을 구성하거나 개별 하드웨어가 필요하지 않은 다중 컴퓨터 시나리오를 테스트할 수 있습니다.

 

이번 포스팅에서는 소프트웨어 및 하드웨어 필수 구성 요소, 구성 단계 및 제한 사항에 대해 설명합니다.

 

[소프트웨어 및  하드웨어 필수구성 요소]

  • A Hyper-V host running Windows Server 2016 or Windows 10 Anniversary Update.
  • A Hyper-V VM running Windows Server 2016 or Windows 10 Anniversary Update.
  • A Hyper-V VM with configuration version 8.0 or greater.
  • An Intel processor with VT-x and EPT technology.
  •  

     

    소프트웨어 및 하드웨어 필수구성 요소를 확인하여 준비하였다면 이번에는 중첩 가상화를 구성할 차례입니다.

     

    만일 중첩 가상화를 구성하지 않은 상태에서 Hyper-V에 생성한 VM에 Hyper-V를 설치하려는 경우 다음과 같이 유효성 검사 시 에러가 발생되며 Hyper-V를 설치할 수 없습니다,

     

     

    [중첩 가상화 구성하기]
    1. 가상 머신을 구성합니다, 가상머신 구성 시에는 위의 필수구성 요소에 맞게 생성합니다.

    2. 가상 머신이 종료된 상태에서 Hyper-V Host에서 다음과 같은 Powershell 명령어를 실행하여 가상머신에서 중첩 가상화를 사용할 수 있도록 합니다.

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

     

    예) 가상머신 이름이 TEST01인 경우 다음과 같이 Powershell 명령어를 실행하여 중첩 가상화를 설정합니다.

    Set-VMProcessor -VMName "TEST01" -ExposeVirtualizationExtensions $true

     

    중첩 가상화 설정 시에는 중첩 가상화를 구성할 VM은 반드시 종료되어 있어여 하며 켜져있는 경우 중첩 가상화를 설정할 수 없으며 다음과 같이 오류가 발생됩니다. 

     

    3. 중첩 가상화를 설정한 가상머신을 실행한 후 Hyper-V 역할을 설치합니다. Hyper-V 역할은 물리서버와 동일한 방법으로 서버 관리자 GUI를 통해 설치하거나 Powershell을 통해 설치할 수 있습니다.

     

    4. Hyper-V 역할 설치가 완료되면 가상머신을 생성 후 실행해보면 물리서버에서와 동일하게 VM 생성 및 실행이 가능한 것을 확인할 수 있습니다.

     

     

    [중첩 가상화 사용하지 않도록 구성하기]

    중첩 가상화 구성 시와 동일하게 Powershell 명령어를 통해 가상머신에 구성한 중첩 가상화를 사용하지 않도록 설정할 수 있습니다. (중첩 가상화 설정 시와 동일하게 가상머신이 종료되어 있어야 합니다)

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

     

    만일, 중첩 가상화를 사용하지 않도록 구성하려는 VM이 켜져있는 경우 중첩 가상화 설정 시와 동일하게 오류가 발생합니다.

     

    중첩 가상화를 사용하지 않도록 구성한 후에 중첩 가상화로 구성한 VM Hyper-V HOST에 생성한 VM을 시작해보면 VM이 시작되지 않으면 다음과 같이 에러가 발생됩니다. 

     

     

     

     

    중첩 가상화 구성을 완료하였다면 중첩 가상화로 구성한 VM에 내부에 생성된 VM에서 네트워크를 사용하기 위해서는 MAC 주소 스푸핑 또는 NAT를 두가지 옵션 중 한가지를 선택하여 사용하여야 합니다.

     

    [MAC 주소 스푸핑]

    두 개의 가상 스위치를 통해 네트워크 패킷을 라우팅하려면 첫 번째 가상 스위치인 물리서버에서 중첩 가상화를 사용하도록 설정한 가상머신에 MAC 주소 스푸핑을 사용하도록 설정해야합니다.

     

    파워쉘을 실행하여 MAC 주소 스푸핑을 사용하도록 설정할 수도 있습니다.

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

    예) 가상머신 이름이 TEST01인 경우 다음과 같이 Powershell 명령어를 실행하여 MAC 주소 스푸핑을 사용하도록 설정합니다.

    Get-VMNetworkAdapter -VMName TEST01 | Set-VMNetworkAdapter -MacAddressSpoofing On

     

    또는, Hyper-V 관리자를 실행한 후 중첩 가상화를 구성한 VM의 네트워크 어앱터의 MAC 주소 스푸핑을 사용하도록 설정할 수 있습니다.

     

    MAC 주소 스푸핑을 구성하기 전에는 중첩 가상화를 구성한 VM Hyper-V HOST에서 실행 중인 VM이 DHCP를 통해 IP를 할당받지 못하는 것을 볼 수 있습니다.

     

    하지만, MAC 주소 스푸핑을 구성한 후에는 DHCP를 통해 IP를 할당받아 통신이 가능한 것을 확인할 수 있습니다.

     

    물론 DHCP가 아닌 고정 IP 주소를 사용하는 경우에도 MAC 주소 스푸핑을 사용하도록 구성하지 않는다면 중첩 가상화를 구성한 VM Hyper-V HOST에서 실행 중인 VM은 외부와의 통신이 불가능하며 MAC 주소 소푸핑을 구성한 후에 통신이 가능합니다. ^^

     

     

    [네트워크 주소 변환]

    두번째는 MAC 주소 스푸핑을 사용할 수 없는 Cloud 환경에서 사용할 수 있는 NAT에 의존하는 방법으로, 중첩 가상화를 적용한 호스트 가상 컴퓨터에 가상 NAT 스위치를 만들어 사용하는 방법입니다. (하기 IP주소는 예로 상황에 따라 변경하여 사용합니다)

    New-vmswitch -name VmNAT -SwitchType Internal
    New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix “192.168.100.0/24

     

    NAT 스위치는 GUI를 통해서도 만들 수 있습니다.

     

    가상 스위치를 만들었다면 Powershell 명령어를 통해 NAT를 구성합니다.

    다음으로는 중첩 가상화를 적용한 호스트 가상 컴퓨터에 IP를 할당합니다.

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

     

    물론, GUI를 통해서도 다음과 같이 IP를 설정할 수 있습니다.

     

     

    이제 중첩 가상화 호스트에 생성한 가상머신에 IP주소를 할당합니다. 이때 IP 주소에는 게이트웨이가 할당되어 있어여 하며 게이트웨이 주소는 중첩 가상화를 적용한 호스트 가상 컴퓨터의 NAT IP 주소로 설정합니다.

    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> 

     

    예를 들어 중첩 가상화 호스트에 실행 중읜 VM의 네트워크 어댑터 이름이 "어댑터 2"이고 IP를 192.168.100.2로 구성하려는 경우 다음과 같이 입력합니다.

    Get-netadapter "이더넷 2" | New-NetIPAddress -IPAddress 192.168.100.2 -DefaultGateway 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24

     

    NAT 구성이 완료되면 다음과 같이 물리서버 Hyper-V HOST와도 정상적으로 통신이 가능한 것을 확인할 수 있습니다.

     

     

    [타사 가상화 응용 프로그램]

    Hyper-V 이외의 가상화 응용 프로그램은 Hyper-V 가상 컴퓨터에서 지원되지 않으므로 실패 할 수 있습니다. 여기에는 하드웨어 가상화 확장이 필요한 모든 소프트웨어가 포함됩니다.

     

     

     

    이상으로 Windows Server 2016에서 새롭게 추가된 중첩 가상화에 대한 포스팅을 마치며, 해당 포스팅 내용은 원본 사이트의 내용을 번역 및 추가하였음을 밝힙니다.

     

     

    원본사이트: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/nested-virtualization

     

     

    감사합니다.

     

    (+) 늦었지만 새해 복 많이 받으세요.~^^

     

     

     

     

    + Recent posts