为什么断开连接后 Windows 的 VPN 适配器仍然存在
残留的适配器并不能证明隧道卡死。在删除别人还在用的驱动之前,先把已保存的配置文件、服务和接口分开看。
状态显示已断开,应用也已关闭,可列表里仍然有一个以客户端命名的网络适配器。对大多数 Windows VPN 客户端来说,这属于正常现象,因为接口是一个有自己生命周期的软件组件,而不是插在插座上的线缆。只有当接口存在而会话不存在、并且检查顺序搞反时,它才成为真正的问题。按正确顺序排查只需四条命令,还能避免一次不必要的重装。
一个窗口里的三种生命周期
已保存的配置文件是一个配置对象。它可以存在多年,随部署包一起分发,并且在有人连接之前不产生任何东西。删除它等于拿走当时没人使用的一项能力,有时还会抹掉某个站点当初怎么连上的唯一记录。
客户端服务或辅助程序是一个进程。它随系统启动或按需启动,执行需要特权的操作,也可能在完全没有连接的情况下继续运行。
网络接口是呈现给网络栈的一个设备。它可以在客户端启动时出现,可以在断开后继续保留,也可能只在建立隧道时才被创建。有些客户端按配置文件显示一个适配器,另一些则共用一个。具体是哪种取决于产品,而不是协议。
看到三者之一,并不能对另外两个作出可靠判断,这正是这个领域大多数混乱的来源。
适配器列表实际显示的是什么
适配器清单会包含隐藏项,而 VPN 软件出于正当理由经常会留下隐藏接口。把它们过滤掉,会让正常工作的安装显得比实际更干净;把它们显示出来,又会让干净的机器显得杂乱。
下面这些命令会列出包括隐藏项在内的全部适配器,然后单独列出系统原生 VPN 配置文件:
Get-NetAdapter -IncludeHidden | Select-Object Name,InterfaceDescription,Status
Get-VpnConnection
Get-Service | Where-Object DisplayName -match VPN第二条命令只覆盖由操作系统自身管理的配置文件。使用自有配置格式的第三方客户端不会出现在那里,所以结果为空并不表示什么都没装。
读会话,不要读接口
值得回答的问题是是否存在已通过认证的会话,而不是某个适配器是否在列表里。这是两件不同的事实,只有一件会影响你的流量。
去问拥有这条连接的客户端,查看它自己的状态输出或托盘菜单。然后再问操作系统,这个接口上有哪些地址和路由。没有地址的接口,或者有地址却没有路由的接口,描述的就是一条什么也没承载的隧道。
还要问第三个问题:客户端现在用的就是这个接口吗?机器上会堆积来自被卸载、改名或替换过的客户端的适配器,而过时的那一个往往正是描述吓人的那一个。
三个答案一致时,才是真正的故障。适配器在而会话健康时,那只是一条表面记录,也是不去动它的理由。
当接口创建失败时
相反的症状更严重:客户端报告驱动或适配器错误,同时没有任何接口出现。这说明问题在内核组件,而不在配置。
在决定怎么修之前,必须先确认所属客户端、它的服务以及已安装的驱动版本。移除另一个产品也在用的网络驱动,或者为了安装成功而关掉某项安全控制,改动的都是你本不打算碰的组件。
重启是合理的第一步,因为它会清掉卡住的设备状态。重启不是诊断,所以在它抹掉之前先记下报错说了什么。也要记下驱动版本,因为重装可能换成同一个版本,让故障原样保留。
动手删除之前先记录归属
如果适配器确实属于已经不存在的产品,删除它属于清理。先通过把接口描述与客户端及其驱动包对应起来确认归属,并检查没有任何已保存的配置文件还在依赖它。
然后在支持记录里写下三件事:产品、接口标识和驱动版本。这三项让临时接口能与安装残留区分开,也让下一个人不必从头再做一次清点。
不该发生的是因为看起来乱就删掉一个不认识的适配器。留下它的代价是列表里多一行;删错的代价是客户端再也连不上,而且没有任何记录说明改过什么。