Ubuntu 18.04 的 VPN 菜单里没有 OpenVPN:该装什么
GNOME 面板里的 VPN 类型来自插件包,而不是 openvpn 命令。装好这一组包,重启 NetworkManager,再导入配置文件。
GNOME 的 VPN 列表可能根本不提供与手上配置文件匹配的项目,而常见的结论是这个桌面不支持 OpenVPN。其实支持。缺的是一个插件包,同一台机器上的命令行客户端与菜单毫无关系。这个误解最该先破除,因为它会让人重装错东西。
菜单列出的是插件,不是协议
GNOME 绘制的是网络管理器上报的连接类型,而管理器上报的是已安装的插件。因此空列表说明的是已装插件的集合,而不是协议的能力。这就是为什么能用的 openvpn 二进制在面板里毫无变化。
这个区别重要,因为从面板看两种故障一模一样。缺插件和插件损坏都会弹出 一个帮不上忙的对话框,而只有前者能靠安装某个包解决。装任何东西之前,先问管理器它认识哪些类型,就能把两者分开。这个问题只花一条命令,却顶替一小时瞎猜。
对话框属于哪个包
在 Ubuntu 18.04 上这些包有具体名字,更新的发行版也沿用同样的拆分。要把它们理解为角色而非备选,因为只装一个很少能单独解决问题。一个包提供守护进程和命令行客户端,两者都不认识任何设置对话框。
插件包让网络管理器能够创建、保存并启动 OpenVPN 连接。编辑器包提供表单、字段以及面板调用的保存路径。有插件但没有编辑器的机器会显示一个无法配置的类型,而有编辑器但没有插件的机器则什么都不显示。把这一组装在一起,歧义就消失了。
sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome
nmcli --version
在 18.04 上,这些是真实的软件包名,而不是占位符。KDE 桌面需要自己的编辑器包,也仍然需要插件,而这正是一份只讲 GNOME 的指南会漏掉的部分。
重启也是安装的一部分
面板在服务启动时向管理器询问支持的类型,而已经渲染出来的列表不会因为安装而刷新。所以在服务运行时安装,就会得到装成功了、对话框却没变这种令人沮丧的组合。重启不是可有可无的收尾,而是让安装可见的那一步。
重启会中断连接几秒钟,任何走同一网卡的 SSH 会话也会一起断开,所以机器在远端时要提前安排。然后重新打开面板,直接问管理器它支持什么。直接查询比可能被缓存的菜单更可靠。
sudo systemctl restart NetworkManager
nmcli -f NAME,TYPE connection show
nmcli connection add type vpn
最后一条命令才是区分性的测试。装了插件时,它会因缺少参数而失败;没装时,它会报告未知的 VPN 类型。一种结果是等待填写的表单,另一种仍然是打包问题。想看清差别,就在安装前后各跑一次。
让 nmcli 读取 .ovpn
没有人强迫你逐项重建别人给的配置文件。管理器会直接读取 .ovpn 文件,把其中的指令变成已保存的连接,内嵌证书也一样。导入在准确性上也胜过转录,因为写错的加密算法或被截断的密钥会产生看起来像服务器问题的故障。
在保存完成之前,把配置文件和它引用的任何密钥或证书放在一起,因为只保存文件路径的连接会在这些文件移动后失效。然后按名称测试连接,并在前台回答任何凭据提示,这样才能看出它要什么。一个从未激活过的已保存连接,什么都证明不了。
nmcli connection import type openvpn file ~/Downloads/office.ovpn
nmcli --ask connection up office
nmcli -f NAME,TYPE,STATE connection show --active
第三条命令确认隧道以你期望的名字建立起来了。它也能把失败的连接和从未激活的连接区分开。
菜单告诉不了你的事
缺少类型并不能说明网关的任何情况,也不代表服务器拒绝 OpenVPN。它不是安装一个无关协议插件、只为了让菜单项出现的理由。第二个错误在实践中有个名字:因为菜单里只有那些选项,人们最后把 PPTP 或 AnyConnect 配置指向了 OpenVPN 服务。
先修打包问题,服务器的问题随后再说。一个能干净导入却从不认证的配置文件,失败在证书、TLS 或凭据问题上,而不是编辑器问题。每一种留下的证据都不同,而它们都不会出现在对话框里。重新打开设置面板之前,先读客户端日志。
用你真正在用的资源来验证
类型存在、连接保存之后,拨通它并打开一个你真正在用的资源。仅仅激活只能证明两端对隧道达成了一致。隧道起来了却什么也传不了,就是下一个故障模式,而面板看不到它。
写下你测的是哪个资源,这样下一个人会重复那项检查,而不是从头再来。当隧道已建立、资源仍然失败时,排查要转向路由和 DNS,而不是回到对话框。这条记录就是修复和讲故事之间的差别。