判断 VPN 是否生效,不能只看客户端是否显示“已连接”。更可靠的方法是同时检查出口 IP、DNS 解析路径以及实际应用的流量去向。连接状态只说明客户端完成了某个网络会话;系统代理、虚拟网卡、分流规则或应用自身设置仍可能让部分请求沿原网络发出。

一次完整检查应当回答几个不同问题:公网访问使用了哪个出口,域名查询交给了哪个解析器,浏览器与命令行是否走相同路径,以及目标应用有没有绕开系统代理。把这些结果放在一起,才能区分“线路没有建立”“仅部分流量被接管”和“线路正常但网站判断异常”。

客户端显示已连接,不等于所有流量都已接管

Shadowsocks、VMess、Trojan、VLESS、Hysteria2 与 TUIC 等协议负责建立传输通道,但客户端还需要决定哪些系统流量进入该通道。常见接管方式包括系统代理、虚拟网卡模式和应用内代理。协议握手成功,只能说明本地客户端与远端节点之间具备通信条件,并不能单独证明每个程序都采用了这条路径。

系统代理通常只影响遵循操作系统代理设置的应用。浏览器大多会读取该设置,但某些命令行工具、游戏、下载程序或自带网络栈的应用可能直接连接。虚拟网卡模式会在更低的网络层接管流量,覆盖范围通常更广,不过仍会受到路由表、排除列表和局域网规则影响。应用内代理则只对配置过的程序生效。

因此,测试时需要避免把“浏览器可以访问”直接等同于“整台设备已经走线路”。反过来,某个应用连接失败,也不一定表示节点失效;它可能没有读取系统代理,或者其使用的协议被当前规则设为直连。

观察结果 可能原因 下一步检查
浏览器出口变化,终端不变 仅启用了系统代理 检查终端代理变量或虚拟网卡模式
出口变化,DNS 仍走本地网络 解析请求未被线路接管 检查客户端 DNS 与加密 DNS 设置
部分网站走线路,部分网站直连 分流规则正在生效 查看域名、IP 与规则集匹配记录
所有测试均无变化 代理未应用或路由未建立 检查系统代理、虚拟网卡和默认路由

先用出口 IP 确认公网流量路径

出口 IP 是目标网站看到的公网来源地址。未连接线路时,它通常对应当前网络的公网出口;连接后,如果测试请求确实经过远端节点,页面或接口显示的地址应随出口位置发生变化。这里只需要比较前后结果,不应仅凭地址所属国家或运营商名称判断质量。

测试前应暂时关闭浏览器缓存影响,并确保检测页面重新发起网络请求。建议在普通窗口与无扩展干扰的窗口中分别确认,因为代理扩展可能覆盖系统设置。若设备同时具备 IPv4 与 IPv6 连接能力,还要分别观察两类地址;只检查其中一种,可能遗漏另一类流量仍沿原网络发送的情况。

命令行可以作为浏览器之外的独立参照。以下命令会请求公开的出口查询接口:

curl https://api.ipify.org

如果浏览器结果已经变化,而命令行仍返回连接前的出口,通常说明当前方案只设置了浏览器或系统代理,而命令行工具没有读取代理配置。在启用虚拟网卡模式后重新执行,可以进一步判断操作系统路由是否已被接管。使用应用内代理时,也可在命令中明确配置代理后再比较。

出口 IP 所属地数据库可能存在更新延迟,不同查询服务给出的城市或网络名称也可能不一致。判断是否生效时,应把重点放在“地址是否改变”以及“不同应用是否一致”,而不是要求所有数据库显示完全相同的位置。

DNS 检查要看解析请求去了哪里

访问域名之前,设备通常需要通过 DNS 查询获得目标地址。如果网页流量进入线路,但 DNS 请求仍直接交给本地网络提供的解析器,便可能形成解析路径与访问路径不一致的情况。行业中常把意外绕过预期线路的解析请求称为 DNS 泄漏。

不过,检测页面显示了本地解析器,并不总能直接证明客户端故障。现代浏览器可能启用加密 DNS,操作系统可能使用缓存,客户端也可能采用远端解析、映射地址或内置 DNS 模块。企业网络、家庭网关和安全软件还可能重写解析路径。因此应结合客户端配置和系统状态一起判断。

在 Windows 上,可以使用以下命令查看域名查询结果:

nslookup example.com
Resolve-DnsName example.com

在 macOS 上,可查看系统维护的解析器配置:

scutil --dns

采用 systemd-resolved 的 Linux 环境可以检查当前接口与解析器状态:

resolvectl status
resolvectl query example.com

这些命令展示的是系统层信息,而浏览器的加密 DNS 可能绕开系统解析器。如果命令行与浏览器检测结果不同,应检查浏览器的安全 DNS 设置。若希望由客户端统一处理解析,应确认客户端的 DNS 模块已启用,并核对分流规则是否把解析服务器本身错误地设为直连。

用分应用测试找出绕过线路的程序

同一台设备上的应用可能采用不同网络栈。浏览器通常遵循系统代理,命令行工具是否遵循则取决于环境变量和自身参数;部分游戏和实时通信程序使用 UDP,并可能忽略只支持 TCP 转发的代理方式。还有一些应用内置代理、加密 DNS或连接复用逻辑,使其行为与系统设置不同。

排查时可以选择浏览器、终端和实际目标应用分别执行联网操作,并观察客户端连接记录。若客户端支持按进程或目标域名显示日志,重点查看请求最终匹配了代理、直连还是拒绝规则。不要只看日志中是否出现域名,还要确认该条记录的出站策略。

如果只有目标应用没有经过线路,应优先查应用代理设置、进程分流与 UDP 接管,而不是频繁更换节点。如果所有应用都没有变化,则应回到系统代理、虚拟网卡权限和路由表检查。分应用测试的价值在于缩小问题范围,避免把规则问题误判为线路问题。

分流规则会让“部分生效”成为正常结果

分流的目标不是让所有请求采用同一出口,而是按照域名、IP、应用或网络类型选择代理与直连。例如,本地服务可以直连,跨境访问请求通过国际线路,局域网地址则保持在本地网络。此时不同网站看到不同出口,可能正是规则设计的结果。

规则匹配通常存在优先顺序。域名规则可能先于 IP 规则生效,最终规则负责处理没有命中的请求。启用订阅规则集后,旧规则、用户自定义规则与客户端默认规则还可能同时存在。排查时应从实际连接记录反查命中项,而不是只凭规则文件中的文字推测。

DNS 策略也会影响分流准确性。若客户端依靠域名判断路径,但应用先把域名解析成 IP 并直接发起连接,客户端可能只能看到地址,无法按原域名规则处理。虚拟网卡模式中的 DNS 劫持或映射机制可以改善可见性,但配置不一致时也可能导致解析成功、连接失败。

判断结论:出口不一致并非必然故障。先查看对应请求命中了哪条规则;只有实际结果偏离预期策略时,才需要调整分流配置。

不同平台的检查重点

Windows

Windows 上应同时检查系统代理、虚拟网卡状态和 DNS 接口优先级。部分桌面程序不会读取系统代理,因此浏览器正常而其他程序直连并不少见。切换接管模式后,可重新打开目标程序,避免已有连接继续复用旧路径。

macOS 与 iOS

macOS 客户端可能使用系统代理,也可能创建网络扩展。两种方式的覆盖范围不同。iOS 上的客户端通常通过系统提供的 VPN 网络扩展接管流量,但应用自身的加密 DNS、局域网访问策略和按需连接仍会影响检测结果。切换配置后,应让检测页面重新建立连接。

Android

Android 客户端一般通过系统 VPN 接口处理流量,并可能提供分应用代理或绕过列表。若只有特定应用出口不变,应先查看该应用是否被排除。系统中的私人 DNS 也可能独立于客户端 DNS 策略,需要结合客户端文档决定保留还是交由线路处理。

Linux

Linux 环境的差异主要来自桌面代理、环境变量、路由表与 DNS 管理组件。图形界面设置不一定影响终端进程,终端中的代理变量也不一定影响系统服务。排查时应分别检查当前 shell、服务进程和虚拟网卡路由,不要假设它们共享同一配置。

界面已连接但检测失败的排查顺序

遇到连接状态正常、出口却没有变化时,按网络层次逐步检查通常比反复重装客户端更有效。先确认请求有没有进入客户端,再确认客户端把它送往哪个出站,最后检查远端线路与解析结果。

若连接记录中完全看不到测试请求,问题通常发生在应用到客户端之间,应检查代理设置、虚拟网卡权限或应用排除列表。若记录显示直连,则重点检查分流规则。若记录显示代理,但出口仍未变化,应确认检测页面没有使用缓存,并检查客户端实际选择的远端节点与出站链路。

IEPL 专线、中转线路与直连线路描述的是不同传输路径。直连由设备直接连接远端节点;中转会先连接入口,再由中转网络送往出口;IEPL 专线通常用于入口与出口之间的专线传输。无论采用哪种线路,网站最终观察到的都应是配置对应的出口,而不是入口节点。出口检查可以验证最终来源地址,却不能仅凭检测页面判断整段传输路径。

怎样得出可信的最终结论

可靠结论来自多项结果相互印证:浏览器与命令行出口符合预期,DNS 查询遵循设定策略,目标应用的连接记录显示正确出站,分流场景下的直连与代理结果也与规则一致。如果只有某个检测网站报告异常,应更换观察方式,并考虑数据库位置、缓存和浏览器网络功能造成的差异。

测试完成后,可以恢复日常使用所需的加密 DNS、分流规则和应用排除设置。检查过程不要求所有流量长期采用同一出口,而是要确认每类流量都按配置执行。客户端显示连接成功只是起点;出口 IP、DNS 路径和分应用记录共同构成更完整的验证链路。

简要判断:出口地址按预期变化、DNS 没有绕过既定策略、目标应用命中正确出站时,可以认为当前连接配置已经生效。