搭载Ubuntu 18.04的旧iMac睡眠后Wi-Fi反复要求认证,导致OpenVPN服务故障排查求助
兄弟,你这个问题确实头疼——作为家用VPN服务器,睡眠后Wi-Fi反复掉还得重新认证,直接断了远程访问的路。结合你说的旧iMac(2012款左右)+ Ubuntu 18.04的情况,我给你梳理几个实用的排查和解决方向:
先搞清楚你的iMac具体型号和Wi-Fi网卡
2012款iMac的Wi-Fi硬件大概率是Broadcom系列,不同子型号的驱动问题不一样。你可以用这两个命令快速确认:- 看设备型号:
sudo dmidecode -s system-product-name - 看网卡详细信息:
sudo lshw -C network
拿到型号后,后续排查驱动会更精准。
- 看设备型号:
把Wi-Fi电源管理设置彻底持久化
你之前用iwconfig关了节能,但可能睡眠或重启后又自动恢复了。试试把配置写到系统文件里:- 创建并编辑NetworkManager的节能配置文件:
sudo nano /etc/NetworkManager/conf.d/wifi-powersave.conf - 写入以下内容:
(注:2代表强制禁用Wi-Fi节能,0=默认,1=忽略,3=启用)[connection] wifi.powersave = 2 - 重启NetworkManager生效:
sudo systemctl restart NetworkManager
另外,还可以用powertop工具检查更底层的电源设置:打开powertop后找到Wi-Fi相关的「Runtime PM」选项,设置为「Bad」(禁用),然后执行sudo powertop --auto-tune把配置持久化,再把这个命令加到开机自启里(比如加到/etc/rc.local,记得给该文件加执行权限:sudo chmod +x /etc/rc.local)
- 创建并编辑NetworkManager的节能配置文件:
修改NetworkManager的睡眠行为
Ubuntu 18.04默认用NetworkManager管网络,它可能在系统睡眠时主动断开Wi-Fi,哪怕网卡节能关了。试试改它的睡眠配置:- 创建配置文件:
sudo nano /etc/NetworkManager/conf.d/sleep.conf - 写入:
[main] sleep-wifi-disable=false - 重启NetworkManager:
sudo systemctl restart NetworkManager
如果用的是GNOME桌面,也可以去「设置-电源」里,找「当系统挂起时」的网络选项,确保设置为「保持连接」。
- 创建配置文件:
排查Wi-Fi驱动问题
老Broadcom网卡在Ubuntu 18.04上确实容易出睡眠后断连的bug,试试重装或切换驱动:- 先卸载现有闭源驱动:
sudo apt purge bcmwl-kernel-source - 安装开源驱动:
sudo apt install firmware-b43-installer(如果你的网卡是b43系列,刚才用lshw能看到) - 要是不行,再装回闭源驱动:
sudo apt install bcmwl-kernel-source
重启后测试睡眠唤醒后的Wi-Fi状态,看还会不会出现认证循环。
- 先卸载现有闭源驱动:
考虑升级到Ubuntu LTS新版本
你担心旧硬件扛不住?其实2012款iMac跑Ubuntu 20.04或22.04(都是长期支持版)完全没问题——这类老iMac至少有4G内存(不够的话几十块就能升级),新版本的NetworkManager和驱动栈更新更稳定,很多旧版本的睡眠网络bug都被修复了。
升级前记得备份VPN配置、动态DNS设置这些重要数据,然后用sudo do-release-upgrade命令就能直接升级,或者重装系统(重装的话要重新配置VPN,看你哪个方便)。临时应急方案:唤醒后自动重连Wi-Fi和OpenVPN
如果以上方法暂时没生效,可以整个自动重连的脚本,避免手动认证:- 创建systemd服务文件:
sudo nano /etc/systemd/system/wifi-reconnect.service - 写入以下内容(把「你的Wi-Fi名称」换成实际的SSID,OpenVPN服务名根据你的配置改):
[Unit] Description=Reconnect Wi-Fi and restart OpenVPN after sleep After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target [Service] Type=oneshot ExecStart=/usr/bin/nmcli con up "你的Wi-Fi名称" ExecStart=/usr/bin/systemctl restart openvpn@server.service [Install] WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target - 启用服务:
sudo systemctl enable --now wifi-reconnect.service
这样每次系统唤醒后,会自动重连Wi-Fi并重启OpenVPN服务,不用手动点认证。
- 创建systemd服务文件:
备注:内容来源于stack exchange,提问作者Sumbadee

