
我有一台安装了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
- 安装 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