PVE 网络配置指南
为 PVE 软路由环境量身打造的网络底层配置:VirtIO 虚拟化与 PCIe 硬件直通双路线,防失联、网口重命名全覆盖。
在 PVE 宿主机上部署软路由(如 iStoreOS / OpenWrt)时,网络接口的接入方式决定了系统的吞吐量、CPU 负载以及功能扩展性。主要分为 VirtIO 半虚拟化 与 PCIe 硬件直通 两种流派。
在此模式下,宿主机接管所有物理网卡,并创建虚拟交换机(Linux Bridge)。虚拟机通过 VirtIO 驱动连接到虚拟交换机,实现内存级别的数据零拷贝共享。
vmbr0 上,方便内部数据互通。步骤一:在 PVE 中创建虚拟交换机 (Linux Bridge)
- 登录 PVE Web 管理后台。
- 在左侧菜单树中,点击你的节点名称(例如:pve)。
- 在节点菜单中选择 网络 (Network),你将看到系统默认已经存在一个
vmbr0。 - 点击顶部菜单栏的 创建 (Create),选择 Linux Bridge。
- 在弹出的窗口中进行以下配置:
- 名称 (Name): 保持默认的
vmbr1(如果作为第二个网口)。 - IPv4/CIDR: 留空(虚拟机内部软路由会自己管理 IP)。
- 网关 (Gateway): 留空。
- 桥接端口 (Bridge ports): 填入你需要绑定的物理网卡名称,例如 enp3s0 或 eth1(可对照网络列表里物理网卡的名称填入)。
- 名称 (Name): 保持默认的
- 点击 创建 (Create)。
- 点击顶部菜单的 应用配置 (Apply Configuration) 按钮,让新网桥生效。
步骤二:将虚拟网卡分配给虚拟机
- 在 PVE 左侧菜单中,选中你需要配置的软路由虚拟机(如
100 (istoreos))。 - 点击 硬件 (Hardware) 标签卡。
- 点击顶部的 添加 (Add),选择 网络设备 (Network Device)。
- 在弹出的窗口中配置:
- 桥接 (Bridge): 在下拉菜单中选择你刚才创建的
vmbr1。 - 模型 (Model): 务必选择 VirtIO (半虚拟化),以获得最佳性能。
- 防火墙 (Firewall): 建议取消勾选,由软路由自带防火墙接管。
- 桥接 (Bridge): 在下拉菜单中选择你刚才创建的
- 点击 添加,重新启动虚拟机,软路由系统中即可识别到新网卡。
通过 IOMMU 技术,将主板上的物理网卡芯片直接暴露并移交给虚拟机控制。数据包利用 DMA(直接内存访问)技术绕过 PVE 宿主机系统的 CPU,榨干物理网卡的全部性能。
步骤一:主板 BIOS 开启虚拟化支持
- 重启物理主机,狂按
Del或F2进入主板 BIOS。 - 找到 CPU 配置或高级设置,开启 VT-d (Intel) 或 IOMMU / AMD-V (AMD)。
- 保存并退出 BIOS。
步骤二:修改 PVE 内核启动参数,开启 IOMMU
- 在 PVE 宿主机面板点击左侧节点 pve,进入 Shell(终端)。
- 先看一眼现有启动参数(记下原样,改错了好恢复):
grep GRUB_CMDLINE_LINUX_DEFAULT /etc/default/grub。 - 用 sed 在原有引号内容后面空格追加开启参数(不要整行替换,会丢掉原来的参数):
# Intel:在原有参数后追加 intel_iommu=on iommu=pt sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 intel_iommu=on iommu=pt"/' /etc/default/grub # AMD:在原有参数后追加 amd_iommu=on iommu=pt sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 amd_iommu=on iommu=pt"/' /etc/default/grub # 核对追加结果(引号里应保留原有内容 + 新参数) grep GRUB_CMDLINE_LINUX_DEFAULT /etc/default/grub
/etc/default/grub 可能根本不存在)。上面三步跳过,走下面这套:
# 先看一眼现有参数(记下原样) cat /etc/kernel/cmdline # Intel:在行尾空格追加(AMD 把 intel_iommu=on 换成 amd_iommu=on) sed -i 's/$/ intel_iommu=on iommu=pt/' /etc/kernel/cmdline # 核对结果 + 刷新引导(相当于 GRUB 的 update-grub) cat /etc/kernel/cmdline proxmox-boot-tool refresh
- (GRUB 用户)上面 sed 已执行,无需手动保存。systemd-boot 用户上一步已完成,跳过。
- 更新引导并加载 VFIO 模块(systemd-boot 用户跳过第 1 条
update-grub,上一步已 refresh):
# 1. 更新引导文件(GRUB 用户;systemd-boot 上一步已 refresh,跳过这行) update-grub # 2. 修改模块文件,让系统允许直通 nano /etc/modules # 在文件末尾换行,粘贴以下三行(vfio_virqfd 在新内核已移除,不要加) vfio vfio_iommu_type1 vfio_pci # 3. 按 Ctrl+O 保存,Ctrl+X 退出。更新内核配置: update-initramfs -u -k all # 4. 重启整个 PVE 物理机 reboot
dmesg | grep -e DMAR -e IOMMU,应能看到 DMAR/IOMMU 相关输出(Intel 平台找 DMAR: IOMMU enabled)。没有任何输出说明 IOMMU 没开起来,先回头检查 BIOS 和启动参数,别急着直通。步骤三:在虚拟机分配 PCIe 物理硬件
- 确保虚拟机 (如
100 istoreos) 处于关机状态。 - 在左侧菜单点击该虚拟机的 硬件 (Hardware),检查 机型 (Machine),双击将其改为 q35。
- 点击顶部的 添加 (Add),选择 PCI 设备 (PCI Device)。
- 在弹出的窗口中进行以下极简配置:
- 设备 (Device): 在下拉列表中寻找你的网卡名称(例如
Intel Ethernet Controller I225-V或RTL8125)。 - 所有功能 (All Functions): 务必打勾。
- PCI-Express: 务必打勾(告诉系统以纯净 PCIe 模式透传)。
- 设备 (Device): 在下拉列表中寻找你的网卡名称(例如
- 点击 添加。重复此步骤,将你需要直通的物理网口全部添加进去。
- 启动虚拟机,软路由底层将直接握手物理网卡芯片。
破解“内存跑满”的视觉 BUG (QEMU Guest Agent)
为了让 PVE 宿主机能够读取直通模式下虚拟机的真实内存数据,必须建立底层通讯通道。
- 在 PVE 左侧选中虚拟机,点击 选项 (Options) 面板。
- 双击
QEMU Guest Agent,勾选 已启用,点击确定。 - 进入 iStoreOS (OpenWrt) 系统的后台,在软件包管理或终端内,安装对应的通讯程序:
# 在 iStoreOS 终端内执行 opkg update opkg install qemu-ga
- 安装完成后,务必回到 PVE 面板,对该虚拟机执行完整的 关机 (Shutdown),等待完全停止后,再点击 启动 (Start)。
在虚拟化模式下,物理网口(enp*s0)、虚拟交换机(vmbr*)和软路由网卡(eth*)的命名逻辑不同,容易造成对应关系混乱。通过底层 MAC 地址绑定和网卡重置,可以实现 物理口 = 自定义名 = vmbr = 软路由网卡 的强迫症完美映射。
步骤一:记录物理网卡 MAC 地址
- 在 PVE 左侧菜单点击物理节点(如 pve),进入 >_ Shell (终端)。
- 输入命令查看所有物理网卡的 MAC 地址与实时状态:
ip -br link。
步骤二:创建自定义命名规则文件
- 在终端中,为你想定义名称的网卡创建规则文件:
nano /etc/systemd/network/10-mgmt.link
- 在编辑器中粘贴以下内容(务必替换为你真实的 MAC 地址与自定义小写名称):
[Match] MACAddress=00:e2:69:73:cf:24 [Link] Name=mgmt
- 按
Ctrl+O保存,回车确认,按Ctrl+X退出。 - 重复操作:对照映射表,为你其余的网卡依次创建对应的
.link文件并填入正确的 MAC 与名称(如portwan、port3等)。
步骤三:更新内核引导
- 将规则刻入开机镜像,确保底层内核第一时间识别新名字:
update-initramfs -u -k all
步骤四:提前修改网络配置(防断网核心步)
为了避免重启后系统因寻找旧网卡而卡死(寻卡超时长达 90 秒)甚至导致 PVE 后台失联,我们必须在重启前,提前修改宿主机的网络总配置文件。
- 在终端输入命令编辑配置文件:
nano /etc/network/interfaces。 - 在文件中找到所有包含旧名字的行,将其替换为你刚刚自定义的新名称(如
mgmt、portwan等)。 - 修改完成后,按
Ctrl+O保存,回车确认,按Ctrl+X退出。 - 此时底层规则与上层调用已完全统一,可以安心执行重启:
reboot。
步骤五:在虚拟机中重置网卡顺序 (eth 映射)
在虚拟机的世界里,谁先被添加,系统就将其认定为前置的 eth 编号。我们需要打乱重排:
- 重启完成后,登录 PVE 网页后台,选中你的
100 (istoreos)虚拟机,确保其处于 关机 状态。 - 进入 硬件 (Hardware),将列表中之前添加的所有 网络设备 (net0, net1...) 全部移除 (Remove),一个不留。
- 严格按照
vmbr1到vmbr5的顺序,重新依次添加网卡:- 点击 添加 -> 网络设备,桥接选择
vmbr1(模型 VirtIO) —— 它将被分配为系统的eth0(WAN)。 - 再次点击添加,桥接选择
vmbr2—— 它将被分配为系统的eth1(LAN)。 - 再次点击添加,桥接选择
vmbr3等,以此类推。
- 点击 添加 -> 网络设备,桥接选择
本章汇总了当前多网口主机的真实底层物理对应关系,以及在日常 PVE 运维和网口排查时最高频使用的极客命令。
一、常用网络排查与状态查询命令
在 PVE 终端(Shell)中,随时可以使用以下极客命令来排查物理网口状态、线缆连接以及 MAC 对应关系:
# 1. 快速精准过滤:只看当前插了网线且处于联通状态(LOWER_UP)的物理网口 ip link | grep -i -C 1 "up" # 2. 查看所有网卡的名称、简要状态及 MAC 地址清单 ip -br link
二、本机物理网卡与 MAC 状态总览
通过命令行工具检测到的本机真实物理网口硬件与 MAC 地址对应关系如下:
lo 00:00:00:00:00:00 enp3s0 88:c9:b3:bb:5a:13 enp4s0 88:c9:b3:bb:5a:12 enp5s0 88:c9:b3:bb:5a:11 enp6s0 88:c9:b3:bb:5a:14 enp7s0 00:e2:69:73:cf:25 enp8s0 00:e2:69:73:cf:24
三、最终闭环映射对照关系
物理接口、系统网桥与自定义重命名之家的精准落地对应关系:
enp8s0 = vmbr0 = mgmt (宿主机管理口) enp7s0 = vmbr1 = portwan (WAN 光猫接入) enp6s0 = vmbr2 = port3 (LAN / 内部扩展) enp3s0 = vmbr3 = port4 (LAN / 内部扩展) enp4s0 = vmbr4 = port5 (LAN / 内部扩展) enp5s0 = vmbr5 = port6 (LAN / 内部扩展)