如何延长NetworkManager管理的OpenVPN连接超时时间至60秒以上?
我完全懂你这会儿的头疼——手动启动OpenVPN时加个--hand-window就能延长握手超时,可通过NetworkManager的nmcli连接,死活卡在60秒就报“未知原因”失败,试了好几种配置都没搞定,确实闹心。
咱们先把问题捋明白:NetworkManager和OpenVPN的超时是两套独立机制,你之前的尝试其实已经摸到了关键点,但没找对两者配合的正确方式。
核心问题拆解
从你贴的DBus日志能看到,连接启动后刚好61秒就触发失败状态,这正好是OpenVPN默认的60秒握手超时(由hand-window参数控制)。你在nmconnection里加的timeout=90其实是NetworkManager插件自身的超时:当这个值小于60时,NetworkManager会先触发超时提示;但当大于60时,OpenVPN自己先在60秒时握手失败退出,NetworkManager就只能报“未知原因”了。
可行的解决方法
方法1:让NetworkManager给OpenVPN传递hand-window参数(最推荐)
你之前导入带hand-window的ovpn文件没生效,是因为NetworkManager的OpenVPN插件不会自动识别这个参数,咱们手动添加到配置里:
- 编辑你的VPN连接配置文件:
sudo nano /etc/NetworkManager/system-connections/MyOpenVPN_TCP.nmconnection - 在
[vpn]段落里新增一行:hand-window=90 - 保存后务必修正文件权限(NetworkManager要求配置文件必须是root专属,权限600):
sudo chmod 600 /etc/NetworkManager/system-connections/MyOpenVPN_TCP.nmconnection sudo chown root:root /etc/NetworkManager/system-connections/MyOpenVPN_TCP.nmconnection - 重启NetworkManager让配置生效:
sudo systemctl restart NetworkManager - 现在用
nmcli connection up MyOpenVPN_TCP测试,握手超时应该会延长到90秒了。
方法2:同步调整NetworkManager的全局VPN超时(可选,配合方法1更稳妥)
如果担心NetworkManager自身的等待超时比OpenVPN的握手超时短,可以调整全局配置留缓冲:
- 编辑NetworkManager主配置文件:
sudo nano /etc/NetworkManager/NetworkManager.conf - 在
[connection]段落里添加(没有的话就新建这个段落):
这里设100秒是为了比OpenVPN的90秒握手超时多留一点冗余时间。vpn.timeout=100 - 同样重启NetworkManager生效:
sudo systemctl restart NetworkManager
方法3:用包装脚本强制给OpenVPN加参数(兜底方案)
如果上面的方法都不生效,咱们可以给OpenVPN套个“壳脚本”,让NetworkManager启动它时自动带上--hand-window参数:
- 先备份原OpenVPN二进制文件:
sudo mv /usr/sbin/openvpn /usr/sbin/openvpn.orig - 创建新的脚本文件:
sudo nano /usr/sbin/openvpn - 写入以下内容:
#!/bin/bash exec /usr/sbin/openvpn.orig --hand-window 90 "$@" - 给脚本添加执行权限:
sudo chmod +x /usr/sbin/openvpn - 重启NetworkManager后测试连接即可。
验证效果
你可以像之前那样手动启动OpenVPN确认hand-window生效,再用nmcli触发连接,观察日志里的超时时间是否延长到了你设置的数值。
备注:内容来源于stack exchange,提问作者Analytiker

