对客户操作系统隐藏虚拟机状态

对客户操作系统隐藏虚拟机状态

主机操作系统:Fedora 客户机操作系统:Windows 10 虚拟化:KVM

因此,这个想法是运行一台不知道它是虚拟机的 Windows 10 主机。因此,当我在客户 Windows 机器上打开任务管理器并进入性能选项卡时,“虚拟机”标签设置为“否”。到目前为止,我已经了解到任务管理器根据以下两个参数做出决定:

  1. 测试 CPUID 虚拟机管理程序存在位
  2. 测试虚拟 BIOS DMI 信息和管理程序端口

我希望在虚拟机中运行 Windows 10(作为客户机),并确认它不在虚拟机中。原因有很多:GPU 直通、驱动程序终止开关、测试等……

有人能帮我配置这台虚拟机,让它不再知道自己是一台虚拟机吗?

我也在使用 Virt-Manager。

Michael 在下面给出的答案解决了这个问题并提供了明确的指导。但是,尽管目的已经实现,任务管理器中不再将其报告为虚拟机,但在 powershell 中运行“systeminfo”命令时,一切都正常,除了“BIOS 版本”显示为“SeaBios-......fedora28......”和“系统制造商”显示为“QEMU”。

这些参数也可以改变吗?

感谢您付出的时间和精力。

答案1

要向客户操作系统隐藏虚拟机管理程序,您需要做两件事:

  • 隐藏虚拟机管理程序 CPU 功能标志。
  • 隐藏虚拟机管理程序 CPUID 叶子。

这些都无法完全在 virt-manager 中完成;您必须编辑虚拟机 XML。

默认情况下,CPU 设置为“Hypervisor 默认值”:

virt-manager Hypervisor 默认的 CPU 选择

这会导致“QEMU 虚拟 CPU 版本 2.5+”

带有 QEMU 虚拟 CPU 的任务管理器

首先,您需要在 virt-manager 中设置 CPU 类型。默认 QEMU 虚拟 CPU 无法在 libvirt 中删除其虚拟机管理程序标志。

为了获得最佳性能和功能,您只需选择“复制主机 CPU 配置”并“应用”。这将允许您使用嵌套虚拟化,在此虚拟机内运行 64 位加速虚拟机。

virt-manager CPU 设置复制主机 CPU 配置

现在虚拟机 XML 中将有一个 CPU 部分可供您编辑。运行sudo virsh edit <vmname>。CPU 部分将如下所示:

  <cpu mode='host-model' check='partial'>
    <model fallback='allow'/>
  </cpu>

您需要添加一个元素来删除虚拟机管理程序 CPU 功能,使其看起来像这样:

  <cpu mode='host-model' check='partial'>
    <model fallback='allow'/>
    <feature policy='disable' name='hypervisor'/>
  </cpu>

现在您还需要禁用虚拟机管理程序 CPUID 叶子。这允许 NVIDIA 驱动程序等其他一些功能正常运行。

这是通过在元素内部添加新元素来实现的<features>

就在上文:

  </features>

您应该添加:

  <kvm>
    <hidden state='on'/>
  </kvm>

现在,关闭虚拟机并重新启动(重新启动是不够的;需要完全关闭)。

此时任务管理器显示:

具有复制主机型号 CPU 的任务管理器

您也可以systeminfo在 PowerShell 或命令提示符中运行。如果一切顺利,您将在底部看到 Hyper-V 部分中的所有“是”答案:

Hyper-V Requirements:      VM Monitor Mode Extensions: Yes
                           Virtualization Enabled In Firmware: Yes
                           Second Level Address Translation: Yes
                           Data Execution Prevention Available: Yes

现在你可以做任何你想做的事了。

答案2

将这些添加到您的 VMX 文件中:-

monitor_control.virtual_rdtsc = "FALSE"
monitor_control.restrict_backdoor = "TRUE"
isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"
hypervisor.cpuid.v0 = "FALSE"

相关内容