卸载 VPN 客户端本应让机器恢复到安装前的样子,有时却会得到一个什么都解析不了、浏览器还想要代理的机器。残留来自一份很短的归属清单:路由、Winsock 提供程序、代理设置、DNS 和筛选器驱动。修复策略有两种,区别主要在于它们会毁掉什么。

两种代价截然不同的修复

ApproachWhat it fixesWhat it costs
Full network resetAlmost everything, eventuallyWi-Fi passwords, firewall rules, evidence
Inventory, then narrow resetsThe piece that actually brokeTime, and one command per layer

大范围重置没有错,只是代价高。它还会删掉本可说明哪一层失败的证据,于是下一台出现同样症状的机器又要从零开始。先盘点只需四条命令,其中三条只读。

按时钟选,而不是按偏好选。对于十分钟内必须恢复工作的机器,彻底重置可能是正确决定,事后留下的记录是唯一保住知识的东西。对于症状反复出现的机群,盘点才是更便宜的路径,因为它给出原因,而不是一次已经结束的故障。

动手之前先读四样东西

ipconfig /all
route print -4
netsh winsock show catalog
netsh winhttp show proxy

每份输出对应一种不同的故障。默认路由指向已不存在的适配器,可以解释本地网络正常却没有外网。适配器的 DNS 服务器曾属于隧道,可以解释地址能通而名称失败。客户端安装的 Winsock 提供程序,可以解释每次改动路由都依然存在的浏览器故障。代理条目则可以解释浏览器哪里都到不了、而 curl 却能到达。

单独检查浏览器自己的代理。它位于“Internet 选项”对话框的“连接”和“局域网设置”下,与命令报告的 WinHTTP 代理是两回事。修好一个并不修好另一个,一台机器可以同时带着两者。去找一个解析不到任何地方的代理地址,因为被删掉的客户端留下的正是这种形状。

爬梯子,而不是跳

ipconfig /release
ipconfig /renew
ipconfig /flushdns
route -f
netsh int ip reset reset.log
netsh winsock reset catalog

route -f 在不碰适配器的情况下清空路由表,这是移除隧道遗留默认路由最便宜的办法。netsh int ip reset 重写 TCP/IP 堆栈的设置,并期待一次重启。netsh winsock reset 还原筛选器驱动改动过的目录,正是这一步修好只在浏览器里出现的故障。先执行一条,测试,再执行下一条;爬过的梯子才是事后讲得清楚的梯子。

netsh advfirewall reset 不属于这架梯子。它会删掉有人特意制定的规则,而恢复这些规则是另一个项目。设置应用里的网络重置会删除并重装每一块适配器,还会清掉保存的 Wi-Fi 密码,所以它应该排在那些窄步骤之后,而不是之前。

归属是另一个产品的残留

把应用拖进废纸篓并不会卸载它。一台继续使用已不再显示的 VPN 的 Mac,仍有厂商的辅助程序在运行;活动监视器的网络标签页按流量认出了它,厂商的卸载流程移除了守护进程及其启动项。到 /Library/LaunchDaemons 和 /Library/LaunchAgents 里检查程序已不存在的条目。

安全软件是这种模式出现的另一个地方。杀毒工具会安装自己的筛选器驱动,而留下的那一个可能以任何 VPN 设置都解释不了的方式弄坏 VPN 适配器。厂商的移除工具正是为这种情况准备的,通用卸载通常够不到它。

安装程序也可能因为前一个实例还活着而拒绝启动。OpenVPN 安装程序会检查正在运行的 openvpn.exe,包括你自己的脚本几小时前启动的那个。

env_block 失败是另一种残留。PATH 丢掉了 C:\Windows\System32 及其相邻目录,于是客户端无法启动构建适配器的工具。要修 PATH,而不是重装,因为新副本会撞上同样的缺失命令。

Linux 接口与路由器测试

tun 接口可能活得比创建它的配置更久。一份下载缓慢的报告,最后查到一个残留设备仍占着旧地址池的网关地址,把流量拉向没人想要的隧道。ip -brief link 会列出实际存在的东西;把它和当前服务声称的内容对比,然后删掉这个孤儿。

VPN 实验之后不再到达的租约,并不一定是协议栈问题。在跑更多重置之前,先用一台从未装过该客户端的笔记本和另一台路由器测试。如果路由器不再回应,任何 Windows 命令都改变不了,而临时静态地址、网关和解析器会告诉你哪一侧坏了。

记录你重置了什么、按什么顺序。下一个人需要知道重建的是 Winsock 目录还是防火墙,而这份记录正是卸载带不走的东西。

相关文章