在Linux上使用 KVM + QEMU 安装 Windows 虚拟机 保姆级教程

在Linux上使用 KVM + QEMU 安装 Windows 虚拟机 保姆级教程

我有一台安装了debian12的服务器,它只有一个IP,但配置还不错,我想在这台服务器上用什么样的方法安装一台windows,我可以在windows上面常年挂机一个采集器跑任务。最后我选择使用KVM + QEMU 安装 Windows 虚拟机,记录下过程,给以后有相关需求的朋友借鉴。

原理:

Debian 本身作为宿主机,安装 KVM 和 QEMU 组件,然后通过创建虚拟机的方式安装 Windows,并通过 端口映射或桥接网络 实现远程访问。


一、准备工作

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装 KVM 和 QEMU
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager -y

# 查看是否支持虚拟化(输出含有 vmx 或 svm 即支持)
egrep -c '(vmx|svm)' /proc/cpuinfo




二、创建桥接网络(可选,但推荐)

如果你希望 Windows 虚拟机能像正常机器一样联网(例如使用 RDP),而不是共享宿主机的网络,可以配置桥接网络(需要小改 /etc/network/interfaces 或用 Netplan)。

但如果你只用一个公网IP,可以考虑:

NAT 网络 + 端口转发(简单)

或使用 端口反向代理/RDP端口转发

三、创建并安装 Windows 虚拟机

下载 Windows ISO 文件(例如 Windows 10)
推荐安装 Windows 10 LTSC(长期服务版),精简无商店、无更新
我这里下载到/var/lib/libvirt/images/win10.iso
Windows 在 KVM/QEMU 下安装时,如果你选择了 virtio 磁盘/网卡,需要额外加载 virtio 驱动,否则在安装界面可能看不到硬盘或网络适配器。

这是 Red Hat 官方提供的 virtio 驱动下载地址:

官方下载地址(最新稳定版)
📥 ISO 文件(virtio-win stable release)
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
我这里下载到:/var/lib/libvirt/images/virtio-win.iso

都下载完毕后,使用 virt-install 命令安装:

下面的4096是设置内存大小;size=50是设置磁盘大小,单位是G;这些可以自己修改。

sudo virt-install \
--name win10 \
--ram 4096 \
--vcpus=2 \
--cpu host \
--os-variant=win10 \
--disk path=/var/lib/libvirt/images/win10.qcow2,size=50,format=qcow2,bus=virtio \
--cdrom /var/lib/libvirt/images/win10.iso \
--disk path=/var/lib/libvirt/images/virtio-win.iso,device=cdrom,readonly=on \
--network network=default,model=virtio \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole && \
echo "VNC 地址:" && \
virsh vncdisplay win10 && \
PORT=$(virsh vncdisplay win10 | sed 's/^.*://') && \
echo "连接端口: $((5900 + PORT))"

如果出现下列提示说明虚拟机已经创建并启动成功了:

Starting install...
Allocating 'win10.qcow2'                                                                                |    0 B  00:00:00 ... 
Creating domain...                                                                                      |    0 B  00:00:00     

Domain is still running. Installation may be in progress.
You can reconnect to the console to complete the installation process.

virt-install 已经把安装过程交给你通过 VNC 完成。

接下来你需要:

1. 查看 VNC 端口

执行:

virsh vncdisplay win10

可能会返回类似:

:0

这表示 VNC 服务监听在 5900 端口(:0 → 5900,:1 → 5901,以此类推)。

2、连接 VNC

如果是本地访问:

vncviewer <服务器IP>:5900

如果是远程访问:

确保服务器 防火墙已放行 5900 端口:

ufw allow 5900

或者 iptables/nftables 放行对应端口

用任意 VNC 客户端(RealVNC、TigerVNC、Remmina 等)连接:

这里推荐使用TigerVNC连接

<服务器公网IP>:5900
  1. 安装 Windows
    进入 Windows 安装界面后:

当安装程序提示 找不到磁盘 时,点击“加载驱动程序”

选择之前下载好的 virtio-win.iso 光盘里的 viostor 或 NetKVM 驱动(根据版本选择 amd64 或 x86 文件夹)

安装完成后继续 Windows 安装流程

一直等到虚拟机安装完成后,可以开始下一步设置:

四:虚拟机的端口转发

因为我们只有一个IP,所以windows虚拟机的外网访问只能通过宿主机的IP进行了,这样的话势必要使用端口转发才能访问虚拟机的3389。

iptables -t nat -A PREROUTING -p tcp --dport 33890 -j DNAT --to-destination 192.168.122.31:3389
iptables -A FORWARD -p tcp -d 192.168.122.31 --dport 3389 -j ACCEPT

如果转发后不能连接,尝试把 ACCEPT 规则插到最前面,这样它会在 libvirt 的 FORWARD 链之前匹配:

iptables -I FORWARD 1 -p tcp -d 192.168.122.31 --dport 3389 -j ACCEPT

另外,宿主机还需要做 SNAT 才能保证外部流量回得去:

iptables -t nat -A POSTROUTING -p tcp -d 192.168.122.31 --dport 3389 -j MASQUERADE

如果这样改完还不行,我建议临时放开 FORWARD 全部流量测试:

iptables -P FORWARD ACCEPT

如果转发成功,你就可以通过远程桌面连接:宿主机IP:33890(33890是上面设置的宿主机转发接口)

现在这样直接 iptables 加的规则默认是临时的,重启宿主机或者重启 iptables 服务后就会消失。接下来我们需要保存 iptables 规则:

Debian 上安装持久化工具:

apt install iptables-persistent -y

保存当前规则:

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

这样以后开机 iptables-persistent 会自动加载。
如果改了规则再保存一次即可。

如果你使用的是宝塔的控制面板,尽量还是别用它的端口转发,有些主机的端口转发是正常的就没啥事,宝塔后台写个转发规则立刻解决转发问题;而有些主机的端口转发会出现一些莫名其妙的问题,设置好后却无法转发,设置的转发无效等等,需要耗费大量时间排查错误。

五、扩展磁盘空间

虚拟机端口转发的问题解决了。现在一个新问题:最开始创建的虚拟机磁盘设置的只有50G,只够C盘使用的,我现在想真正用这个虚拟机办点事情,想要扩展一个650G的D盘,要怎么操作?

要给这个 Windows 虚拟机加一个新的 650 G D 盘,可以直接给虚拟机挂载一个新的虚拟硬盘,而不去动现有的 50 G 系统盘,这样最安全。
步骤如下:

1、在宿主机上创建一个 你要扩展大小的磁盘文件,我这里举例扩展650 G 的 qcow2 磁盘文件

qemu-img create -f qcow2 /var/lib/libvirt/images/win10-data.qcow2 650G

2、验证文件创建正确

qemu-img info /var/lib/libvirt/images/win10-data.qcow2

3、设置权限

chown libvirt-qemu:libvirt-qemu /var/lib/libvirt/images/win10-data.qcow2
chmod 640 /var/lib/libvirt/images/win10-data.qcow2

4、挂载新磁盘

virsh attach-disk win10 /var/lib/libvirt/images/win10-d.qcow2 vdb --persistent --targetbus virtio


5、启动虚拟机

virsh start win10

6、验证配置

virsh dumpxml win10 | grep -A 3 -B 1 "win10-data.qcow2"

qemu-img info 应该显示:

image: /var/lib/libvirt/images/win10-data.qcow2
file format: qcow2
virtual size: 650 GiB (697932185600 bytes)
disk size: 196 KiB

7、在虚拟机中安装新挂载的磁盘

登录虚拟机远程桌面:

初始化磁盘

  • 右键点击”磁盘0″或相应的磁盘标签
  • 选择”初始化磁盘”
  • 选择GPT分区表

创建分区

  • 右键点击”未分配”空间
  • 选择”新建简单卷”
  • 按向导完成分区和格式化

这样就扩容好了,接下来就可以愉快的使用这台windows虚拟机了。

几个常用的命令:

您需要回复本文后才能查看完整内容

立即回复
已经回复?立即刷新

如果你正在使用这篇IPv6.com的原创教程在Linux上创建一个Windows虚拟服务器,遇到任何问题都可以在下面评论,我看到后会第一时间解答你的问题。

原创文章,作者:中国IPv6网,如若转载,请注明出处:https://www.ipv6s.com/basis/tunnel/202508134231.html

(0)
中国IPv6网的头像中国IPv6网
上一篇 2025年8月6日 下午1:42
下一篇 2025年8月21日 上午2:07

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注