这个对话框在你点击“连接”的瞬间就弹出来,早于任何凭据输入,并提示 VPN 服务不可用。此时还没有任何数据离开这台机器。AnyConnect 的窗口只是在和本地的一个 Windows 服务对话,一旦这段对话失败,客户端就在还没提到任何网关之前放弃了。这个先后顺序正是整条提示里最有用的线索:你排查的是服务和驱动程序,而不是对端的证书或防火墙规则。以下是我处理问题的顺序,先做代价最小的检查。

对话框出现在联系网关之前

这个窗口只是一个很薄的前端。它请求代理服务去建立隧道,而该服务掌握适配器、路由改动和配置文件存储。如果服务缺失、被停止或被阻断,前端就没有对象可对话,于是报出正是这条提示。

实际后果很简单:没有服务器名,没有凭据输入框,也没有证书错误。只要看到其中任何一项,就请停止阅读本文,转而去看隧道本身。

第一件事:检查代理服务

打开 services.msc,找到 Cisco AnyConnect Secure Mobility Agent。如果启动类型是“已禁用”,改成“自动”并启动它。被升级过程关闭、或被崩溃遗留下来的服务,常常能干净地启动一次并一直保持运行。如果它几秒内再次退出,记下错误代码,然后继续往下读。

在特别顽固的机器上,还有两个支撑服务值得一看。当筛选器驱动卡住时,重启 Base Filtering Engine 可以消除这条提示。在启用了 Internet Connection Sharing 的环境里,关闭 ICS 也能达到同样效果,因为两者争用同一套网络底层。

在公司托管的笔记本上,该服务可能被策略故意禁用,因此在重新启用之前,先和设备的负责人确认。

接着检查虚拟适配器

AnyConnect 需要自己的虚拟适配器,在某些版本里,被禁用的适配器会引发同一个对话框。打开“网络连接”,找到 Cisco AnyConnect Secure Mobility Client 这一项,如果它是灰的,就把它启用。同一个面板也能处理卡死的情况:处于“正在连接”状态的接口通常无法从“设置”里移除,但可以在这里禁用并删除。

如果适配器完全不存在,说明驱动没装上。这指向下一节,而不是你能随手切换的开关。

重启不起作用的时候

残留的安装目录可以在每次启动时把损坏状态恢复回来。卸载客户端,删除 ProgramData 下的 Cisco AnyConnect 文件夹,重启,然后重新安装同一个版本。清除那个文件夹,正是清理卸载程序留下的配置文件和机器策略碎片的关键。更新的主版本号也能消除这条提示,但前提是你的网关接受那个客户端版本。

macOS 用户在另一个组件上会遇到同样的措辞。代理是一个 launchd 任务,所以要加载它,并确认应用被允许在后台运行。在当前版本里,那个开关位于“登录项”和“扩展”之下,在那里被关闭的应用会启动,然后以完全相同的这条提示失败。

第二个 VPN 客户端造成冲突时

两个客户端可能争抢筛选器驱动和适配器优先级。在旧版 Cisco 客户端旁边装了 Forti 客户端,会让人保持连接却什么也访问不到,而移除那个不再使用的客户端就恢复了服务。可行的替代方案是为每个 VPN 子网写明静态路由,让各客户端的地落到正确的适配器上,而不是依赖度量值顺序。

如果两个客户端都必须保留,那就刻意决定路由并记录下来。靠猜度量值,下一次更新就会失效。

一个不需要装两次的修复顺序

在重装之前,先保存代理日志。这条提示覆盖了好几种不同的故障,而事后能把它们区分开的只有日志。然后按这个顺序操作,并在第一个改变行为的步骤上停下:

  • 代理服务存在,启动类型为“自动”,且在图形界面启动前就已运行。
  • 虚拟适配器在“网络连接”中已启用,没有接口卡在“正在连接”状态。
  • Internet Connection Sharing 已关闭,Base Filtering Engine 正常。
  • 重装前清掉 ProgramData 文件夹,并重新安装同一版本。
  • 没有第二个 VPN 客户端占用同一批筛选器驱动。

如果客户端在显示服务器名或凭据输入框之前就退出,说明它根本没有接触到网络上的任何东西。第四次重装找不到的原因,其实两分钟的服务状态检查早就告诉你了。

相关文章