HOOOS

N100 小主机 PVE 双网卡直通保姆级教程:不影响宿主机联网与管理的避坑指南

0 16 小网卡折腾家 PVE网卡直通N100
Apple

在用 Intel N100 小主机折腾 PVE(Proxmox Virtual Environment)做 AIO(All in One)时,双网卡直通给 OpenWrt/iStoreOS 等软路由系统是提升网络性能、降低 CPU 占用的常见操作。

但很多人在操作时经常遇到两个痛点:

  1. 一顿操作后,PVE 宿主机失联了,管理后台再也打不开。
  2. N100 的 4 个网卡在同一个 IOMMU 分组里,无法单独直通。

本文将以多网卡(以常见的 4 口 i226-V N100 小主机为例)为背景,手把手带你完成双网卡直通,同时保留剩余网口供 PVE 宿主机正常通信与管理的完整配置流程。


一、 核心逻辑与网口分配规划

在开始敲命令之前,必须先理清网口分配逻辑。假设你的 N100 小主机有 4 个物理网口,在系统里识别为 enp2s0enp3s0enp4s0enp5s0

物理网卡名称 拟分配用途 处理方式
enp2s0 (网口 1) PVE 宿主机管理口 / LAN 桥接 绝对不要直通。绑定到 vmbr0,用于宿主机上网及管理。
enp3s0 (网口 2) 软路由 WAN 口 直通 给软路由 VM,接光猫。
enp4s0 (网口 3) 软路由 LAN 口 直通 给软路由 VM,接交换机或 AP。
enp5s0 (网口 4) 备用口 / 物理双 WAN / 其它 VM 保持默认(不直通,或通过虚拟网桥使用)。

关键原则:直通是“物理剥夺”。一旦一个网卡被直通给某个虚拟机,PVE 宿主机就完全失去了对该网卡的控制权。因此,必须留出至少一个网口(如 enp2s0)绑定在 vmbr0 上,绝对不能将其直通。


二、 开启 PVE 宿主机的 IOMMU 支持

要想实现硬件直通,必须在宿主机内核中启用 Intel VT-d。

1. 确认 BIOS 设置

开机按 DELF2 进入 BIOS,确保以下选项已开启(Enabled):

  • Intel Virtualization Technology (VT-x)
  • Intel VT for Directed I/O (VT-d)

2. 修改内核启动参数

根据你的 PVE 安装方式(UEFI 还是 Legacy),修改配置文件。

情况 A:如果是 GRUB 引导(最常见)

编辑 /etc/default/grub 文件:

nano /etc/default/grub

找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet" 这一行,修改为:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

保存退出(Ctrl+O,回车,Ctrl+X),然后更新 grub:

update-grub

情况 B:如果是 systemd-boot 引导(通常是 UEFI + ZFS 安装)

编辑 /etc/kernel/cmdline 文件:

nano /etc/kernel/cmdline

在已有内容末尾加上(空格分隔):

intel_iommu=on iommu=pt

保存退出,然后更新引导:

proxmox-boot-tool refresh

3. 添加内核模块

编辑 /etc/modules 文件,确保系统启动时加载 VFIO 相关模块:

nano /etc/modules

在文件末尾添加以下四行内容:

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

保存并重启 PVE 宿主机:

reboot

三、 解决 N100 的 IOMMU 分组恶梦 (ACS 冲突)

重启后,在 PVE 网页端的“系统 -> 硬件 -> 添加 PCI 设备”中,你可能会发现所有的网卡都被分在同一个 IOMMU 组(例如 Group 1)。如果直接直通其中一两个,PVE 会报错或直接将整个组(包括管理口)一起直通,导致宿主机瞬间失联。

解决办法:开启 ACS 强拆分组

  1. 重新编辑内核配置文件(以 GRUB 引导为例):
    nano /etc/default/grub
    
  2. GRUB_CMDLINE_LINUX_DEFAULT 中追加 pcie_acs_override=downstream,multifunction
    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"
    
  3. 保存并更新引导:
    update-grub # systemd-boot 用户请运行 proxmox-boot-tool refresh
    
  4. 再次重启 PVE:
    reboot
    

重启后,进入 PVE 后台,在“节点 -> 系统 -> 硬件”中查看 PCI 设备,此时你会发现网卡的 IOMMU 组已经被成功拆分,每个网卡都拥有了独立的 Group ID。


四、 确认并保护宿主机管理网口

在直通前,必须确认哪个网口是当前的“保命口”。

  1. 在 PVE 后台,点击“节点 -> 网络”。
  2. 查看 vmbr0(虚拟网桥)绑定在哪个 Active(活动)的物理网卡上(比如 enp2s0)。
  3. 在后续的直通操作中,绝对不要勾选这个网卡对应的 PCI 设备!

五、 将双网卡直通给虚拟机(以 OpenWrt 为例)

  1. 进入 PVE 后台,选择你的软路由虚拟机(如 ID 100)。
  2. 点击 “硬件” -> “添加” -> “PCI 设备”
  3. 在“设备”下拉菜单中,找到你要直通的第一个网卡(例如 0000:03:00.0,对应 enp3s0)。
  4. 务必勾选“所有功能”(All Functions)和“ROM 栏”(ROM-Bar),不要勾选“PCI-Express”。(部分 N100 小主机勾选 PCIe 可能会导致虚拟机无法启动或死机,建议保持默认不勾选 PCIe )。
  5. 点击“添加”。
  6. 重复上述步骤,将第二个网卡(例如 0000:04:00.0,对应 enp4s0)也添加进来。

此时,你的虚拟机硬件列表中应该有两行额外的 PCI 设备。


六、 避坑指南与极限救援

1. 为什么直通后虚拟机打不开,提示 No IOMMU detected

请检查 BIOS 中的 VT-d 是否真正开启,以及你在 PVE 中修改的 Grub/cmdline 配置文件是否拼写正确,且是否成功运行了更新命令(update-grubproxmox-boot-tool refresh)。

2. 直通后宿主机失联了怎么办?(终极救砖法)

如果你不小心把管理网口也直通了,或者 ACS 拆分失效导致全组网卡被强行带走,导致无法访问 PVE 后台,请不要惊慌,按以下步骤救援:

  1. 接上显示器和键盘到 N100 小主机上。
  2. 登录 PVE 命令行(用户名 root,密码为你设定的密码)。
  3. 编辑虚拟机配置文件,强行删掉直通设备。例如虚拟机 ID 是 100
    nano /etc/pve/qemu-server/100.conf
    
  4. 在文件里找到类似 hostpci0: 00:1f.6 这样的行,直接整行删掉,保存退出。
  5. 如果是因为内核参数改错导致系统崩溃,直接编辑 /etc/default/grub,恢复原状并运行 update-grub,然后重启。

3. PVE 宿主机如何通过软路由上网?

直通后,你的软路由拥有了物理 WAN(接光猫拨号)和物理 LAN(接交换机)。
此时,将 N100 的 物理管理口(enp2s0) 用网线连接到交换机(也就是软路由 LAN 口延伸出来的网络)上。
在 PVE 的“网络”配置中,将 vmbr0 的网关(Gateway)指向软路由的 LAN 口 IP(例如 192.168.1.1)。这样,PVE 宿主机既能被局域网设备管理,也能通过软路由正常下载更新和上网了。

点评评价

captcha
健康