有人把一条 Mac 连接命名为“办公室 VPN”,这个标签经历两次服务器迁移仍被沿用,协议早已更换,大家却还叫它办公室 VPN。名字只是存放在配置旁边的绰号,不能证明 Mac 实际协商的内容。读取声明的类型只需一个字段,而把该存储类型与活动会话分开还需要一步。下面是不靠猜测的顺序。

标签只是绰号,载荷才声明类型

macOS 的 VPN 服务是一条系统配置条目,带有显示名称、所属客户端和一组带类型的设置。显示名称是自由文本,创建条目的人都能修改,用户能在菜单栏看到的正是这一部分。设置才承载事实:连接类型、网关、认证方式。没有任何机制让两者保持一致,因此名为“L2TP 办公室”的配置也可能是 IKEv2 服务。

对于个人创建的连接,所属应用或系统自带的 VPN 面板会显示这些设置。在受管理的 Mac 上,配置属于管理员,正确做法是索取不含机密信息的摘要,而不是修改受管理的载荷。两种情况在菜单栏里看起来一样,底层行为却完全不同。一个由你检查并修改;另一个已部署,会在下次检查时被还原。

这个区别很重要,因为受管理配置与个人配置的治理方式不同。管理方安装的配置会被替换或重新应用,本地修改要么失败,要么被悄悄还原。应当向所有者索取类型、网关标识和认证方式,而不是对你不掌控的文件做逆向工程。

先读载荷中的 VPNType,再看其他内容

Apple 的受管理 VPN 载荷架构在 VPNType 键中声明连接类型,它位于 PayloadType 为 com.apple.vpn.managed 的字典内。取值是 IKEv2、IPsec、L2TP 或 VPN 这样的短标记,载荷中其余内容都按该标记解释。

<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>VPNType</key>
<string>IKEv2</string>
<key>IKEv2</key>
<dict>
  <key>RemoteAddress</key>
  <string>vpn.head-office.example</string>
  <key>RemoteIdentifier</key>
  <string>ikev2.head-office.example</string>
</dict>

这段片段只是示例,不能用于安装:它是载荷数组中的一个条目,去掉了真实部署所需的配置元数据和凭据。读它是为了看结构,而不是看内容。还要注意,RemoteAddress 与 RemoteIdentifier 是职责不同的两个字段,即使部署时把它们设为同一字符串。

旧值如 PPTP 仍可能出现在旧文件里,但当前 macOS 不会把它作为新配置的可选项。在已保存的配置里找到标记,只能证明当初写了什么,不能证明操作系统仍然接受什么。

自定义类型需要 VPNSubType 和所属应用

当 VPNType 为 VPN 时,载荷还必须带有 VPNSubType,它标识实现该连接的插件或 Network Extension 提供方。正是这个标识符把连接交给特定客户端,因此子类型写错会得到一个能安装却无法启动的配置。

在以应用扩展为基础的提供方中,标识符属于承载它的应用,而不是猜测的扩展名,这正是人们手工编辑配置时常弄错的细节。即便子类型正确,它描述的也只是客户端,而不是线路协议、认证方式或该客户端将使用的远程访问策略。

因此自定义载荷只能告诉你哪个软件拥有这条连接,别的几乎没有。要知道它协商什么,应阅读该提供方自己的文档及其已配置的参数。从别的组织的配置里复制子类型不是配置手法,而是恰好能被解析的猜测。

列出 Mac 实际配置了什么

在读取任何文件之前,先问系统存在哪些服务、处于什么状态。命令行视图比逐层点击面板更快,并且会在每条记录旁打印类型。

scutil --nc list
scutil --nc show "Office VPN"

第一条命令列出已配置的 VPN 服务及其当前状态,第二条打印所选服务的设置,包括类型和将要联系的服务器地址。把该地址与你被告知应预期的网关比较,因为指向已退役主机的旧条目是常见的继承问题。

这些命令显示配置与状态,并不证明隧道在承载流量。如果服务已断开,输出描述的是意图而非可用会话。已连接却没有流量的服务又是另一类问题,通常是路由或 DNS,而不是协议类型。把这三种观察分开,否则诊断会退回猜测。

把已保存的设置与活动会话分开

已保存的配置是一份意图声明。它不能说明网关仍提供该服务、这份配置就是当前生效的那份,或某次会话已成功协商。这是三个独立问题,各有各的证据。

使用所有者的状态视图或诊断工具确认当前连接以及网关出示的身份。端口扫描或从无关网站看到的证书都回答不了这两个问题,证书的通用名称也不等于预期的远程标识符。

当保存的类型不再与网关支持的相符时,向所有者索取替代配置。修改类型字符串不会在协议之间转换凭据,也不会把一种认证安排变成另一种。还应通过获批的支持渠道分享摘要,因为导出的配置可能带有支持请求根本不需要的凭据和私钥。

相关文章