Mac VPN 导出文件包含什么,又留下了什么
Mac VPN 导出文件携带设置,有时还有私钥,但不含钥匙串密码或设备注册信息。请先逐项核对。
在 Mac VPN 客户端里点击导出,得到的文件只是描述连接,本身并不是连接。服务器地址、端口、协议,往往还有证书,都在文件里。登录密码、私钥密码短语,以及授权这台 Mac 的注册信息,通常不在其中。所以配置文件可以顺利导入、出现在客户端列表里,却在第一次认证时失败;这个缺口来自格式本身,而不是下载损坏。
| Part of the connection | Where it lives on the old Mac | What an export does with it |
|---|---|---|
| Server, port, protocol, routes | Client profile or managed settings | Usually included when the client exports configuration |
| Client certificate and private key | Inside the package, the login keychain, or issued by MDM | Included only if the format packs it; a keychain-held key stays behind |
| Login password, key passphrase | Login keychain | Left out by design |
| Device authorization or enrollment | Server side, bound to the certificate or the device record | Not transferable; the new device has to enroll |
导出文件里实际有什么
导出是一个容器,文件扩展名说明的比内容少。OpenVPN 配置文件是文本:指令,外加可选的 <ca>、<cert> 和 <key> 内联块。Tunnelblick 的安装包是配置和设置的压缩归档。受管理的 .mobileconfig 是载荷的 plist。在导入任何内容之前,两份清单就能回答大部分问题。
对文本配置文件,数一数它携带的 PEM 块:grep -c "PRIVATE KEY" your-profile.ovpn。结果不为零,说明文件含密钥材料,从此必须当作密码处理。对归档,不展开就列出内容:tar -tf export.tbz,如果客户端生成了 zip,则用 unzip -l export.zip。该清单中的密钥文件、证书文件以及 up 或 down 脚本,是重新签发用户账号不会重建的部分。
反过来的情况同样重要。配置文件用文件名指向密钥而不是内嵌密钥时,导出是有意不完整的,缺的那一半必须来自签发方。如果证书颁发机构归你所有,把该文件一并复制没有问题;如果文件附带的是在老 Mac 上生成的、与设备绑定的证书,就不行。
为什么钥匙串那一半从不随文件走
macOS 把 VPN 密码和密钥密码短语放在登录钥匙串里,客户端也把它们存在那里,而不是自己的设置文件。Tunnelblick 在其导出与导入指南中说明了这一点:安装包携带配置和设置,省略钥匙串中保存的用户名、密码和密码短语。这种省略是有意为之。钥匙串条目按用户和机器分别保护,复制到目标机器的条目没有有效的访问控制,结果要么是无用的文件,要么是明文秘密。
在计划迁移之前,你可以确认凭据到底住在哪里。security find-internet-password -s vpn.example.com 会打印匹配条目的属性,没有匹配时以非零状态退出;同一条命令加上 -g 会要求显示密码,所以不带它的查询是更安全的检查。那里有命中,说明配置文件并没有携带密码,也无法强迫它携带。这也意味着新 Mac 上会再次询问密码,而旧 Mac 上的“始终允许”在那里毫无作用。
不过,并非每个秘密都是钥匙串条目。Tunnelblick 自己的软件包文档指出,包内可能包含密钥、证书和脚本文件。所以,导出不含钥匙串条目,与“导出可以安全地通过邮件发送”并不是同一回事;在列清里面有什么之前,请把归档当作敏感文件。
原生和受管理的 VPN 没有导出路径
通过系统设置配置的连接不提供受支持的导出。scutil --nc list 显示系统已知的服务,scutil --nc show "Work VPN" 打印某个服务的配置,足以读出它的服务器和协议。两者都不是迁移工具。保存在 /Library/Preferences/SystemConfiguration/preferences.plist 中的服务标识符是指向该文件的引用,所以复制文件并改写标识符不是受支持的迁移,还可能干扰目标机器上无关的网络服务。
受支持的路径是 Apple 文档写明的那条:安装管理员提供的 VPN 设置文件,或输入运营商给你的设置。连接受管理时,请索取新文件或新的注册,而不是照着旧对话框的截图重建。对 MDM 推送的配置,证书载荷可能承载身份,而私钥在设备上生成;这种情况下,即使旧配置复制得完美无缺,也无法让新 Mac 通过认证。
验证恢复结果,而不是相信列表
列表里的配置和真正可用的隧道是两种状态,只有一种值得报告。导入并连接之后,先确认隧道接口存在,再确认隧道在做什么。
ifconfig | grep -A3 utun 显示隧道接口及其地址。scutil --dns | grep nameserver 显示连接后哪些解析器处于活动状态,split-DNS 配置通常就在这里出现分歧。然后访问真正重要的资源:curl -sS -o /dev/null -w "%{http_code}" https://intranet.example.com。三项都通过,说明设置、DNS 和路由都到了;客户端里的绿色图标本身并不说明这些。
导入之后常出现两种失败,两者都被归咎于文件。公网名称能解析而内网名称不能,通常说明配置里的 DNS 服务器被丢掉了,或者 split-DNS 没有被保留。隧道能建立却不转发流量,通常说明路由或服务器端授权没有随配置生效。重新导入同一个归档会重现这两种情况。
在让旧 Mac 退役之前
删除导出文件并不等于吊销。如果旧设备用证书认证,服务器仍然信任那张证书,直到它被吊销或重新签发。如果它用共享账号认证,该账号上的会话可能仍然有效。趁硬件还在手边,先把服务器端的那一步做完。
当新配置包含密钥时,把它和其他凭据一起存放,并把密码输入客户端,让它进入新的钥匙串而不是留在文件里。最后一步检查:在旧 Mac 关机的情况下,从替换机器连接。只在源机器在线时才能工作的交接,从来都不算完整。