首次 VPN 连接很少在隧道上失败。它失败的情形是:一个普通用户在不受管理的网络上,照着一位早已装好证书的人写下的说明操作。配置文件、信任链和凭据都是配置,三者都能在用户参与之前交付。留给该用户的,应当是四个不含任何决策的动作。你在交接中留下的每个额外步骤,都会变成一通支持电话,开头是有人把对话框大声念出来。

连接配置文件实际承载了什么

VPN 配置文件不是快捷方式,也不是书签。它是操作系统连接存储中的命名对象,保存着服务器地址、隧道类型、身份验证方式,而且往往还包括决定何时连接的路由、DNS 后缀和触发规则。在 Windows 上,这些字段对应 VPNv2 配置服务提供程序的节点,所以同一份配置文件可以通过 Intune、Configuration Manager、预配包或手工导入的 XML 文件抵达。

客户端按固定顺序应用该对象:先依据受信任根验证服务器证书,再协商隧道,之后才在应用看到网络之前应用路由和名称解析。这个顺序解释了大多数「显示已连接却什么都打不开」的报告:身份验证成功了,真正失败的是 DNS 或路由表。请把配置文件读成一个有先后顺序的整体,而不是一组互相独立的开关。缺少信任根会在第一步就失败,在任何凭据被出示之前,因此它会给出笼统的错误,而不是登录提示。

信任材料是最常被手工夹带进来的字段。签发网关证书的 CA 证书必须在首次尝试之前就位,服务器名称验证必须保持开启并配有匹配的名称;为了让测试通过而关闭验证,会把身份验证问题变成任何用户都无法察觉的静默拦截。

用户永远不应该做的四个决定

协议和隧道类型排在第一位:为每个平台选定一种受支持的组合,并把网关一侧写进文档,因为熟悉的品牌名并不等于兼容性声明。接下来是端点:一个能公开解析、且与网关出示的证书相匹配的主机名。身份验证属于身份系统,无论是证书、带第二因素的用户名,还是两者兼备。这些都不是用户的偏好,也都不该作为问题出现在说明里。

第四个选择是范围:全隧道还是分离隧道,以及哪些前缀和 DNS 后缀走在隧道里。没有内部后缀的分离隧道会把名称解析泄漏给本地网络提供的任何解析器,而没有本地资源计划的全隧道会弄坏打印机和强制门户。两者都是对用户有可见影响的管理员决定,正因如此,用户拿到的应当是已经定好的结果。

让连接名称保持乏味而稳定。用户会把它念给支持人员听、在客户端列表里找它、在两次重置密码之间记住它;在迁移中途改名,会制造一波与 VPN 是否可用毫无关系的支持高峰。

按人或按设备交付身份

配置文件是公开的,私钥不是。常见的部署错误是把一份能用的配置文件连同它的证书一起导出,然后让文件传来传去,这会让每台笔记本都变成同一身份的克隆,并把吊销变成全有或全无的决定。正确做法是通过受支持的流程登记凭据:从管理通道下发每台设备的证书,或从身份提供方取得每位用户的凭据。

设备隧道和用户隧道在不同时刻完成身份验证,这个差别决定了你需要哪种凭据。登录前就连接的设备隧道需要计算机证书和系统可用的配置文件。登录后才启动的用户隧道可以使用用户自己的凭据,并且不应该要求管理员权限。仅仅为了省掉某人早上的那次点击就加上机器级网络访问,是一笔糟糕的交易,因为它扩大了无人看管设备能够触达的范围。

登记也是决定恢复路径的地方。证书续期或密码变更必须在隧道断开时送达设备,因此预配、身份提供方和网关必须就这件事怎么发生达成一致;如果修复配置文件的唯一途径就是该配置文件所提供的隧道,那钥匙就被锁在盒子里了。

让交付渠道与客户端相匹配

原生客户端和第三方客户端的交付方式不同。Windows 配置文件可以通过 Intune 或 Configuration Manager 以 VPNv2 ProfileXML 交付,但并非每个节点都在每个管理界面上暴露,路由、DNS 和触发设置也随工具和 Windows 版本而异。在承诺零接触部署之前,先确认哪些字段可以部署,因为配置文件选项参考记录了某些交付路径仍然无法设置的项。

厂商客户端会再加一层,因为二进制、配置文件和头端策略是彼此分离的产物。例如 Cisco Secure Client 支持连同其配置文件一起预部署安装包,而客户端版本必须与网关配置协调;只装安装包会让用户留在向导里。

无论选择哪个渠道,都要为配置文件保留唯一的真相来源。被较旧安装包在下一次检查时覆盖掉的修好的配置文件,是反复发生的事故,持久的做法是有版本的配置,而不是逐台机器手工修改。

以新用户身份测试交接,然后测试恢复

在没有管理员已保存会话、也没有预先登记证书的、从未连接过的设备上,用普通账户做试点。确认配置文件出现在列表里、登录提示与说明一致、某个具名内部资源能打开,然后再检查名称解析和路由范围,而不是停在「已连接」的图标上。

查询设备的配置文件存储,让测试给出证据而不是印象。

Get-VpnConnection -AllUserConnection | Select-Object Name, ServerAddress, TunnelType, AuthenticationMethod, SplitTunneling
Get-VpnConnection -Name "Corp VPN" | Format-List
Test-NetConnection intranet.example.com -Port 443

接着走一遍用户真正会遇到的事件:强制重置密码、证书续期、被推送的客户端更新,以及试点中没人用过的新网络。每一件都应当按说明所述正常工作或失败。也要试一个封住 VPN 端口的网络,因为酒店 Wi-Fi 上的首次尝试,正是家里那套成功经验开始不管用的地方。在每条结果旁边记下客户端版本和操作系统构建号,因为下一份报告送来时不会有它们。

把给用户的交接压到四行:连接名称、预期登录方式、能证明成功的资源,以及错误文字该发到哪里。不该向任何人索要密码或导出的密钥来演示故障。架构、配置文件内部和恢复流程属于管理员的运行手册,归档在测试时所用客户端版本旁边。

相关文章