直接答案
VPN连接成功不等于所有流量都受到保护。应先明确全隧道、分流与系统例外,再分别检查IPv4/IPv6出口、DNS路径、WebRTC地址暴露及断线窗口。私网地址、mDNS候选或不同DNS服务商不能单独证明公网泄漏;检测通过也不等于绝对匿名。
资料核对:2026年11月1日。 本文依据标准与平台官方文档整理检查方法;不是对某款VPN的安全认证,也不是已完成的多平台泄漏实测报告。
VPN显示已连接,为什么仍然需要检查泄漏?
“已连接”通常说明客户端建立了某种连接状态,不能单独证明每个应用、每种地址族、每次网络切换都受到相同保护。验收至少要回答四个问题:目标网站看到哪个出口,域名由谁解析,实时通信走哪条路径,隧道不可用时受保护流量如何处理。
本文把泄漏限定为:原本应按已声明策略进入VPN或被阻止的流量、地址信息,实际从非预期路径发送或暴露。企业VPN可能明确允许普通互联网直连;允许局域网打印也可能是产品功能。判断之前必须先写清保护范围,而不是看见一个不同IP就直接判失败。
RFC 7359及其IESG说明提醒,问题并不只属于IPv6:任何未被正确约束的接口或分流策略都可能造成路径偏离。因此,关闭IPv6可以是特定产品的临时策略,却不能替代完整的路由、DNS和故障保护设计。
先区分四种结果,避免把检测页面当安全认证
| 检查对象 | 它能帮助回答什么 | 不能据此推出什么 |
|---|---|---|
| HTTP公网IP | 此次网页请求使用的出口 | 所有应用和UDP都使用该出口 |
| DNS检测 | 测试域名最终经过哪些递归解析服务 | 完整终端DNS路径或全部历史查询 |
| WebRTC候选与连接 | 浏览器实时通信可发现的地址及实际选用路径 | 其他软件、其他浏览器的行为 |
| 断线保护测试 | 指定故障窗口内受保护请求是否直连 | 任意系统版本、任意故障都绝不泄漏 |
浏览器测试只覆盖浏览器能够触发并观察到的行为。应用内DNS、系统服务、游戏UDP和后台同步应单独检查。检测页显示“安全”最多代表本次样本未发现相应异常,不能替代软件供应链、账号安全、服务器权限与日志策略审查。
对于开发团队,建议把交付拆为“可连接”和“符合流量策略”两组测试。前者解决可用性,后者处理出口、分流、失败默认行为与隐私边界。客户端的整体实现可以配合如何开发一款VPN App?阅读。
测试前应该记录哪些基线?
使用自己有权限的测试设备、网络和服务端。先暂停真实账号同步、下载任务与敏感业务,避免断开VPN时意外暴露个人活动。不要通过远程办公连接直接修改防火墙或断网,以免失去管理入口。
测试基线至少包含操作系统与浏览器版本、VPN客户端与内核版本、协议、节点地区、全隧道或分流模式、DNS设置、IPv6可用性、断线保护开关及明确例外。设备型号和网络类型可以记录,真实账号、订阅链接、密钥及完整个人IP不要放进公开报告。
| 阶段 | 建议记录 | 用途 |
|---|---|---|
| 未连接VPN | 测试网络的IPv4/IPv6出口、解析器、浏览器DNS模式 | 建立对照,不代表该地址永久不变 |
| VPN稳定连接 | 相同项目及目标应用的实际出口 | 判断策略是否生效 |
| 故障发生中 | 故障时间、请求序号、成功/失败及出口 | 查找短暂直连窗口 |
| 恢复连接后 | 新出口、DNS与应用恢复状态 | 检查是否残留旧路由或错误缓存 |
一次页面刷新很容易漏掉亚秒级窗口。工程验收应使用带时间戳和唯一请求标识的持续探针,客户端与自有服务端共同记录;探针间隔、持续时间和样本数写入报告。没有实际运行这些探针时,应写“未测试”,而不是自动填写通过。
DNS泄漏怎么检查,为什么解析器不同不一定有问题?
DNS检查应区分三个角色:应用请求的解析服务、系统配置的解析器、最终向权威DNS发起查询的递归服务器。它们可能不是同一个地址。运营商转发、公共解析服务和VPN自有解析集群都会让简单的“IP是否相同”判断失真。
建议先按默认DNS设置测试,再单独测试浏览器安全DNS、系统加密DNS以及产品允许的自定义解析器。每轮使用不同的自有测试子域名,减少缓存造成的误判。权威DNS日志只能证明最终查询来源;若要确认客户端是否绕过隧道,还应结合受控设备上的接口观测和解析器连接记录。
DNS解析器与VPN出口属于不同公司,不足以直接判定泄漏;本应经隧道的DNS请求却从本地网络直接发出,才是需要复查的路径证据。 地理位置数据库也只能辅助识别,不能代替实际路由证明。
RFC 8484定义DoH通过HTTPS传送DNS查询。它保护的是到解析服务之间的传输,不自动决定该HTTPS连接是否进入VPN。DoH可以经VPN,也可以被分流直连;解析服务仍处于相应信任边界内。
Firefox官方保护级别说明显示,不同模式的回退与VPN检测行为不同。不要把“开启安全DNS”或某次界面状态当成跨浏览器结论。复测时记录实际模式、策略与版本,尽量一次只改变一个变量。
IPv6泄漏怎么测,是否必须关闭IPv6?
先确认测试网络本来具备IPv6。如果未连接VPN时IPv6就不可用,那么“VPN开启后没有IPv6地址”只能说明该环境无法验证,不能证明客户端已实现IPv6保护。
全隧道产品通常需要明确采用“IPv4和IPv6均进入隧道”,或“支持IPv4并阻止保护范围内的IPv6”策略。两者验收方式不同:前者应检查预期IPv6出口;后者应检查IPv6业务确实被阻止且不会通过其他接口回退直连。是否允许系统例外必须另外声明。
分别用仅IPv4、仅IPv6和双栈测试端点请求,而不是只访问同一个自动选择地址的网站。更换Wi-Fi、接入移动网络或增加第二张网卡后再测一次,检查新接口与路由优先级变化。关闭IPv6之后还要确认功能影响与恢复方法,不应把永久禁用所有设备IPv6写成通用建议。
Windows的VPN路由官方说明区分强制隧道与拆分隧道。开发者应检查产品实际安装的路由、排除规则和适用范围,而不是仅依赖界面里的“全局”名称。
WebRTC泄漏怎么判断?先看候选类型,再看实际路径
WebRTC用于浏览器实时音视频与数据传输。ICE会收集候选路径;RFC 8828指出,分流、多接口或允许直连的应用代理环境可能暴露HTTP请求之外的地址。浏览器代理扩展不等于系统全隧道VPN,HTTP代理正常也不能自动证明STUN与媒体流走相同路径。
| 看到的结果 | 更准确的含义 | 下一步 |
|---|---|---|
| 私网或链路本地地址 | 暴露局部网络信息,不能直接当成公网出口 | 对照地址类别、权限和隐私需求 |
随机.local名称 |
可能是用于隐藏本地地址的mDNS候选表示 | 不把名称当成真实公网IP |
srflx候选 |
经STUN等机制发现的映射地址 | 与预期出口及本地网络基线比较 |
relay候选 |
TURN中继提供的地址 | 不因不同于VPN出口就判泄漏 |
| 实际选中的候选对 | 本次实时连接所使用的路径 | 结合受控远端观察验证出口 |
候选类型定义见MDN RTCIceCandidate.type。候选被发现与候选最终被选中是不同事件;即使没有选中,一个不应向网页暴露的公网地址已经交给页面,也可能构成信息暴露,因此报告应分别记录“地址暴露”和“媒体流绕行”。
mDNS用于ICE候选的设计可参考IETF工作草案记录。该文档目前为过期草案,不能称为已发布RFC,也不能据此宣称所有浏览器均采用同一实现。mDNS隐藏本地地址字符串并不自动保护所有公网路径。
WebRTC应用开发者可以研究W3C的ICE传输策略,在适用场景使用中继候选。但应用配置不是用户对任意第三方网站的全局控制开关,中继也会带来服务可用性与成本取舍。不要为了让检测页面变绿,直接禁用整个实时通信功能而不说明视频会议等影响。
断线保护和自动重连有什么区别?
自动重连处理“如何恢复隧道”,断线保护处理“恢复之前允许什么流量”。隧道重连得很快,仍可能存在直连窗口;严格阻断没有泄漏,也可能导致长时间无法联网。应同时衡量保护结果与恢复能力。
Android官方VPN文档区分always-on服务生命周期与阻止非VPN连接选项;启用应用白名单或排除列表还会影响哪些应用可联网。具体设备是否提供选项、客户端是否支持及系统实际行为都应按版本验收,不能只看到钥匙图标就视为覆盖全部请求。
Apple官方路由说明列出了includeAllNetworks及系统例外,包括维持网络连接的控制流量、热点认证和部分系统服务。报告应区分平台明确例外与普通业务绕行,不应承诺物理网卡上绝无任何非隧道包。VPN连接服务器本身的外层通信也不能被误判为泄漏。
产品至少需要区分用户主动断开、网络短暂中断、隧道进程崩溃及设备重启。某些产品只在意外断线时阻断,另一些在用户主动断开后仍阻断;这属于需要清楚展示的策略差异,不应让用户靠猜测判断。
VPNDevelop泄漏与恢复测试矩阵v1.0
下表是建议测试矩阵,不是本站实测结果。由团队根据实际保护承诺填写通过条件;每项同时检查IPv4、IPv6、DNS、WebRTC和选定原生应用,并记录不适用原因。
| 场景 | 安全的触发方式 | 应观察的关键点 |
|---|---|---|
| 正常连接 | 在测试设备建立隧道 | 受保护流量出口符合策略,DNS路径有依据 |
| 节点不可达 | 在自有测试环境暂停测试节点或阻断其测试入口 | 请求失败或被阻止,不自动改为未授权直连 |
| Wi-Fi切换移动网络 | 使用测试账号在两种网络间切换 | 新接口出现时策略持续生效 |
| 睡眠与唤醒 | 设备休眠后恢复 | 应用先发包与隧道重建之间的窗口 |
| 客户端或隧道异常退出 | 使用测试构建的故障注入机制 | UI退出与后台隧道退出是否不同 |
| 系统重启与应用更新 | 在可恢复测试设备执行 | 登录前后、服务恢复与旧规则清理 |
| 主动断开或更换节点 | 按产品正常操作执行 | 是否符合已公布的主动断开策略 |
| DNS服务异常 | 在测试网络模拟指定解析器不可达 | 是否按约定失败、切备用或绕行 |
不要在生产节点上进行会影响用户的故障注入。无法隔离的测试项应先建立预发布环境。多节点恢复设计可进一步参考VPN节点系统完整架构。
怎样形成能复查的测试报告?
每个用例使用独立编号,记录前置条件、操作、预计结果、实际结果、证据与复测版本。结论建议使用“通过、失败、未测试、不适用、证据不足”,避免所有空白项默认通过。一次失败修复后,除复测原场景,还应回归相邻路径,例如修改IPv6路由后重新测试DNS与网络切换。
短暂泄漏窗口可以记录为“首次非预期请求时间至策略恢复时间”,但探针只能给出采样条件下的观察。没有捕获到绕行请求不能证明窗口精确为零;报告必须保留采样频率、时钟误差及服务端日志覆盖范围。不要将自动重连耗时混写成泄漏持续时间。
证据优先使用自有测试域名、随机请求标识、脱敏出口类别和有限的接口计数。确需抓包时限定测试设备、时间段与目的地址,保护原始文件访问权限并设置删除期限。不要求客户提交完整浏览历史、账号密码、私钥或订阅链接;公开报告只放脱敏摘要。
开发与白标采购应该怎样写验收要求?
| 交付项目 | 可验证要求 | 不应接受的模糊描述 |
|---|---|---|
| 全隧道与分流 | 列明应用、地址族、系统例外和可配置范围 | “全部流量绝对安全” |
| DNS策略 | 解析器、加密方式、路由与失败回退有文档 | “自动防DNS泄漏”但无法说明路径 |
| 断线保护 | 明确平台版本、触发场景、主动断开行为 | “有Kill Switch按钮就算完成” |
| 更新维护 | 系统或内核升级后重新执行回归矩阵 | 一次截图永久代表所有版本 |
采购VPN白标贴牌方案时,客户端平台数量不等于安全能力完全一致。请把上述范围写入交付清单,并约定发现缺陷后的修复、复测和版本记录。测试矩阵用于界定工程责任,不是安全认证标志。
VPN泄漏检测常见问题
公网IP变了,就代表VPN没有泄漏吗?
不能。它只证明相应请求的出口变化。DNS、IPv6、实时通信和其他应用需要按保护范围另测,尤其要覆盖断线与切网状态。
DNS检测显示公共解析器,需要立即更换VPN吗?
不一定。先确认产品是否本来使用该服务,再检查查询是否按预期进入隧道。解析器归属或显示地区不同,不足以单独证明泄漏。
WebRTC出现192.168地址,就是暴露真实公网IP吗?
不是。私网地址暴露与公网出口暴露属于不同问题。它可能透露局部网络信息,但不能把私网地址直接当成运营商公网地址。
WebRTC没有任何候选,就证明安全了吗?
不能。可能是功能被禁用、权限或策略限制、STUN不可达,也可能是测试未执行完成。应报告“未获得有效样本”,并核查检测前提。
开启DoH之后还需要VPN的DNS保护吗?
仍需确认路由与信任边界。DoH加密查询到解析服务的传输,但不自动让该连接经过VPN,也不保证失败后不会采用不同策略。
没有IPv6的网络能验收IPv6防泄漏吗?
不能完整验收。应增加具有真实IPv6连接的测试网络,分别验证隧道承载或阻断策略;原环境标记为缺少测试条件。
断线保护开启后不能联网,是不是程序坏了?
不一定。隧道不可用时阻止受保护请求可能正是设计行为。先检查隧道恢复状态和产品说明,不要为了恢复访问直接关闭保护处理敏感业务。
通过这些测试就可以承诺绝对匿名吗?
不可以。账号登录、浏览器指纹、终端恶意软件、服务端日志与其他信息仍可能关联身份。测试只验证已声明范围内的流量策略,不能证明整个系统不存在风险。
官方技术与平台资料
- 双栈VPN流量泄漏及IESG范围说明RFC Editor / IETF
- DNS over HTTPS协议RFC Editor / IETF
- Firefox DoH保护级别与回退Mozilla
- Windows VPN路由与分流Microsoft
- WebRTC IP地址处理要求RFC Editor / IETF
- ICE候选类型MDN
- mDNS ICE候选工作草案及状态IETF Datatracker
- WebRTC ICE传输策略W3C
- Android always-on与阻止非VPN连接Android Developers
- Apple VPN路由与系统例外Apple Developer
项目评估
把VPN保护承诺变成可复测的交付标准
明确每个平台的分流、DNS、IPv6和断线策略,用实际版本和故障场景验收,而不只检查连接按钮。
