PVE 网卡冗余配置

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

应用场景

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

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

网络结构

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

网络层级关系:

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

前期准备

安装必要工具

bash 复制代码
apt update
apt install wpasupplicant iw -y

说明:

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

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

识别网卡设备

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

bash 复制代码
ip link

输出示例:

bash 复制代码
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 默认的桥接网络接口

配置网络接口

修改网络配置文件

编辑网络配置文件:

bash 复制代码
nano /etc/network/interfaces

配置内容:

bash 复制代码
# 回环接口
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:设置转发延迟

应用网络配置:

bash 复制代码
ifreload -a
# 或者
systemctl restart networking

验证配置:

bash 复制代码
# 检查网络接口状态
ip a

# 检查路由表
ip r

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

配置WIFI网卡连接到网络

配置无线网络连接

创建 wpa_supplicant 配置文件:

bash 复制代码
nano /etc/wpa_supplicant/wpa_supplicant-wlxe84e0679ad17.conf

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

配置文件内容:

bash 复制代码
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 服务:

bash 复制代码
# 创建服务链接
sudo ln -s /lib/systemd/system/[email protected] /etc/systemd/system/[email protected]

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

# 启动服务
sudo systemctl start wpa_supplicant@wlxe84e0679ad17

验证服务状态:

bash 复制代码
sudo systemctl status wpa_supplicant@wlxe84e0679ad17

检查无线连接状态:

bash 复制代码
iw dev wlxe84e0679ad17 link

经常掉线的问题

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

禁用wifi 网卡后就没事了:

bash 复制代码
ip link set wlxe84e0679ad17 down

查询日志:

bash 复制代码
journalctl -u wpa_supplicant@wlxe84e0679ad17 -n 100
bash 复制代码
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 的系统日志中也可以看到这个网卡在刷屏

查看这个网卡的驱动:

bash 复制代码
ethtool -i wlxe84e0679ad17
bash 复制代码
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

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

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

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

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

# 卸载旧驱动
modprobe -r rtl8192cu

# 加载新驱动
modprobe rtl8xxxu

# 重启系统使更改生效
reboot

附录:网卡管理

添加新网卡

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

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

  1. 修改网络配置
bash 复制代码
nano /etc/network/interfaces
diff 复制代码
+ auto wl2
+ iface wl2 inet manual

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

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

移除网卡

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

  1. 修改网络配置
bash 复制代码
nano /etc/network/interfaces
diff 复制代码
- auto wlxe84e0679ad17
- iface wlxe84e0679ad17 inet manual

auto bond0
iface bond0 inet manual
+ bond-slaves eno1 wlan2
-	bond-slaves eno1 wlxe84e0679ad17 wlan2
  1. 停用服务
bash 复制代码
systemctl stop wpa_supplicant@wlxe84e0679ad17
systemctl disable wpa_supplicant@wlxe84e0679ad17
  1. 清理配置文件(可选):
bash 复制代码
rm /etc/wpa_supplicant/wpa_supplicant-wlxe84e0679ad17.conf
  1. 应用更改
bash 复制代码
ifreload -a
相关推荐
不想说话的麋鹿1 天前
「项目实战」从0搭建NestJS后端服务(八):静态资源访问以及文件上传
前端·node.js·全栈
hboot4 天前
rust 全栈应用框架dioxus
前端·rust·全栈
林夕11204 天前
Node.js Web开发进阶:Stream、HTTP模块与文件上传全解析
前端·node.js·全栈
天天扭码5 天前
用一个项目揭开AI全栈的神秘面纱——让AI根据你的项目数据生成回答
openai·ai编程·全栈
Edward-tan5 天前
【玩转全栈】—— Django+vue3+讯飞星火API 实现前端页面实时AI答复
vue3·全栈·django5
小鬼难缠z5 天前
阿里云部署Hugo与备案实践
程序员·全栈
南囝coding6 天前
独立开发者工具 • 半月刊 • 第 008 期
产品·全栈·设计
深度学习机器15 天前
SmolDocling-256M:极小参数量的视觉语言模型|端到端文档解析方案的另一种思路
人工智能·产品·全栈
404BrainNotFound17 天前
Dokploy部署Net服务,打造CI/CD开发环境
运维·全栈