Windows 报告隧道已连接,而内网页面却仍然超时,配置文件还来自一位早已离职的同事。这一状态背后是两个彼此独立的问题:文件与客户端不匹配,以及对隧道覆盖范围的错误预期。分清这两件事只需几条命令,还能省下一次重装。重启对任何一个都没有用。

内置客户端只导入自己的类型

Windows 自带一个 VPN 客户端,它只认识特定的连接类型,无论文件叫什么名字,都不会导入 OpenVPN 文件或 WireGuard 配置。这类文件需要各自的软件,必须从厂商经过验证的下载页面安装。网络菜单里出现一个熟悉的条目,并不能证明服务器支持它;把配置文件改成熟悉的扩展名,仍然是错误的文件。连接类型必须与运维方交付的一致,而不是与菜单碰巧提供的选项一致。

对于原生连接,请通过网络设置添加,并完全按收到的值填写。基于证书的 IKEv2 与用户名加密码的入口是两种不同的配置,即使它们在同一个标题下面。如果受管设备已经提供了连接,就用它,不要在它旁边再建一个。

登录步骤不能互换

一个连接可能要求用户名和密码、客户端证书、交互式提示,或按顺序要求其中的几项。私钥口令只用于解锁密钥,不是服务密码,即使两者都输入在同一个对话框里。证书警告关乎身份或信任,不关乎账户名有没有拼对。判断这三者中哪一个失败,才能决定下一步。

先读拒绝原因,而不是反复重试。认证失败与信任失败在状态窗口里看起来相似,底层却毫无共同点:前者需要凭据,后者需要客户端认可的证书链。

不要把凭据和证书材料留在截图里。一张设置页面的照片可能同时暴露服务器地址和已保存的用户名,而技术支持帖成为公开文件的频率比人们想象的高。发布前先打码,而不是等别人引用之后再处理。

在 PowerShell 中,Get-VpnConnection 会列出 Windows 认为已经配置的内容,包括设置窗口不显示的那些条目。在 cmd 提示符下,rasdial 按连接名称拨号,ipconfig /all 显示适配器实际获得的地址。两个 shell 不共用同一个解析器,所以每行命令要粘贴到对应的窗口里。

Get-VpnConnection
Get-VpnConnection -Name "Office" | Format-List Name,ServerAddress,AuthenticationMethod
rasdial "Office"
ipconfig /all

决定权在路由表,不在适配器图标

企业隧道可能只路由办公网段,把普通浏览留在本地连接上,而全局隧道配置正好相反。在判断哪种行为有错之前,先打开真实资源。图标只报告适配器状态,答案在路由表里。这两者的分歧比状态窗口愿意承认的更常见。

更精确的条目可以把某个子网送进隧道,而默认路由仍留在外面,拆分隧道本来就该是这个样子。缺少条目是另一种常见结果,从浏览器看上去和隧道断开一模一样。把你访问不到的前缀与路由表对照,而不是与图标对照。这就是图标和路由表会互相矛盾、却各自都在说真话的原因。

不要因为路由表里有不认识的适配器就删除路由。虚拟机、筛选器驱动或第二个客户端都可能各加一条,删掉它会弄坏原本正常的东西。

route print -4
nslookup intranet.corp.internal

私有名称需要组织自己的解析器

私有名称需要组织自己的解析器,而自带安全 DNS 的浏览器可能完全绕过系统设置。于是会出现令人困惑的情况:命令行查询能返回地址,同一个名字在浏览器里却仍然打不开。

改动之前,先确认当前 DNS 配置是哪个适配器提供的。私有名称要保留组织的解析器,不要用公共解析服务替换它。换成公共解析器通常能修好一个公网域名,却会弄坏所有内部域名,这比最初的问题更糟。如果连接显示成功却什么都不通,先排查转发和 DNS,再考虑重置网络栈。

Get-DnsClientServerAddress -AddressFamily IPv4
Resolve-DnsName intranet.corp.internal

Microsoft 关于 Windows VPN 连接类型与插件 的文档,是判断哪个客户端处理哪种类型的依据,而菜单里的任何标签都不会告诉你这件事。每次改动后重新连接,并测试真实应用,而不是状态图标。把能用的配置保存在找得到的地方,并记下让它工作的解析器和路由,因为下一台机器两样都需要。

相关文章