︿
Top


網管人雜誌

本文刊載於 網管人雜誌第 232 期 - 2025 年 5 月 1 日出刊,NetAdmin 網管人雜誌 為一本介紹 Trend Learning 趨勢觀念、Solution Learning 解決方案、Technology Learning 技術應用的雜誌,下列筆記為本站投稿網管人雜誌獲得刊登的文章,網管人雜誌於每月份 1 日出刊您可於各大書店中看到它,或透過城邦出版人讀者服務網進行訂閱。





本文目錄






前言

Hyper-V「巢狀式虛擬化」(Nested Virtualization)技術,簡單來說,就是在 Hyper-V VM 虛擬主機環境中,能夠再啟用並執行 Hyper-V 虛擬化技術。過去,巢狀式虛擬化技術,通常被用於測試和研發用途居多,例如,在 VM 虛擬主機中執行 Visual Studio 手機模擬器,然而在容器風潮的世代下,透過整合巢狀式虛擬化的「Hyper-V 容器」(Hyper-V Container)技術,則能夠真正應用於正式營運環境,並進一步隔離及確保容器安全性。

在未支援或啟用 Hyper-V 巢狀式虛擬化的運作環境中,處於底層 Level 0 的 Hyper-V Hypervisor 虛擬化管理程序,將會完全掌管「虛擬化擴充功能」(Virtualization Extensions)的部分,並且 Hyper-V Hypervisor 虛擬化管理程序,不會將底層硬體輔助虛擬化功能,例如,Intel VT-x 或 AMD-V,傳遞給上層 Level 1 運作的 VM 虛擬主機客體作業系統(如圖 1 所示)。

圖 1、未支援或啟用 Hyper-V 巢狀式虛擬化的運作環境架構示意圖

現在,只要採用的硬體架構支援虛擬化技術,並且採用 Windows Server 2016、2019、2022、2025 伺服器作業系統,以及 Windows 10、11 客戶端作業系統時(如圖 2 所示),便能啟用 Hyper-V 巢狀式虛擬化技術,並且 Hyper-V Hypervisor 虛擬化管理程序,可以順利將底層硬體輔助虛擬化技術,傳遞給 Hyper-V 虛擬化平台上層運作的 VM 虛擬主機使用。

圖 2、Windows 10 及 11 安裝 Hyper-V 虛擬化技術示意圖

因此,舉例來說,採用的硬體支援硬體輔助虛擬化技術,安裝 Windows Server 2025 雲端作業系統,處於 Level 0 並啟用 Hyper-V 虛擬化功能後建立 VM 虛擬主機,在啟用巢狀式虛擬化技術後,處於 Level1 的 VM 虛擬主機也能啟用 Hyper-V 虛擬化功能,建立 Level 2 層級的 VM 虛擬主機,達成 VM 虛擬主機中再建立 VM 虛擬主機的巢狀式虛擬化運作架構(如圖 3 所示)。

圖 3、啟用 Hyper-V 巢狀式虛擬化的運作環境架構示意圖





實戰 – WS2025 Hyper-V 巢狀虛擬化技術

在開始實作 Hyper-V 巢狀式虛擬化之前,先了解運作環境需求以及相關限制,避免後續實作時發生不可預期的錯誤。

首先,在 x86 實體伺服器的 CPU 處理器選擇方面,應該選擇「高時脈」以便獲得更高效能的運算速度? 或者是選擇「多運算核心」達到平行運算的目的?

管理人員應該考量的重點在於,屆時運作於 Hyper-V 虛擬化平台上,大部份 VM 虛擬主機的作業系統和應用程式工作負載類型而定,舉例來說,當 VM 虛擬主機的應用程式工作負載,屬於「單線程」(Single-Thread)類型時,便應該選擇採用「高時脈」類型的 CPU 處理器較為適合,因為這類型的應用程式,即便為 VM 虛擬主機配置多個 vCPU 虛擬處理器,因為應用程式的單線程特性,也只能使用單一 vCPU 虛擬處理器進行運算,所以配置高時脈的 CPU 處理器才能正確的選擇,一般來說企業和組織倘若部署的 Hyper-V 主機叢集,為 VDI 遠端桌面應用時,便適合採購高時脈的 CPU 處理器。

那在當 VM 虛擬主機中,應用程式工作負載為「多線程」(Multi-Thread)類型時,就應該選擇「多核心」類型的 CPU 處理器,這時為 VM 虛擬主機配置多個 vCPU 虛擬處理器才有意義,因為應用程式的多線程特性,可以使用 VM 虛擬主機的多個 vCPU 虛擬處理器運算資源,執行平行運算的目的,所以高時脈便不是考量的重點,而是有越多的實體運算核心才是正確的,一般來說部署的 Hyper-V 主機叢集,為企業和組織各種伺服器應用時,或營運服務的應用程式具備多線程特性時,便適合採購高時脈的 CPU 處理器。

至於與作業系統版本搭配方面,當採用 Intel 處理器且支援 VT-x 和 EPT 硬體輔助虛擬化技術時,請使用 Windows Server 2016 或更新版本,使用 Windows 10(Pro 或 Enterprise)或更新版本,並且至少搭配 VM 虛擬主機組態「8.0」或更新版本,便能實作 Hyper-V 巢狀式虛擬化。

倘若,採用的是 AMD EPYC 或 Ryzen 處理器硬體輔助虛擬化技術時,則必須使用 Windows Server 2022 或更新版本,使用 Windows 11(Pro 或 Enterprise)或更新版本,並且至少搭配 VM 虛擬主機組態「9.3」或更新版本,才能實作 Hyper-V 巢狀式虛擬化。

在 Hyper-V 伺服器的實體記憶體方面,原則上當然是越多越好。主要原因在於,現代化的應用程式,工作負載越來越大,各類作業系統的運算資源最低需求也不斷提升,此外 Hyper-V 虛擬化環境,雖然支援記憶體資源超額使用機制。

然而,一旦過度超用記憶體資源時,當 Hyper-V 實體伺服器記憶體空間不足,便會迫使 Windows Server 作業系統,透過儲存資源空間產生分頁檔案,以便嘗試過渡記憶體空間不足的情況,簡單來說這將會直接影響並降低 Hyper-V 虛擬化平台的運作效能。

原則上,建議為正式營運的 Hyper-V 伺服器,提供足夠甚至更多的記憶體資源。倘若,因為企業或織礙於 IT 預算的關係,無法採購足夠的實體記憶體時,建議應該依照下列準則來優化分頁檔案的運作效率:
  • 管理人員應該將分頁檔案,指定產生在與 Hyper-V 運作隔離的儲存資源環境,也就是不要與 Windows Server 作業系統,或是應用程式工作負載採用同一個儲存資源。
  • 雖然,將分頁檔案指派在 SSD 固態硬碟時,可以在 Hyper-V 虛擬化使用到分頁檔案時,在效能表現上不致降低太多,然而若存放分頁檔案的 SSD 固態硬碟發生故障時,那麼系統可能會發生 BSOD 系統崩潰的情況產生。
  • 分頁檔案要採用隔離原則,不要將多個分頁檔案,同時產生在同一個儲存資源內。

原則上,在硬體伺服器或實體主機的部份,只要支援硬體輔助虛擬化技術,搭配上述符合版本需求的 Windows 作業系統便能實作 Hyper-V 巢狀式虛擬化。倘若,還是發生無法順利實作的情況,管理人員可以在主機中開啟命令提示字元,使用「systeminfo.exe」指令,確認是否符合 Hyper-V 虛擬化運作環境需求(如圖 4 所示)。

圖 4、確認硬體伺服器或實體主機是否正確支援硬體輔助虛擬化技術

上述是在企業或組織中,地端資料中心實作 Hyper-V 巢狀式虛擬化的部份。倘若,管理人員希望在 Azure 公有雲環境實作時,在建立 Azure VM 虛擬主機流程時,在 Security type 的部份必須選擇 「Standard」(預設值為 Trusted launch virtual machines),在 VM 虛擬主機 Size 部份則必須選擇 D 系列和 E 系列,才能 順利實作 Hyper-V 巢狀式虛擬化 (如圖 5 所示)。

圖 5、Azure VM 虛擬主機實作 Hyper-V 巢狀式虛擬化注意事項



Level 0 安裝 Hyper-V 虛擬化功能

首先,在 Level 0 層級實體伺服器環境中,安裝 Hyper-V 伺服器虛擬化角色,本文實作環境採用最新 Windows Server 2025 雲端作業系統(如圖 6 所示),管理人員可以透過伺服器管理員或 PowerShell 指令進行安裝作業。

圖 6、Level 0 層級實體伺服器安裝最新 Windows Server 2025 雲端作業系統

採用 GUI 圖形介面伺服器管理員進行安裝作業時,請依序點選「Server Manager > Add Roles and Features > Role-based or feature-based installation > Hyper-V > Create Virtual Switches > Virtual Machine Migration > Default Stores > Confirm installation selections > Restart the destination server automatically if required」,當 Hyper-V 伺服器角色安裝完畢後,系統便會自動重新啟動主機。

或是開啟 PowerShell 指令視窗,先執行「hostname」指令,確認 Level 0 層級實體伺服器的主機名稱,本文實作環境主機名稱為「Parent-HV」,接著鍵入「Install-WindowsFeature -Name Hyper-V -ComputerName Parent-HV -IncludeManagementTools -Restart」指令(如圖 7 所示),安裝 Hyper-V 伺服器角色及相關管理工具後重新啟動主機。

圖 7、Level 0 層級實體伺服器,安裝 Hyper-V 伺服器角色及管理工具

在建立 Level 1 層級的 VM 虛擬主機時,倘若希望屆時能夠啟用並支援 Hyper-V 巢狀式虛擬化技術時,那麼需要注意下列重要事項,避免屆時無法順利啟用 Hyper-V 巢狀式虛擬化技術:
  • VM 虛擬主機必須採用「第 2 世代」格式,以及至少「8.0」的 VM 虛擬主機組態版本。請注意,VM 虛擬主機世代一旦選擇後便無法更改世代,只能重新建立 VM 虛擬主機。
  • Level 0 層級實體主機,必須為 Level 1 層級 VM 虛擬主機,啟用 vCPU 處理器的虛擬化擴充功能,那麼 Level 1 層級 VM 虛擬主機,才能接收 Level 0 層級 Hyper-V 虛擬化平台,傳遞的硬體輔助虛擬化技術,進而再建立巢狀 VM 虛擬主機。
  • 巢狀虛擬化環境中的 VM 虛擬主機,建議「停用」動態記憶體功能。雖然,啟用動態記憶體功能不影響 VM 虛擬主機的運作,但屆時嘗試調整記憶體空間大小時,將會發生調整失敗的情況。
  • 巢狀虛擬化環境中,VM 虛擬主機必須啟用 MAC Address Spoofing 機制,或建立具備 NAT 功能的 vSwitch 虛擬網路交換器,否則屆時建立的 Nested VM 虛擬主機,將會發生無法與實體網路環境連通或連線至網際網路的情況。

在本文實作環境中,建立 Level 1 層級的 VM 虛擬主機名稱為「Guest-HV」,並採用第二世代格式,而 VM 虛擬主機組態設定格式為最新的「12.0」版本(如圖 8 所示)。

圖 8、Level 1 層級的 VM 虛擬主機,建立時採用第二世代格式及 12.0 組態版本



Level 1 啟用巢狀式虛擬化技術

登入 Level 1 層級的 Guest-HV 虛擬主機後,同樣透過伺服器管理員或 PowerShell 指令,嘗試安裝 Hyper-V 伺服器角色,然而當勾選「Hyper-V」伺服器角色項目後,在系統執行檢查程序完畢後,將會出現「無法安裝 Hyper-V :處理器沒有所需要的虛擬化功能」的錯誤訊息(如圖 9 所示)。

圖 9、Level 1 層級的 VM 虛擬主機無法安裝 Hyper-V 伺服器角色

此時,管理人員可以透過 微軟官方工具 Sysinternals – Coreinfo,檢查 Level 1 層級的 VM 虛擬主機虛擬化擴充功能狀態,下載後解壓縮無須安裝,在命令提示字元視窗中鍵入「coreinfo64.exe -v」指令(如圖 10 所示),即可檢查在 Level 1 層級的 Guest-HV 虛擬主機中,是否具備 Intel VT-x 及 EPT 硬體輔助虛擬化功能,從檢查結果中可以看到,Level 1 層級的 Guest-HV 虛擬主機,並沒有接收到底層 Level 0 主機,傳遞過來的硬體輔助虛擬化功能,才會導致無法順利安裝 Hyper-V 伺服器角色。

圖 10、Level 1 層級的 Guest-HV 虛擬主機未具備硬體輔助虛擬化功能

因此,管理人員必須為 Level 1 層級的 Guest-HV 虛擬主機,執行啟用巢狀式虛擬化技術,正確接收來至底層 Level 0 主機向上傳遞的硬體輔助虛擬化功能,一旦接收並具備 Intel VT-x 及 EPT 硬體輔助虛擬化技術後,Level 1 層級的 Guest-HV 虛擬主機,便能順利安裝 Hyper-V 伺服器角色。

值得注意的是,當準備為 Level 1 層級的 Guest-HV 虛擬主機,啟用巢狀式虛擬化技術時,Guest-HV 虛擬主機必須為「關機」(Power Off)狀態,才能透過 PowerShell 指令啟用巢狀式虛擬化技術,倘若為「開機中」(Power On)狀態,啟用巢狀式虛擬化技術時,將會遭遇「修改 Processor 處理器失敗」的錯誤訊息。

確認 Level 1 層級的 Guest-HV 虛擬主機關機後,在 Level 0 層級的 Parent-HV 主機中,開啟 PowerShell 指令視窗,並執行「Set-VMProcessor -VMName Guest-HV – ExposeVirtualizationExtensions $true」指令,啟用巢狀式虛擬化技術,並再次確認 Guest-HV 虛擬主機屬性中,ExposeVirtualizationExtensions 欄位值是否轉變為「True」,以便確認變更作業是否套用生效,確認後便可以將 Guest-HV 虛擬主機開機(如圖 11 所示)。

圖 11、為 Level 1 層級 Guest-HV 虛擬主機啟用巢狀式虛擬化技術

Level 1 層級 Guest-HV 虛擬主機開機完成後,請再次執在命令提示字元視窗中鍵入「coreinfo64.exe -v」指令,從檢查結果中可以看到,Level 1 層級的 Guest-HV 虛擬主機,確實接收到由底層 Level 0 主機,傳遞過來的 Intel VT-x 及 EPT 硬體輔助虛擬化功能,如此一來便能順利安裝 Hyper-V 伺服器角色(如圖 12 所示)。

圖 12、Level 1 層級 Guest-HV 虛擬主機,順利接收底層傳遞而來的硬體輔助虛擬化功能



巢狀網路 1 – MAC 位址變更

當管理人員順利為 Level 1 層級 Guest-HV 虛擬主機,安裝 Hyper-V 伺服器角色,並建立 Level 2 層級名稱為「Nested-VM01」虛擬主機後,將會發現雖然 Nested-VM01 虛擬主機,網路組態設定正確無誤,並且連接至正確的 vSwitch 虛擬網路交換器,但是卻無法和實體網路環境溝通或連接到網際網路(如圖 13 所示)。

圖 13、Level 2 層級虛擬主機無法和實體網路溝通

這個問題的原因在於,Level 2 層級的 Nested-VM01 虛擬主機,網路封包必須通過 Level 1 層級主機後,才能和 Level 0 層級的 vSwitch 虛擬網路交換器連接,也才能和實體網路環境或網際網路環境通訊。因此,Level 2 層級的網路封包要能夠正確路由的話,必須為 Level 1 層級的 vSwitch 虛擬網路交換器,啟用「MAC 位址欺騙」(MAC Address Spoofing)功能後,Level 2 層級的網路封包才能正確通過 Level 1 層級,並使用 Level 0 層級的路由機制,與實體網路環境或網際網路通訊。

管理人員有兩種方式,為 Level 1 層級的 Guest-HV 虛擬主機啟用 MAC 位址欺騙功能。首先,請登入 Level 0 層級 Parent-HV 實體主機,在開啟 PowerShell 指令視窗後,鍵入「Get-VMNetworkAdapter -VMName Guest-HV | Set-VMNetworkAdapter -MacAddressSpoofing On」指令,並於指令執行成功後,確認 Level 1 層級 Guest-HV 虛擬主機屬性中,名稱為「MacAddressSpoofing」的欄位值是否轉變為「On」,確認 MAC 位址欺騙功能已經套用生效(如圖 14 所示)。

圖 14、在 Level 0 層級為 Level 1 層級主機啟用 MAC 位址欺騙功能

習慣使用 Hyper-V Manager 圖形化介面的管理人員,也可以開啟 Level 1 層級 Guest-HV 虛擬主機組態設定視窗中,依序點選「Network Adapter > Advanced Features > MAC address」選項後,勾選「Enable MAC address spoofing」項目後,按下 OK 鈕即可套用生效(如圖 15 所示)。

圖 15、透過 Hyper-V Manager 為 Level 1 層級主機啟用 MAC 位址欺騙功能

此時,切換回 Level 2 層級的 Nested-VM01 虛擬主機,執行「ipconfig /renew」指令,可以發現送出的 DHCP Client 請求網路封包,已經能夠順利通過 Level 1 層級的 vSwitch 虛擬交換器,直接向 Level 0 層級的 DHCP 伺服器請求獲得 IP 位址(如圖 16 所示),當然也可以和實體網路環境或網際網路進行通訊。

圖 16、Level 2 層級主機順利和 Level 0 層級實體網路環境進行通訊



巢狀網路 2 – NAT 網路位址轉換

在上述巢狀網路方法 1 的情境中,適合用於企業及組織自建的 Hyper-V 虛擬化環境,因為管理人員可以掌控 Level 0 層級的實體伺服器,為 Level 1 層級的 VM 虛擬主機,啟用 MAC 位址欺騙功能,讓 Level 2 層級的巢狀 VM 虛擬主機的網路封包,能夠正確通過 vSwitch 虛擬網路交換器後,正確路由至 Level 0 層級的實體網路環境。

然而,一旦 Hyper-V 虛擬化環境,運作在管理人員無法掌控 Level 0 層級的實體伺服器時,便無法為 Level 1 層級的 VM 虛擬主機啟用 MAC 位址欺騙功能,舉例來說,當企業和組織使用 Azure 公有雲環境時,由於部署使用的 Azure VM 虛擬主機,已經屬於 Level 1 層級的 VM 虛擬主機,企業和組織無法碰觸到 Azure 公有雲環境中,屬於 Level 0 層級的 Hyper-V 主機,自然就無法為 Level 1 層級 VM 虛擬主機啟用 MAC 位址欺騙功能。

此時,便適合使用此情境,在 Level 1 層級 Guest-HV 虛擬主機上,建立具備 NAT 網路位址轉換功能的 vSwitch 虛擬網路交換器,以便 Level 2 層級的 Nested-VM01 虛擬主機,可以透過 Level 1 層級的 NAT 網路位址轉換機制,讓 Level 2 層級的網路封包能夠被正確路由,進而與 Level 0 層級的實體網路環境或網際網路進行通訊。

在實作巢狀網路方法 2 之前,請先將剛才巢狀網路方法 1 的機制取消,在 Level 1 層級 Guest-HV 虛擬主機,取消 MAC 位址欺騙功能,以避免影響和驗證實作巢狀網路方法 2 的正確性。

請在 Level 1 層級 Guest-HV 虛擬主機上,開啟的 PowerShell 指令視窗中,執行「New-VMSwitch -Name Level1-NAT-vSwitch –SwitchType Internal」指令,建立名稱為「Level1-NAT-vSwitch」,且類型為「內部」(Internal)的 vSwitch 虛擬網路交換器。

接著,執行「New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix "192.168.75.0/24"」指令,建立名稱為「LocalNAT」且網段為「192.168.75.0/24」的 NAT 網路位址轉換環境(如圖 17 所示)。

圖 17、建立網段為 192.168.75.0/24 的 NAT 網路位址轉換環境

最後,為剛才建立名稱為 Level1-NAT-vSwitch 的虛擬網路交換器,指定採用的 IP 位址即可。請在開啟的 PowerShell 指令視窗中,執行「Get-NetAdapter "vEthernet(Level1-NAT-vSwitch)" | New-NetIPAddress –IPAddress 192.168.75.254 –AddressFamily IPv4 –PrefixLength 24」指令(如圖 18 所示)。事實上,Level1-NAT-vSwitch 虛擬網路交換器的 IP 位址,也是屆時 Level 2 虛擬網路環境的預設閘道 IP 位址。

圖 18、為 Level1-NAT-vSwitch 虛擬網路交換器指定 IP 位址

現在,為避免巢狀網路方法 1 的影響,請登入 Level 2 層級的 Nested-VM01 虛擬主機後,先在 Cmd 命令提示字元視窗中,執行「ipconfig /release」指令,將巢狀網路方法 1 透過 DHCP Client 機制,獲取的 10.10.75.0/24 網段的 IP 位址釋放。

請為 Level 2 層級的 Nested-VM01 虛擬主機,調整網路介面卡所連接的 vSwitch 虛擬網路交換器,在本文實作環境中,請改為連接至剛才建立的 Level1-NAT-vSwitch 虛擬網路交換器,而網路卡組態設定方面,指派 IP 位址為 192.168.75.20,預設閘道 IP 位址為 192.168.75.254(如圖 19 所示)。

圖 19、Level 2 層級 Nested-VM01 虛擬主機透過 NAT 機制與實體網路環境通訊



再建立 Level 3 層級 VM 虛擬主機?

至此,已經順利在最新 Windows Server 2025 雲端作業系統,透過原生內建的 Hyper-V 巢狀式虛擬化技術,建立 Nested VM 巢狀式運作環境,讓企業和組織的管理人員,只要透過一台 x86 硬體伺服器,便能建構出「Level 0 Hyper-V 實體主機> Level 1 VM 虛擬主機> Level 2巢狀式 VM 虛擬主機」,的 Hyper-V 巢狀式虛擬化運作環境。

那麼,管理人員可能會有疑惑,有沒有可能在 Level 2 層級巢狀式 VM 虛擬主機中,建立 Level 3 層級的巢狀式 VM 虛擬主機 ?事實上,是可行的,只要依照先前提到的 Hyper-V 巢狀式虛擬化技術,滿足運作環境需求及限制時,便可以讓 Level 2 層級巢狀式 VM 虛擬主機,再部署出 Level 3 層級巢狀式 VM 虛擬主機。

值得注意的是,在操作 Level 2 層級巢狀式 VM 虛擬主機時,管理人員應該有感受到,在操作流暢度上與 Level 1 VM 虛擬主機的差別,所以在技術上雖然能夠由 Level 2 層級,再次部署出 Level 3 層級的巢狀式 VM 虛擬主機,但實務上並不會真實使用,因為在操作流暢度和效能表現上並無法令人接受。





結語

透過本文的深入剖析和實戰演練後,管理人員應該已經理解,在 Hyper-V 虛擬化基礎架構中,當企業和組織的管理人員,需要實作 Nested VM 巢狀式虛擬化環境時,只要滿足運作環境需求及相關限制時,便能順利建構出 Hyper-V 巢狀式虛擬化環境,即便使用 Azure 公有雲環境也不受限制。