解决macOS重启后OpenVPN无法连接的问题

封面

症状描述

首次安装OpenVPN后可以正常连接,但只要一重启macOS,就无法连接成功一直超时。

原因解析

OpenVPN macOS客户端只是一个壳子,实际上是给本地服务的socket连接发消息,重启后OpenVPN客户端依赖的服务没有启动导致无法使用

解决方案

方案一:仅调整macOS设置

这个方案是否可行取决于你的macOS机器上 “设置->通用->登录项与扩展->App后台活动” 中是否有对应OpenVPN的项目,如果有,直接打开即可

方案二:给macOS新增一个App后台活动

需要用到终端terminal执行下面整段命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
sudo tee /Library/LaunchDaemons/local.openvpn.ovpnagent.plist >/dev/null <<'PLIST'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.openvpn.ovpnagent</string>

<key>ProgramArguments</key>
<array>
<string>/Library/Frameworks/OpenVPNConnect.framework/Versions/Current/usr/sbin/ovpnagent</string>
</array>

<key>RunAtLoad</key>
<true/>

<key>KeepAlive</key>
<true/>

<key>ThrottleInterval</key>
<integer>10</integer>

<key>StandardOutPath</key>
<string>/var/log/local.openvpn.ovpnagent.log</string>

<key>StandardErrorPath</key>
<string>/var/log/local.openvpn.ovpnagent.log</string>
</dict>
</plist>
PLIST

sudo chown root:wheel /Library/LaunchDaemons/local.openvpn.ovpnagent.plist
sudo chmod 644 /Library/LaunchDaemons/local.openvpn.ovpnagent.plist

sudo plutil -lint /Library/LaunchDaemons/local.openvpn.ovpnagent.plist

正常会返回:

1
/Library/LaunchDaemons/local.openvpn.ovpnagent.plist: OK

然后加载它:

1
2
3
4
5
6
7
sudo launchctl bootout system/local.openvpn.ovpnagent 2>/dev/null || true

sudo launchctl bootstrap system \
/Library/LaunchDaemons/local.openvpn.ovpnagent.plist

sudo launchctl enable system/local.openvpn.ovpnagent
sudo launchctl kickstart -k system/local.openvpn.ovpnagent

检查运行状态:

1
2
3
4
5
6
sudo launchctl print system/local.openvpn.ovpnagent |
grep -E 'state =|pid =|runs =|last exit code'

pgrep -alf ovpnagent

ls -l /var/run/agent_ovpnconnect.sock

预期结果:

1
2
state = running
pid = ...

并且 socket 存在:

1
/var/run/agent_ovpnconnect.sock