windows下实现网卡流量直通虚拟机需先确保硬件与系统支持sr-iov,再启用sr-iov并创建vf,最后将vf分配给关机状态的虚拟机;依赖hyper-v平台及兼容网卡,家用版windows不支持。
windows 环境下实现网卡流量直通给虚拟机,核心路径不是“在网卡配置里点一下开启 sr-iov”,而是先确保硬件与系统支持、再启用 sr-iov 功能、最后将虚拟函数(vf)分配给指定虚拟机。整个过程依赖 hyper-v 平台和兼容的物理网卡(如 intel x550/x710/xxv710、mellanox connectx 系列等),普通 realtek 或部分低端 intel 千兆网卡通常不支持。
✅ 前提条件:确认硬件与系统就绪
- CPU 与主板:必须支持并启用 VT-d(Intel)或 AMD-Vi(AMD),且 BIOS 中开启 IOMMU/AMD-Vi 和 SR-IOV 选项(部分主板需在“Advanced → PCI Subsystem Settings”中手动打开)。
- 操作系统:仅 Windows Server 2016/2019/2022 企业版或数据中心版,或 Windows 11 Pro for Workstations(需启用 Hyper-V 和“虚拟机平台”可选功能)。
- 网卡:必须是支持 SR-IOV 的 PCIe 网卡,并已安装厂商提供的最新驱动(如 Intel PROSet 或 Mellanox MLNX_OFED)。
- Hyper-V 角色:已启用,且“基于虚拟化的安全(VBS)”已关闭(否则会阻止 VF 直通)。
⚠️ 注意:家用版 Windows 10/11 Pro 不支持 SR-IOV;设备管理器里右键网卡属性中看到“SR-IOV”选项卡,只是驱动层面支持,不代表已启用或可直通。
? 步骤一:在主机上启用 SR-IOV 并创建虚拟函数(VF)
以管理员身份打开 PowerShell
-
查看网卡是否支持 SR-IOV:
Get-NetAdapter | Where-Object {$_.Status -eq "Up"} | Get-NetAdapterSriov若返回
SriovEnabled : False且SriovAvailable : True,说明硬件就绪但未启用。 -
启用 SR-IOV(以网卡名为“Ethernet”为例):
Enable-NetAdapterSriov -Name "Ethernet"
可选:设置最大 VF 数量(如 8 个):
Set-NetAdapterSriov -Name "Ethernet" -VirtualFunctionCount 8
-
验证 VF 是否生成:
Get-NetAdapter | Where-Object {$_.InterfaceDescription -like "*Virtual Function*"}成功后会出现类似
Ethernet Virtual Function #1的新适配器条目(它们不可用于主机网络,仅作直通资源)。
?️ 步骤二:将 VF 分配给目标虚拟机
- 在 Hyper-V 管理器中停止目标虚拟机(SR-IOV VF 必须关机绑定);
- 右键虚拟机 → “设置” → “硬件” → “添加硬件” → 选择 PCI 设备;
- 在下拉列表中选择对应网卡的某个 VF(例如
Intel(R) Ethernet Controller XXV710 Virtual Function); - 确保勾选 “启用此设备的 SR-IOV”(Hyper-V UI 中该选项仅在 VF 已启用时可见);
- 启动虚拟机。
? 提示:每个 VF 是独立的 PCIe 函数,拥有唯一 MAC 地址(默认由 PF 驱动自动分配),可在 VM 内通过
ip link show(Linux)或Get-NetAdapter(Windows VM)查看。
? 步骤三:虚拟机内部识别与配置
-
Linux VM(如 Ubuntu/Debian):
VF 会作为独立网卡出现(如ens5f0),无需额外驱动(内核原生支持ixgbevf/i40evf/mlx5_core等)。直接配置 IP 即可:ip addr add 192.168.10.100/24 dev ens5f0 ip link set ens5f0 up
Windows VM:
系统会自动识别为“Microsoft Hyper-V Network Adapter”,需安装对应 VF 微型端口驱动(通常随 PF 驱动包一同提供,如 Intel PROSet 安装包内的vf.inf)。
? 关键注意事项
- 主机操作系统不能使用已直通的 VF,也不能将 PF 绑定到主机网络(PF 仅用于管理 VF 生命周期);
- 同一 PF 下的多个 VF 可分配给不同虚拟机,实现真正隔离的高性能网络通道;
- VF 不支持热插拔,必须关机操作;
- 若虚拟机启动失败并报错“无法初始化 SR-IOV 设备”,请检查 VBS 是否禁用、Hyper-V 是否完整启用、以及 BIOS 中 VT-d 是否真正生效(可通过
msinfo32查看“基于虚拟化的安全性”状态是否为“否”)。











