在凭据被送出之前就卡死,拒绝删除配置文件,显示一个谁都不认识名字的适配器:这些是同一个故障的三张面孔。VPN 绑定的软件接口已经损坏,而账户和网关毫发无损。三种修复都站得住脚,至于哪一种适用,取决于一次只读检查。检查之后的一切都是算术;检查之前的一切都是猜测。

配置文件实际绑定的是什么

每一种 Windows 原生隧道类型都由各自专属的虚拟适配器承载,这些适配器是小端口驱动,而不是物理网卡。 配置文件选择隧道类型,类型选择适配器,因此一个不健康的驱动会弄坏所有共用它的配置文件,而文件共享和上网却照常进行。这种依赖关系在配置文件属性里看不到。

这些接口默认保持隐藏,设备管理器和适配器列表都是如此。于是一个坏掉的接口始终不可见,而机器主人坚持说什么都没变过。

警告标记是有用的证据,干净的图标则不是。适配器可以自报健康,却仍然带着断裂的绑定,所以有用的问题是接口接到了什么上,而不是图标长什么样。先读状态,再读绑定,因为图标回答的是最不有趣的问题。正是跳过这个顺序,把十分钟的检查变成一下午的驱动苦工。

依据适配器状态判断,而不是错误代码

错误编号只说明哪个阶段失败了,对哪个组件该负责则只字不提。地址分配、证书选择和隧道协议各有自己的编号,通常为 720、789 和 806,而这三个都不是关于小端口的证据。用编号来挑选下一项检查,而不是用来挑选修复方案。

能起区分作用的观察并不多。下表把每一条对应到一个只读的下一步:

What you observeWhat it impliesRead-only step
Every profile on one protocol failsThat protocol's miniport is unusableRead the hidden adapter status
Adapter reports healthy, tunnel never startsA binding is missing or disabledList every binding on the adapter
Only the vendor client failsThe vendor adapter or its registered nameRead the vendor service key
The profile will not deleteThe interface underneath is stuckConfirm the adapter before removing the profile

顺序很重要,因为重装驱动既慢又具破坏性。为了修分配问题去做这件事要花一小时,还教不会下一个人任何东西。这张表也确定了影响范围:所有配置文件里同一种协议都坏,说明问题在驱动;正常工作着的原生配置文件旁边只有一个厂商客户端坏,说明问题在厂商的软件栈。

两次读取解决大部分工单

两次读取都是只读的,也都不碰驱动。第一次列出隐藏的小端口接口及其状态,第二次列出某个具名适配器绑定了什么:

Get-NetAdapter -IncludeHidden | Where-Object InterfaceDescription -like 'WAN Miniport*' | Select-Object Name, InterfaceDescription, Status
Get-NetAdapterBinding -Name 'WAN Miniport (IKEv2)' -IncludeHidden -AllBindings

换成本配置文件实际使用的协议,因为 IKEv2 的绑定列表对 SSTP 配置文件毫无说明。被禁用的 ARP 或 IPv4 绑定,或者挂在适配器上的第三方筛选驱动,都可能让隧道还没开始就被拦住。列表里出现安全软件并不证明它就是原因,所以在禁用任何东西之前先确认影响。

健康的适配器会显示你预期的绑定,而且没有你解释不清的筛选器。当列表干净时,证据已经转移到驱动本身,下一节才是适用的那一节。

在移除适配器之前,记下它的名称和驱动版本

当适配器确实无法使用时,标准修复是让它变得可移除,卸载它,并让 Windows 在下次有配置文件使用该协议时重建一个新实例。在设备管理器中更新驱动、从列表中选择、清除兼容硬件筛选,然后挑选一个提供卸载选项的通用 Microsoft 适配器。

在此之前,先记下你删掉的是什么:适配器名称、驱动版本、提供商和日期。事后描述不出来的修复无法重复,而未记录修复的常见代价就是同一台机器被修了三次。厂商工具做同样的事但覆盖面更广,在托管机群里只要来自厂商而不是镜像站就算合理。会替换驱动二进制文件的工具,改动的不止是重装一个适配器,所以也把它的版本记进工单。

有一种厂商情形,同样的症状需要不同的修复。某个客户端把自己的适配器注册在一个带安装程序引用的显示名称下,升级之后可能无法启用,而修复办法是在厂商拥有的服务键里改掉那个名称。该值接受一个普通的适配器名称,然后重启客户端:

HKLM\SYSTEM\CurrentControlSet\Services\CVirtA
DisplayName = Cisco Systems VPN Adapter for 64-bit Windows

那个键只属于一个客户端。它不是通用的 Windows 修复,也绝不该用在没运行该客户端的机器上。

关闭工单之前,用第二种协议确认

一次成功的重连只检验了一个协议经由一个适配器,所以它的证明力不如看上去那么强。先重试原来的配置文件,再试一个建立在另一种隧道类型上的配置文件,并要求两者都能连上。如果只有第一个能用,剩下的失败就是关于驱动或策略的证据,而不是关于你刚刚重建的接口。

如果最初的抱怨是配置文件删不掉,那也要重新测试,因为适配器健康之后配置文件仍然拒绝删除,是另一种故障,继续折腾适配器只是白费。除非有东西指向账户和网关,否则把它们排除在记录之外。在认证之前就死掉的隧道,通常描述的是机器本身;诚实的记录会写明适配器、协议,以及确认这一点的检查。

相关文章