PVE 网卡冗余配置

1,077 阅读12分钟

在 Proxmox VE (PVE) 环境中配置网卡冗余,实现有线网卡和无线网卡的混合使用。通过 Linux Bonding 技术,可以在保持单一 IP 地址的情况下,实现网络连接的自动切换和冗余备份。

应用场景

在我的使用环境中,由于物理限制(显示器和网线接口位于不同位置),需要在连接显示器时临时断开网线。通过配置网卡冗余,可以:

  • 实现有线网卡和无线网卡的无缝切换
  • 保持 WebUI/SSH 访问的 IP 地址不变
  • 提供网络连接的冗余保障

网络结构

                 +----------------------------+
                 |        PVE 主机            |
                 |     (WebUI / SSH / VM)     |
                 +-------------+--------------+
                               |
                    +----------+-----------+
                    |   vmbr0 (桥接接口)    |  <-- 主机 IP: 192.168.1.10
                    +----------+-----------+      网关: 192.168.1.1
                               |
                    +----------+-----------+
                    |   bond0 (网卡绑定)    |  <-- 模式: active-backup
                    +----------+-----------+
                               / \
                              /   \
                    +--------+     +---------+
                    |                        |
               [ eno1 ]            [ wlxe84e0679ad17 ]
              (主有线网卡)            (备用无线网卡)
              active                  backup

网络层级关系:

vmbr0 (192.168.1.10)
 └─ bond0 (active-backup)
     ├─ eno1 (有线网卡,主用)
     └─ wlxe84e0679ad17 (无线网卡,备用)

前期准备

安装必要工具

apt update
apt install wpasupplicant iw -y

说明:

  • wpasupplicant:用于处理 Wi-Fi 网络的 WPA/WPA2 安全认证
  • iw:用于配置无线网卡接口的现代化工具,替代了旧版的 iwconfig

注意:请确保在安装工具前系统能够连接网络,离线安装这些包会比较复杂。

识别网卡设备

使用以下命令查看系统中的网络接口:

ip link

输出示例:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP mode DEFAULT group default qlen 1000
    link/ether b4:xx:99:60:xx:d2 brd ff:ff:ff:ff:ff:ff
    altname enp0s31f6
3: wlxe84e0679ad17: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether e8:xx:06:79:xx:17 brd ff:ff:ff:ff:ff:ff
4: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether b4:xx:99:60:xx:d2 brd ff:ff:ff:ff:ff:ff

网络接口说明:

  • lo:本地回环接口
  • eno1:内置有线网卡
  • wlxe84e0679ad17:USB 无线网卡
  • vmbr0:PVE 默认的桥接网络接口

配置网络接口

修改网络配置文件

编辑网络配置文件:

nano /etc/network/interfaces

配置内容:

# 回环接口
auto lo
iface lo inet loopback

# 有线网卡配置
auto eno1
iface eno1 inet manual

# 无线网卡配置
auto wlxe84e0679ad17
iface wlxe84e0679ad17 inet manual

# 配置网卡绑定
auto bond0
iface bond0 inet manual
    bond-slaves eno1 wlxe84e0679ad17
    bond-mode active-backup
    bond-primary eno1
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200

# 配置桥接接口
auto vmbr0
iface vmbr0 inet static
    address 192.168.1.10/24
    gateway 192.168.1.1
    bridge-ports bond0
    bridge-stp off
    bridge-fd 0

source /etc/network/interfaces.d/*

配置参数说明:

  1. 网卡绑定(bond0)配置

    • bond-slaves:指定要绑定的物理网卡
    • bond-mode active-backup:使用主备模式,同一时间只有一个网卡工作
    • bond-primary:指定主用网卡
    • bond-miimon:链路监控间隔(毫秒)
    • bond-downdelay:确认链路故障的延迟时间(毫秒)
    • bond-updelay:确认链路恢复的延迟时间(毫秒)
  2. 桥接接口(vmbr0)配置

    • bridge-ports:指定要桥接的接口
    • bridge-stp:禁用生成树协议
    • bridge-fd:设置转发延迟

应用网络配置:

ifreload -a
# 或者
systemctl restart networking

验证配置:

# 检查网络接口状态
ip a

# 检查路由表
ip r

# 检查网卡绑定状态
cat /proc/net/bonding/bond0

配置WIFI网卡连接到网络

配置无线网络连接

创建 wpa_supplicant 配置文件:

nano /etc/wpa_supplicant/wpa_supplicant-wlxe84e0679ad17.conf

注意:配置文件命名格式为 wpa_supplicant-<网卡名称>.conf,这是 systemd 服务查找配置文件的标准格式。

配置文件内容:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN

network={
    ssid="您的Wi-Fi名称"
    psk="您的Wi-Fi密码"
    key_mgmt=WPA-PSK
    disabled=0
    scan_ssid=1
    priority=1
}

配置参数说明:

  1. 基础配置

    • ctrl_interface:指定控制接口目录和访问权限
    • update_config:允许动态更新配置
    • country:指定国家/地区代码,影响频段和功率限制
  2. 网络配置

    • ssid:Wi-Fi 网络名称
    • psk:Wi-Fi 密码
    • key_mgmt:认证方式(WPA-PSK)
    • disabled:是否禁用该配置(0表示启用)
    • scan_ssid:启用对隐藏网络的扫描
    • priority:连接优先级,数值越大优先级越高

启用无线网络服务

创建并启用 wpa_supplicant 服务:

# 创建服务链接
sudo ln -s /lib/systemd/system/wpa_supplicant@.service /etc/systemd/system/wpa_supplicant@wlxe84e0679ad17.service

# 设置开机启动
sudo systemctl enable wpa_supplicant@wlxe84e0679ad17

# 启动服务
sudo systemctl start wpa_supplicant@wlxe84e0679ad17

验证服务状态:

sudo systemctl status wpa_supplicant@wlxe84e0679ad17

检查无线连接状态:

iw dev wlxe84e0679ad17 link

经常掉线的问题

在配置完 bonding 后,访问 PVE 的 webui 和 ssh 隔一段时间都会出现网络错误和卡掉的情况。

禁用wifi 网卡后就没事了:

ip link set wlxe84e0679ad17 down

查询日志:

journalctl -u wpa_supplicant@wlxe84e0679ad17 -n 100
Apr 21 22:29:44 pve wpa_supplicant[738]: wlxe84e0679ad17: WPA: Key negotiation completed with dc:xx:93:b7:xx:9e [PTK=CCMP GTK=CCMP]
Apr 21 22:29:44 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-CONNECTED - Connection to dc:xx:93:b7:xx:9e completed [id=0 id_str=]
Apr 21 22:29:44 pve wpa_supplicant[738]: wlxe84e0679ad17: TRANSITION-DISABLE 01
Apr 21 22:30:44 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-DISCONNECTED bssid=dc:xx:93:b7:xx:9e reason=4 locally_generated=1
Apr 21 22:30:44 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-REGDOM-CHANGE init=CORE type=WORLD
Apr 21 22:30:44 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-REGDOM-CHANGE init=USER type=COUNTRY alpha2=CN
Apr 21 22:30:45 pve wpa_supplicant[738]: wlxe84e0679ad17: SME: Trying to authenticate with dc:xx:93:b7:xx:9e (SSID='ci0n' freq=2447 MHz)
Apr 21 22:30:45 pve wpa_supplicant[738]: wlxe84e0679ad17: Trying to associate with dc:xx:93:b7:xx:9e (SSID='ci0n' freq=2447 MHz)
Apr 21 22:30:45 pve wpa_supplicant[738]: wlxe84e0679ad17: Associated with dc:xx:93:b7:xx:9e
Apr 21 22:30:45 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
Apr 21 22:30:45 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-REGDOM-CHANGE init=COUNTRY_IE type=COUNTRY alpha2=CN
Apr 21 22:30:45 pve wpa_supplicant[738]: RRM: Ignoring radio measurement request: Not associated
Apr 21 22:30:45 pve wpa_supplicant[738]: wlxe84e0679ad17: WPA: Key negotiation completed with dc:xx:93:b7:xx:9e [PTK=CCMP GTK=CCMP]
Apr 21 22:30:45 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-CONNECTED - Connection to dc:xx:93:b7:xx:9e completed [id=0 id_str=]
Apr 21 22:30:45 pve wpa_supplicant[738]: wlxe84e0679ad17: TRANSITION-DISABLE 01
Apr 21 22:30:56 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-DISCONNECTED bssid=dc:xx:93:b7:xx:9e reason=4 locally_generated=1
Apr 21 22:30:56 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-REGDOM-CHANGE init=CORE type=WORLD
Apr 21 22:30:56 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-REGDOM-CHANGE init=USER type=COUNTRY alpha2=CN
Apr 21 22:30:57 pve wpa_supplicant[738]: wlxe84e0679ad17: SME: Trying to authenticate with dc:xx:93:b7:xx:9e (SSID='ci0n' freq=2447 MHz)
Apr 21 22:30:57 pve wpa_supplicant[738]: wlxe84e0679ad17: Trying to associate with dc:xx:93:b7:xx:9e (SSID='ci0n' freq=2447 MHz)
Apr 21 22:30:57 pve wpa_supplicant[738]: wlxe84e0679ad17: Associated with dc:xx:93:b7:xx:9e
Apr 21 22:30:57 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
Apr 21 22:30:57 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-REGDOM-CHANGE init=COUNTRY_IE type=COUNTRY alpha2=CN
Apr 21 22:30:57 pve wpa_supplicant[738]: RRM: Ignoring radio measurement request: Not associated
Apr 21 22:30:57 pve wpa_supplicant[738]: wlxe84e0679ad17: WPA: Key negotiation completed with dc:xx:93:b7:xx:9e [PTK=CCMP GTK=CCMP]
Apr 21 22:30:57 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-CONNECTED - Connection to dc:xx:93:b7:xx:9e completed [id=0 id_str=]
Apr 21 22:30:57 pve wpa_supplicant[738]: wlxe84e0679ad17: TRANSITION-DISABLE 01
Apr 21 22:31:08 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-DISCONNECTED bssid=dc:xx:93:b7:xx:9e reason=4 locally_generated=1
Apr 21 22:31:08 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-REGDOM-CHANGE init=CORE type=WORLD
Apr 21 22:31:08 pve wpa_supplicant[738]: wlxe84e0679ad17: CTRL-EVENT-REGDOM-CHANGE init=USER type=COUNTRY alpha2=CN
Apr 21 22:31:15 pve wpa_supplicant[738]: wlxe84e0679ad17: SME: Trying to authenticate with dc:xx:93:b7:xx:9e (SSID='ci0n' freq=2447 MHz)
Apr 21 22:31:15 pve wpa_supplicant[738]: wlxe84e0679ad17: Trying to associate with dc:xx:93:b7:xx:9e (SSID='ci0n' freq=2447 MHz)

日志很明确了:Wi-Fi 接口 wlxe84e0679ad17 在频繁断线重连,每隔 10~60 秒就掉线,这正是导致 WebUI 报错 / SSH 卡顿的根源。

在 PVE webui 的系统日志中也可以看到这个网卡在刷屏

查看这个网卡的驱动:

ethtool -i wlxe84e0679ad17
driver: rtl8192cu
version: 6.8.12-9-pve
firmware-version: N/A
expansion-rom-version:
bus-info: 1-4:1.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

这个网卡有三个驱动,以下是比较:

特性rtl8192curtl8xxxurtl8188eus (Aircrack-ng)
来源Realtek 官方(也有社区版)Linux 内核主线Aircrack-ng 社区维护
支持芯片RTL8192CU、RTL8188CU 等RTL8188CU、RTL8192CU、RTL8723BU 等RTL8188EU、RTL8188EUS 等
内核支持不包含,需手动安装已集成内核,开箱即用不包含,需自行编译
Monitor Mode 支持否(或需打补丁)是(默认支持)
Packet Injection 支持否(或需打补丁)是(默认支持)
驱动稳定性一般,需自行调试高,适合普通用途中,适用于特定任务
安装难度中,需要编译或 DKMS低,系统自动加载高,需要手动编译安装
社区活跃度低(已停止维护)高(Linux 内核维护)中等(活跃在安全圈)
典型用途普通无线联网普通无线联网(推荐)Wi-Fi 安全测试(抓包、破解)
兼容性问题常见,需手动禁用其他驱动少见,推荐优先使用可能与内核冲突,需 blacklist 其他驱动

如表格所示,我们应该切换到 rtl8xxxu 驱动。

# 禁用当前驱动
echo "blacklist rtl8192cu" | tee /etc/modprobe.d/blacklist-rtl8192cu.conf

# 卸载旧驱动
modprobe -r rtl8192cu

# 加载新驱动
modprobe rtl8xxxu

# 重启系统使更改生效
reboot

附录:网卡管理

添加新网卡

还有一张玩黑苹果剩下的 BCM94360,天线不见了,改天要替换掉现在的 usb 网卡。

如需添加新的无线网卡(例如 wlan2),按以下步骤操作:

  1. 修改网络配置
nano /etc/network/interfaces
+ auto wl2
+ iface wl2 inet manual

auto bond0
iface bond0 inet manual
+	bond-slaves eno1 wlxe84e0679ad17 wlan2
-	bond-slaves eno1 wlxe84e0679ad17
  1. 配置无线连接
# 创建 wpa_supplicant 配置
nano /etc/wpa_supplicant/wpa_supplicant-wlan2.conf

# 启用服务
systemctl enable wpa_supplicant@wlan2
systemctl start wpa_supplicant@wlan2
  1. 应用更改
ifreload -a
  1. 检查连接状态
iw dev wlan2 link

移除网卡

如需移除网卡(例如 wlxe84e0679ad17),步骤如下:

  1. 修改网络配置
nano /etc/network/interfaces
- auto wlxe84e0679ad17
- iface wlxe84e0679ad17 inet manual

auto bond0
iface bond0 inet manual
+ bond-slaves eno1 wlan2
-	bond-slaves eno1 wlxe84e0679ad17 wlan2
  1. 停用服务
systemctl stop wpa_supplicant@wlxe84e0679ad17
systemctl disable wpa_supplicant@wlxe84e0679ad17
  1. 清理配置文件(可选):
rm /etc/wpa_supplicant/wpa_supplicant-wlxe84e0679ad17.conf
  1. 应用更改
ifreload -a