周五它还正常。周一同一个 Windows 客户端弹出一个对话框,说连接尝试失败,而下面那句话你已经在十几种毫不相干的问题里见过。那个对话框是一条链的末端,不是开端。Windows 把尝试真正死掉的那一层藏了起来,两条小证据能把它指出来:数字形式的结果代码,以及同一分钟的一条 RasClient 事件。下面是我用的顺序——固定这次尝试,读出代码,取出事件,然后只改一层。

对话框文字是最后一步,不是原因

你读到的那句话是在尝试已经收场之后才被选中的。“连接在建立之前被远程计算机终止”会在服务器于协商中途挂断时出现,会在用户名还没发出去 IPsec 就失败时出现,也会在某条策略直接拒绝隧道时出现。三种不同的责任方,同一句话。把措辞当成一类症状,在代码同意之前别让它主导任何判断。

仍然能固定下来的是这次尝试本身。写下连接名、配置里保存的隧道类型——PPTP、L2TP/IPsec、SSTP 或 IKEv2——、精确到秒的时间,以及代码。如果不确定实际跑的是哪个协议,就打开 %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk 读条目,而不是凭记忆;为新协议复用的配置会保留它旧的显示名。

先读数字,再读文字

代码分成三个阶段,而阶段比精确措辞更重要:走到并被拒绝的身份验证交换、始终没有回应的服务器,或者链路起来之后崩掉的协商。691 属于第一种——凭据检查跑了并失败,可能是密码错误、账户被锁或过期,也可能是服务器不接受的验证协议。812 也是拒绝,但凭据是有效的:远程访问服务器上的一条策略做出了不利于你的决定。Microsoft 维护着权威的拨号与 VPN 连接的错误代码清单,在检索提示文字之前,值得先去那里查自己的号码。

809 是相反的一类:什么也没回来。这是路径问题——SSTP 的 TCP 443 被过滤、PPTP 的 GRE 被封锁、IPsec 穿透的 UDP 500 和 4500 或 ESP 被丢弃。新密码修不好它,新证书也修不好。720 说明链路起来了而 PPP 始终没完成协商,这指向协议不匹配,或者服务器分配不了地址。789,或者 IKEv2 上的 13801,是 IPsec 内部的身份问题:证书主体与你拨号的名称不符、信任链不受信,或者两端的预共享密钥不一致。

取出同一分钟的 RasClient 事件

在事件查看器里,按来源 RasClient 筛选的 Windows Logs > Application 是第一个该看的地方。Microsoft 关于错误 720 的文章指向那份日志里的 20227 事件。同一个提供程序会为其他结果发出别的标识符,所以要读消息本身以及其中内嵌的结果代码,而不是把 ID 当成诊断;一个笼统的对话框加上一条携带 720 的 20227,已经是窄得多的故事。

在 PowerShell 里,不用点图形界面:

Get-WinEvent -FilterHashtable @{
  LogName      = 'Application'
  ProviderName = 'RasClient'
  StartTime    = (Get-Date).AddMinutes(-15)
} | Format-List TimeCreated, Id, Message

空结果本身就是信息。它通常意味着拨号根本没走到 RAS 能记下任何东西的程度,或者失败的软件压根不是原生客户端——第三方客户端有自己的诊断,常常什么都不写进 Application 日志。在下结论说事件记录坏了之前,先查厂商的日志。

搭一条时间线,而不是一堆事件

重试循环会制造噪音。五次自动重连留下一簇事件,而诱惑是把它们读成一条单一原因的序列。那是五次彼此独立的尝试,只有一部分到达了服务器。取两三分钟的窗口、一个连接名,在解释任何东西之前先把每条事件连同它自己的代码列出来。

然后问尝试停在了哪里。当网关或身份验证后端对该时间戳没有任何记录时,客户端根本没到达那里,你看的是可达性问题。当后端显示有请求也有拒绝时,决定是在那里做出的,凭据或策略那一类就适用。比时间之前先比时钟:客户端报的是本地时间,很多网关记的是 UTC,一个时差就会让一对完全相关的记录看起来毫无关系。

想要可重复的抓取,就从命令行拨号,让它把结果打印出来:

rasdial "Office VPN"
rasdial "Office VPN" /disconnect

控制台会显示图形界面藏在友好文字背后的那个号码,跑两次就能知道代码是稳定的还是间歇的。

每个阶段要你改什么

只有把改动集合收窄到一层时,给阶段命名才有用:

  • 691 — 身份验证:客户端提出的 EAP 方法与服务器接受的方法、账户状态、密码到期、拨入权限。
  • 812 — 服务器策略:与这个用户、这个时间窗口相符的远程访问策略或 NPS 规则。
  • 809 — 可达性:路径上的防火墙规则、NAT 与协议穿透、所选隧道类型需要的端口。
  • 720 — PPP 协商:验证协议不匹配、地址分配、服务器侧的 PPP 设置。
  • 789 / 13801 — IPsec 身份:证书主体与你拨号的名称、信任链、预共享密钥。

改其中一项,重测同一个配置,把新代码记下来。改动之后代码变了是进展而不是矛盾:你把故障挪到了更后面的阶段,而修多阶段握手看起来正是这样。不该做的是在一个回合里同时改防火墙、证书和密码,然后把功劳算在最后动的那一项上。

分享证据,而不是环境

事件消息比看上去更丰富。它们带着连接名、账户,常常还有网关的内部名称或地址,有时还有证书指纹。把原始件留在该留的地方,另外做一份脱敏副本给任何人;凭记忆重打时间线,恰好会丢掉让它有用的那些细节。

能真正推进的交接需要五个字段:代码、它所属的阶段、客户端与隧道类型、带时区的时间戳,以及网关到底有没有看到请求。其余都是可选的。有了这五项,下一个人不必重做调查就能把凭据之争和路由之争区分开。

在关闭任何东西之前,用同一个配置重放这次尝试,确认代码现在落在哪里。成功就结束;换了一种失败,说明原来那一层修好了,下一层已经在你手里。

相关文章