PVE下默认R869驱动驱动RTL8111/8168/8411断流问题

问题根源

当前使用的小主机仅有1个千兆网卡,打算将其中的mini pci接口的无线网卡更换为RJ45口网卡;本着买新不买旧的原则,确定了使用8125B的2.5G网卡。
由于目前的使用已将PVE作为主要的虚拟化平台,考虑到主机的兼容性问题:
小主机板载的网卡是8111芯片的;加装的mini Pci的网卡是8125B芯片的;默认驱动都会使用8169的驱动,会导致8111断流,8125B驱动不能稳定工作。

解决方案

方案一:

  1. 将板载的8111直通给其中的1台虚拟机;
  2. 8125B作为虚拟桥接网卡提供对LAN的服务。
    3.方案优点:无需更改驱动,即配即用;
    4.方案缺点:其中一个网口只能通向指定虚拟机,缺乏灵活性;8125B还是使用8169驱动,缺点未改善。

方案二(推荐使用):

  1. 使用DKMS分别更新8111驱动为8168和8125B;
  2. 方案优点:由于使用了第三方驱动解决了性能问题;同时保留了系统自带的8169驱动;一旦出现升级内核时,8168或8125B驱动更新异常,依旧可以使用旧的8169驱动网络,不至于出现网络意外中断问题。
  3. 方案缺点:需下载对应网卡的DKMS驱动包并编译安装。

方案二具体步骤

下载对应的DKMS安装包
8125B下载位置:https://github.com/devome/r8125-dkms
8168下载位置:https://packages.debian.org/bookworm/r8168-dkms
本地下载包(更新时间2025-01-21)
8125B

r8125-dkms_9.014.01-1_all.deb

8168

r8168-dkms_8.051.02-2_all.deb

## 更新内核、安装依赖
apt update
apt upgrade
apt install -y dkms proxmox-default-headers

## 安装headers
headers=$(dpkg -l | awk '/^ii.+kernel-[0-9]+\.[0-9]+\.[0-9]/{gsub(/-signed/, ""); gsub(/kernel/, "headers"); print $2}' | tr "\n" " ")
eval apt install -y $headers

## 安装刚刚下载好的deb包,此命令只会为当前系统所使用的内核以及刚刚安装的最新内核(也可能当前所使用的内核就是最新内核)安装驱动
dpkg -i realtek-r8125-dkms_*.deb  # 如通配符会匹配多个时亦可指定具体的文件名

## 如果想为那些既不是系统当前所使用的内核,也不是刚刚安装的最新内核安装驱动,需要手动指定安装
## 看看哪些内核安装好了驱动
dkms status
## 列出全部内核版本kernel_version,找出那些还没有安装驱动的内核
dpkg -l | awk '/^ii.+kernel-[0-9]+\.[0-9]+\.[0-9]/{gsub(/proxmox-kernel-|pve-kernel-|-signed/, ""); print $2}'
## 手动指定驱动版本(在deb文件名中有体现)和内核版本(从上一句命令的输出中),zsh按tab可自动补全,比如:dkms install realtek-r8125/9.011.01 -k 6.2.16-5-pve
dkms install realtek-r8125/<driver_version> -k <kernel_version>

## 卸载不再需要的headers
eval apt-mark auto $headers
apt autopurge

使用驱动

不要禁用r8169,使用下面的命令

这样r8125 驱动升级出问题或者需要卸载,那你至少还有一个备选的 r8169 内核驱动,不至于网卡全部没驱动导致没法远程操作,只能用物理连接。

使用r8125驱动

echo 'alias r8169 off' >> /etc/modprobe.d/dkms.conf
echo 'r8125' >> /etc/initramfs-tools/modules

更新驱动模块并重启

update-grub
update-initramfs -k all -u
reboot