以 .vpn 结尾的文件名并不代表某种通用格式。这个扩展名通常标记厂商导出的站点配置,而读取它的解析器属于该厂商的生态,而不是 macOS。把扩展名当作客户端选择器是第一个错误;真正需要确认的是导出方。答案在文件头里,不在扩展名里。

安装任何东西之前,先回答两个问题:这个文件由哪个应用生成,另一端是哪一种网关服务?答案决定解析器和协议,通常可以从提供文件的人那里得到。

扩展名不记录任何格式信息

文件扩展名只是一种命名惯例。macOS 不会把 .vpn 映射到某个通用 VPN 导入器,也没有标准规定所有带这个后缀的文件都包含相同字段。同一个后缀可以出现在厂商导出、文本包,或帮助台手工改名后的文件上。

OpenVPN 配置文件是另一种可识别的格式,通常以 .ovpn 结尾,包含 client、remote 和 dev tun 之类的指令。Mac 原生 VPN 配置描述文件由运营方以设置文件形式提供,带有特定负载类型,而不是任何客户端都能打开的任意文档。

Shrew Soft 的历史 Access Manager 文档说明了该产品如何导出和导入自己的站点定义。这类文件需要匹配的解析器和属于该产品的网关协议。与其逐个试解析器,不如问提供方这个文件由哪个应用写入。文档是格式背景,并不等于建议在当前 Mac 上安装旧客户端。

在受保护的副本上读取文件头字段

如果文件是文本,就在已经保存它的机器上查看副本。file 命令会指出容器类型,前几行通常会显示 XML plist、JSON 或 OpenVPN 风格的指令。不要把文件上传到公开转换器,也不要贴到论坛上求识别。

file site-config.vpn
head -20 site-config.vpn

文件头还可能包含服务器名、认证域或证书块。截屏文件头并不比文件本身更安全。这些内容即使看起来只是普通设置,也属于敏感信息;内嵌私钥的描述文件等同于私钥本身。检查应当留在本地并在授权范围内进行。

如果文件是二进制或加密的,就不要根据扩展名猜测。向导出方询问格式名称和支持的客户端;十六进制转储不会把未知容器变成受支持的导入。

把导出方与解析器、协议对应起来

导出方和解析器必须一致。厂商导出可能编码了只有其自家客户端才理解的站点设置、认证选项和网关行为。通用 OpenVPN 客户端能读取 OpenVPN 配置,但没有理由理解另一款产品的站点文档。

网关协议是另一半。即使文件被成功解析,它描述的仍是一个期待特定隧道协议和认证流程的服务。读取字段只能说明导出方的意图,不能说明当前网关还接受什么。

选择客户端之前,先写下三个值:导出方、网关协议和支持的 Mac 应用。只要有一项未知,导入就是猜测,而猜测正是带有私密内容的文件落入无关应用的途径。

导入成功不等于连接成功

能显示字段的导入器只证明它解析得了这些字段。建立会话还需要正确的协议、正确的凭据,以及旧配置执行过的证书或注册步骤。手工重建的连接可能漏掉原客户端强制执行的身份证验或设备策略。

在停用旧流程的情况下,用新客户端访问私有资源。连接建立了却到不了内部服务不算成功迁移;那是解析器的成功,背后是策略或路由的缺口。

在新路径验证通过之前,保留原始文件及其来源。如果客户端拒绝该格式,这个拒绝是关于导出方的有用证据,而不是不断删字段直到能连上的理由。

与其转换,不如索取受支持的描述文件

把 .vpn 改名成 .ovpn 并不能转换协议。把服务器地址复制成无关的形式、删除不认识的认证选项或去掉证书块,得到的文件也许能导入,却仍然无法通过认证。

可靠的路径是向服务所有者索取一份新的描述文件,格式要符合受支持 Mac 客户端的文档。同时问清客户端要求,因为网关可能已经迁移到旧导出从未支持的协议。

如果服务所有者无法提供当前描述文件,迁移就卡在他们那里,而不是卡在 Mac 应用的选择上。记录导出方、被拒绝的格式和准确报错,让请求带着证据而不是一个文件名。

相关文章