平台:超聚变 XFUSION G5500 V7(专业 GPU 服务器,PCIe 5.0) 系统:Proxmox VE 9.2(Debian 13 trixie) 目标:4 台 Windows Server 2025 虚拟机,每台透传 2 张 RTX 4090(共 8 张) 网络:私网 <内网段>/24,公网经上游防火墙映射 <公网IP> 文档:实战完整记录(含踩坑与解决)| 日期:2026-06

🔒 敏感信息已脱敏。以下为占位符,实际部署时替换为真实值: <公网IP><宿主IP><上游网关><内网段><VM01-IP>~<VM04-IP><网关MAC>

〇、方案选型结论(避坑前提)

平台

4090 透传 2 卡/VM

结论

Hyper-V (DDA)

❌ 官方不支持 GeForce,只能透 1 张

放弃

Proxmox VE (VFIO)

✅ 成熟稳定

采用

VMware ESXi

✅ 但要付费

备选

关键认知:"只能透传一张卡"不是虚拟化做不到,而是 Hyper-V 不适合 4090。换 Proxmox 即解决。


一、宿主机环境准备

1.1 换软件源(PVE 9 / trixie,deb822 格式)

企业源无订阅会报 401,需换无订阅源:

# 禁用企业源(PVE 9 是 .sources 格式)
mv /etc/apt/sources.list.d/pve-enterprise.sources /etc/apt/sources.list.d/pve-enterprise.sources.disabled

mv /etc/apt/sources.list.d/ceph.sources /etc/apt/sources.list.d/ceph.sources.disabled

# 添加无订阅源

cat > /etc/apt/sources.list.d/pve-no-subscription.sources << 'EOF'

Types: deb

URIs: http://download.proxmox.com/debian/pve

Suites: trixie

Components: pve-no-subscription

Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg

EOF

apt update && apt -y full-upgrade

⚠️ 踩坑:若有残留的旧格式 /etc/apt/sources.list.d/pve-no-subscription.list(bookworm),要删掉: rm /etc/apt/sources.list.d/pve-no-subscription.list


二、开启 IOMMU(VT-d)

2.1 BIOS 必开项

  • VT-d / Intel VT for Directed I/O = Enabled ⭐(裸机用不到,可能默认没开)

  • Above 4G Decoding = Enabled

  • SR-IOV = Enabled

2.2 GRUB 内核参数(本机为传统 GRUB 引导)

# 确认引导方式:proxmox-boot-tool status 报 "does not exist" = 传统 GRUB
nano /etc/default/grub

# 修改:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

update-grub

💡 若是 systemd-boot(/etc/kernel/cmdline 有内容),则改那个文件 + proxmox-boot-tool refresh

2.3 验证(重启后)

cat /proc/cmdline                          # 应含 intel_iommu=on iommu=pt
dmesg | grep -e DMAR -e IOMMU | grep enabled   # 应见 "DMAR: IOMMU enabled"


三、VFIO 配置(屏蔽宿主驱动 + 绑定 GPU)

3.1 加载 VFIO 模块

echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" >> /etc/modules

3.2 KVM 兼容参数(避免 Windows 客户机蓝屏)

echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf

💡 本机现代服务器,无需 allow_unsafe_interrupts(中断重映射原生支持,dmesg 可见 IRQ remapping enabled)。

3.3 屏蔽宿主显卡驱动

echo -e "blacklist nouveau\nblacklist nvidia\nblacklist nvidiafb\nblacklist snd_hda_intel" > /etc/modprobe.d/blacklist-gpu.conf

3.4 查 GPU 设备 ID + 确认 IOMMU 分组

lspci -nn | grep -i nvidia
# 本机 8 张 4090:VGA=10de:2684,Audio=10de:22ba

# 确认分组独立(关键)

for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU Group %s: ' "$n"; lspci -nns "${d##*/}"; done | sort -V | grep -i nvidia

本机结果完美:8 张卡各占独立 IOMMU 组,可干净按"每台 2 张"分配,无需 ACS override。

3.5 绑定 8 张卡到 vfio-pci

echo "options vfio-pci ids=10de:2684,10de:22ba disable_vga=1" > /etc/modprobe.d/vfio.conf

update-initramfs -u -k all

reboot

3.6 验证(重启后,本地会黑屏,用 SSH/iBMC)

lspci -nnk -d 10de:2684   # 8 张卡均应 "Kernel driver in use: vfio-pci"

⚠️ 重启前必确认 iBMC 远程 KVM 可用(宿主黑屏后的兜底通道)。SSH/Web/iBMC 三通道不受 vfio 影响。

GPU 分配规划(按 PCI 地址)

VM

VMID

GPU

VM01

100

16:00 + 37:00

VM02

101

41:00 + 49:00

VM03

102

96:00 + b7:00

VM04

103

c1:00 + c9:00


四、创建虚拟机(VM01)

4.1 关键配置

BIOS

OVMF (UEFI)

机型

q35

显示

默认(保留虚拟控制台,不设 Primary GPU)

SCSI 控制器

VirtIO SCSI single

CPU

host,1 socket × 8 cores

内存

32768,关闭 Ballooning

网卡

VirtIO

硬盘

SCSI,120G,SSD+discard

TPM

Server 2025 不需要

4.2 挂载两个 ISO

  • ide2:Windows Server 2025 安装盘

  • VirtIO 驱动 ISO:用 SATA 总线挂载(踩坑见下)

💡 VirtIO ISO 直链:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso,PVE 可用 Download from URL 直接拉。


五、安装 Windows Server 2025

5.1 ⚠️ 踩坑:加载驱动时看不到 VirtIO 光驱

现象:装系统选硬盘时无盘,加载驱动只看到 D(安装盘)、X(Boot),没有 VirtIO 盘。

原因:Server 2025 安装环境对 IDE 光驱识别差。

解决:把 VirtIO 驱动 ISO 的光驱总线改成 SATA:

  • 硬件 → 分离原 ide0 光驱 → 移除 → 新增 CD/DVD,总线选 SATA → 挂 virtio-win.iso

  • 停止 VM 重新启动(不能用"重启",VM 无 Guest Agent 会超时报错)

5.2 加载 SCSI 驱动

加载驱动 → 浏览到 VirtIO 盘 → vioscsi\2k22\amd64(Server 2025 没 2k25 用 2k22)→ 出现 120G 硬盘

5.3 装完装齐 VirtIO 驱动

进系统运行 virtio-win-guest-tools.exe → 装齐网卡/Agent 等所有驱动


六、网络配置(核心踩坑区)

6.1 环境特点

  • 私网 <内网段>/24,网关 <上游网关>(上游 OpenStack 网关 MAC <网关MAC>)

  • 宿主 IP <宿主IP>(静态),网络无 DHCP

  • 上游网关不放行 VM 的 IP 出公网

6.2 VM 配静态 IP

VM

IP

掩码

网关

DNS

VM01

<VM01-IP>

24

<宿主IP>

223.5.5.5

VM02

<VM02-IP>

24

<宿主IP>

223.5.5.5

VM03

<VM03-IP>

24

<宿主IP>

223.5.5.5

VM04

<VM04-IP>

24

<宿主IP>

223.5.5.5

关键踩坑:VM 网关必须填宿主 IP <宿主IP>,不能填上游网关 <上游网关>! 因为上游网关不放行 VM,要让 VM 流量经过宿主做 SNAT 出网。

6.3 宿主机配 SNAT(让 VM 借宿主出公网)

# 开启转发
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-ipforward.conf

sysctl -p /etc/sysctl.d/99-ipforward.conf

# SNAT:VM 流量伪装成宿主 IP 出网

iptables -t nat -A POSTROUTING -s <内网段>/24 -o vmbr0 -j SNAT --to-source <宿主IP>

# 持久化

apt install -y iptables-persistent

netfilter-persistent save

原理:VM(网关=<宿主IP>)→ 流量进宿主 → 宿主 SNAT → 借宿主能上网的通道出公网。 一条规则覆盖整个网段,4 台 VM 都生效。


七、透传 GPU + 装驱动

7.1 加 2 张卡(VM 关机状态)

硬件 → 添加 → PCI 设备:

  • 设备:0000:16:00.0(第一张)

  • ✅ 所有功能(All Functions,带音频)

  • ✅ PCI-Express

  • 不勾 主 GPU(保留虚拟控制台)

  • 重复加 0000:37:00.0(第二张)

⚠️ 若开机报 QEMU exited with code 1 → 去掉某卡音频功能(取消 All Functions / 只填 .0 主功能)。本次未遇到。

7.2 装 NVIDIA 驱动

  • 开机后设备管理器见 3 个显示适配器(1 虚拟 + 2 个 4090 带感叹号 = 正常,缺驱动)

  • nvidia.com 下驱动:GeForce RTX 40 Series(⚠️ 不是 Notebooks/Laptop!)→ RTX 4090 → Windows 11 → Game Ready 或 Studio 均可

  • 安装 → 重启

7.3 验证 ⭐

nvidia-smi

列出 2 张 RTX 4090 = VM01 完工!


八、克隆其余虚拟机

8.1 ⚠️ 踩坑:克隆前必须删 GPU

现象:带 GPU 配置克隆出 VM101,开机报 VM 101 qmp command 'set_password' failed ... Failed to run vncproxy

原因:克隆体带着 VM01 的 GPU(16:00/37:00),与 VM01 抢同一张卡,QEMU 启动失败。

正确流程:

1. VM01 装好驱动验证通过

2. VM01 关机 → 硬件删除 2 个 PCI 设备(GPU)

3. 右键 VM01 → 克隆 → 完整克隆 → VMID 101/102/103

4. 每台克隆体单独加各自的 2 张卡(见三-分配规划)

5. 每台改:主机名 + 静态IP(102/103/104) + 网关<宿主IP>

PVE 克隆自动分配新网卡 MAC,无需手动改 MAC。


九、公网访问各虚拟机(端口放通)

9.1 环境

公网 <公网IP> 不在宿主网卡上,由上游防火墙映射到内网。

9.2 宿主机 DNAT 端口转发(RDP 远程桌面)

# 上游已把公网映射到宿主 <宿主IP>,宿主再 DNAT 到各 VM
iptables -t nat -A PREROUTING -d <宿主IP> -p tcp --dport 13389 -j DNAT --to-destination <VM01-IP>:3389

iptables -t nat -A PREROUTING -d <宿主IP> -p tcp --dport 23389 -j DNAT --to-destination <VM02-IP>:3389

iptables -t nat -A PREROUTING -d <宿主IP> -p tcp --dport 33389 -j DNAT --to-destination <VM03-IP>:3389

iptables -t nat -A PREROUTING -d <宿主IP> -p tcp --dport 43389 -j DNAT --to-destination <VM04-IP>:3389

netfilter-persistent save

9.3 端口映射表

VM

内网IP

公网访问(RDP)

VM01

<VM01-IP>

<公网IP>:13389

VM02

<VM02-IP>

<公网IP>:23389

VM03

<VM03-IP>

<公网IP>:33389

VM04

<VM04-IP>

<公网IP>:43389

⚠️ 上游防火墙需放通 13389/23389/33389/43389 → 宿主 <宿主IP>(找网络管理员配)。

9.4 验证 3389 连通性(三层排查)

# 第1层:VM 内 - 远程桌面是否监听

netstat -an | findstr 3389        # 应见 0.0.0.0:3389 LISTENING

# 第2层:宿主 - 内网能否到 VM

nc -zv <VM01-IP> 3389          # succeeded = 内网通

# 第3层:外网 - 公网端口

Test-NetConnection <公网IP> -Port 13389

VM 内开启远程桌面:设置→系统→远程桌面→打开(自动放行防火墙)。


十、查看/管理 iptables 规则

# 查看 NAT 表所有规则(SNAT + DNAT)

iptables -t nat -L -n -v --line-numbers

# 删除某条(按行号)

iptables -t nat -D PREROUTING <行号>

# 修改后持久化

netfilter-persistent save


十一、踩坑速查表(精华)

#

现象

原因

解决

1

apt update 报 401

企业源无订阅

换无订阅源(deb822/trixie)

2

残留 bookworm 源

旧教程加的 .list

删除该文件

3

装系统看不到硬盘/VirtIO盘

Server2025 不认 IDE 光驱

VirtIO ISO 改 SATA 总线

4

"重启"报 qga timeout

系统未装无 Guest Agent

停止+启动,非重启

5

VM 拿不到 IP(169.254)

网络无 DHCP

手动配静态 IP

6

VM 内网通外网不通

上游不放行 VM

网关填宿主IP + 宿主 SNAT

7

加 GPU 开机 code 1

音频功能冲突

去掉该卡音频(.1)

8

下错驱动

选了 Laptop 版

40 Series 台式机版

9

克隆体起不来 vncproxy

带重复 GPU 冲突

克隆前删 GPU,克隆后各自加


十二、关键参数备忘

4090 设备 ID

VGA 10de:2684 / Audio 10de:22ba

GRUB 参数

intel_iommu=on iommu=pt

8 张卡 PCI

16/37/41/49/96/b7/c1/c9 :00

宿主 IP/网关

<宿主IP> / 上游<上游网关>

VM 网关

<宿主IP>(指向宿主)

VM IP 段

<VM01-IP> ~ <VM04-IP>

公网

<公网IP>(上游映射)

VirtIO 驱动目录

vioscsi\2k22\amd64


十三、安全建议

  • ⚠️ RDP 暴露公网风险高,已用非标端口(1/2/3/4 3389)

  • 建议限制来源 IP:DNAT 规则加 -s 办公IP

  • VM 强密码、改默认管理员名

  • 更优方案:用 VPN 进内网替代直接暴露 RDP


实战完成。整套流程从 Hyper-V 选型纠偏 → Proxmox 部署 → 8 卡透传 → Windows 安装 → 网络打通 → 公网放通,全部验证通过。

文章作者: 楚少爱看雪
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 楚少爱看雪
学习 Study
喜欢就支持一下吧