Cấu Hình Nested Virtualization trong Hyper-V
Cho phép một máy ảo (Virtual Machine – VM) đang chạy trên Hyper-V có thể tự cài đặt Hyper-V (hoặc các hypervisor khác) để chạy các máy ảo con bên trong nó.
Điều kiện tiên quyết (Prerequisites):
Đối với CPU Intel: Hỗ trợ công nghệ VT-x và EPT. Hệ điều hành máy chủ vật lý (Host) phải từ Windows Server 2016 hoặc Windows 10 trở lên (VM Configuration Version 8.0+).
Đối với CPU AMD: Hệ điều hành máy chủ vật lý (Host) phải từ Windows Server 2022 hoặc Windows 11 trở lên (VM Configuration Version 9.3+).
Microsoft Expert Pro-Tip : Để các máy ảo con (Nested VMs) có thể kết nối Internet hoặc mạng LAN, bạn bắt buộc phải bật tính năng MAC Address Spoofing trên card mạng của máy ảo chính. Nếu không, vSwitch của Hyper-V vật lý sẽ chặn các gói tin từ các địa chỉ MAC lạ của máy ảo bên trong.
Có thể sử dụng câu lệnh bên dưới trong giao diện PowerShell của Windows
Get-VMNetworkAdapter -VMName "VM_Name" | Set-VMNetworkAdapter -MacAddressSpoofing On
Khi một Hypervisor (như Hyper-V vật lý) chiếm quyền điều khiển phần cứng, nó sẽ “giấu” các tập lệnh mở rộng về ảo hóa của CPU (như Intel VT-x hoặc AMD-V) khỏi hệ điều hành khách (Guest OS). VM không hề biết nó đang chạy trên nền tảng ảo hóa và nghĩ rằng phần cứng không hỗ trợ tạo thêm máy ảo.
Tính năng Nested Virtualization hoạt động như một “đường ống xuyên thấu”. Lệnh -ExposeVirtualizationExtensions $true sẽ chỉ thị cho Hypervisor vật lý (Level 0) hiển thị và cho phép chuyển tiếp (passthrough) các cờ (flags) ảo hóa của CPU trực tiếp vào máy ảo (Level 1).

Kiến trúc mô hình Nested Virtualization
L0 (Host): Máy chủ vật lý (Bare-metal).
L1 (Guest Hypervisor): Máy ảo được cấp quyền Nested, đóng vai trò là một Hypervisor thứ hai.
L2 (Nested Guest): Máy ảo con chạy bên trong máy ảo L1.
Đây là một kỹ thuật cực kỳ phức tạp ở cấp độ Kernel, đòi hỏi khả năng xử lý dịch bộ nhớ phân tầng (Shadow Page Tables / Second Level Address Translation) sao cho L0 không bị nhầm lẫn với các yêu cầu phân bổ RAM từ L2.
Giá trị mang lại cho doanh nghiệp
Việc kích hoạt ảo hóa lồng nhau không chỉ là một “tính năng cho vui”, nó giải quyết những bài toán cốt lõi về chi phí và vận hành cho doanh nghiệp:
1. Tối ưu hóa chi phí môi trường Lab / DevTest / QA Thay vì phải mua 10 máy chủ vật lý để 10 lập trình viên hoặc kỹ sư hệ thống giả lập các môi trường mạng (Cluster, Domain Controller, Hyper-V Replica, Kubernetes nodes), doanh nghiệp chỉ cần 1 máy chủ vật lý mạnh mẽ duy nhất. Mỗi kỹ sư sẽ được cấp 1 máy ảo L1 và họ có thể tự do tạo ra cả một mô hình mạng ảo hóa khép kín bên trong đó mà không ảnh hưởng đến ai.
2. Triển khai Container và WSL 2 (Windows Subsystem for Linux) Các công cụ hiện đại như Docker Desktop (sử dụng Hyper-V backend) hoặc WSL 2 trên Windows đòi hỏi các tính năng ảo hóa phải được bật. Nếu bạn cấp phát máy ảo Windows 10/11 cho nhân viên làm việc qua VDI (Virtual Desktop Infrastructure) và họ cần code Docker, bạn bắt buộc phải bật Nested Virtualization.
3. Đào tạo và Trình diễn (Training & Demos) Đối với các đối tác Microsoft hoặc trung tâm đào tạo, việc mang vác các thiết bị vật lý để demo các giải pháp đám mây lai như Azure Stack HCI là bất khả thi. Nested Virtualization cho phép triển khai toàn bộ cụm Azure Stack HCI nhiều node (multi-node cluster) chỉ trên một chiếc laptop hoặc máy trạm duy nhất để demo cho khách hàng.
4. Quy trình CI/CD linh hoạt Trong các 파이peline tự động hóa (Continuous Integration), các runner/agent thường là các máy ảo ngắn hạn (ephemeral VMs). Nếu ứng dụng cần kiểm thử yêu cầu môi trường ảo hóa (ví dụ: test một công cụ quản lý máy ảo), Nested VM cho phép quy trình CI/CD tự động quay vòng các Hypervisor dùng một lần rồi xóa đi sau khi test xong.
Cấu hình Nested Virtualization
Bước 1: Trước khi thay đổi cấu hình bộ vi xử lý, máy ảo mục tiêu phải ở trạng thái tắt hoàn toàn (Off). Khuyến nghị nên backup hoặc Export máy ảo trước khi thực hiện để đề phòng rủi ro. (Bắt buộc)
Bước 2: Trên máy chủ HOST-HYPERV, truy cập vào giao diện Windows PowerShell (sử dụng quyền quản trị cao nhất)
Bước 3: Thực hiện câu lệnh
Set-VMProcessor -VMName “VM_Name” -ExposeVirtualizationExtensions $true
Nếu muốn vô hiệu hóa tính năng này sau này, bạn chỉ cần chạy lại lệnh trên và thay `$true` thành `$false`





































































































































































