Proxmox VE 8×RTX 4090 透传部署 · 实战经验总结
平台:超聚变 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>
〇、方案选型结论(避坑前提)
关键认知:"只能透传一张卡"不是虚拟化做不到,而是 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/modules3.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.conf3.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
reboot3.6 验证(重启后,本地会黑屏,用 SSH/iBMC)
lspci -nnk -d 10de:2684 # 8 张卡均应 "Kernel driver in use: vfio-pci"⚠️ 重启前必确认 iBMC 远程 KVM 可用(宿主黑屏后的兜底通道)。SSH/Web/iBMC 三通道不受 vfio 影响。
GPU 分配规划(按 PCI 地址)
四、创建虚拟机(VM01)
4.1 关键配置
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
<宿主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 save9.3 端口映射表
⚠️ 上游防火墙需放通 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 13389VM 内开启远程桌面:设置→系统→远程桌面→打开(自动放行防火墙)。
十、查看/管理 iptables 规则
# 查看 NAT 表所有规则(SNAT + DNAT)
iptables -t nat -L -n -v --line-numbers
# 删除某条(按行号)
iptables -t nat -D PREROUTING <行号>
# 修改后持久化
netfilter-persistent save十一、踩坑速查表(精华)
十二、关键参数备忘
十三、安全建议
⚠️ RDP 暴露公网风险高,已用非标端口(1/2/3/4 3389)
建议限制来源 IP:DNAT 规则加
-s 办公IPVM 强密码、改默认管理员名
更优方案:用 VPN 进内网替代直接暴露 RDP
实战完成。整套流程从 Hyper-V 选型纠偏 → Proxmox 部署 → 8 卡透传 → Windows 安装 → 网络打通 → 公网放通,全部验证通过。