指南 / Network

WebRTC 泄漏测试到底在测什么

测试页列出 IP 不等于代理泄漏;要看候选类型、地址性质,并和代理前后的真实出口做对照。

发布 · 更新 · 9 MIN

WebRTC 泄漏测试很擅长制造紧张气氛:页面一打开,突然列出好几个 IP,再配一个红色“Leak”。很多人当场就去关闭浏览器功能,甚至觉得代理已经形同虚设。

先别急。测试页能收集到 ICE 候选地址,不等于它一定看到了你的真实公网出口。真正要判断的是:这是什么类型的候选、地址属于哪一层、它和代理前后的 IP 是否一致。

WebRTC 为什么需要这些地址

网页语音、视频会议和点对点通信要在不同网络之间建立连接。ICE 会尝试收集多种可用路径,再选一条能连通的。测试页只是把这些候选展示出来。

常见类型有:

看到 192.168.x.x、10.x.x.x 或 mDNS 名称,和看到未经过代理的真实公网 IPv4,不是同一件事。

最有用的测试不是“看一眼红绿”

  1. 关闭代理,记录普通 IP 查询页显示的公网 IPv4 和 IPv6。
  2. 连接代理,确认普通网页出口已经变成代理地址。
  3. 再运行 WebRTC 测试,记录每个候选的类型和地址。
  4. 把 srflx 等公网候选与第一步、第二步对照。

如果网页出口是代理 IP,但 WebRTC 的公网候选仍出现第一步记录的原始公网地址,这才是比较明确的泄漏信号。

测试前没有记录真实出口,测试后只看见一个陌生 IP 就宣布“泄漏”,证据其实是不完整的。那个地址可能是代理节点、运营商 IPv6、TURN 中继或 CDN 测试服务器。

为什么 IPv6 经常把判断搞乱

有些代理只接管 IPv4,设备却仍通过本地网络获得可用 IPv6。普通网页可能优先显示代理 IPv4,WebRTC 候选却暴露直连 IPv6。

这种情况确实值得处理,但它更准确的名字是“代理没有覆盖 IPv6 路径”,而不是 WebRTC 凭空创造了泄漏。可以结合IPv6 分层排查确认 IPv6 是否直连。

常见假警报

确认泄漏后,从哪里修

优先检查代理或 VPN 是否明确支持 WebRTC、UDP 和 IPv6,是否启用了分应用代理,以及浏览器是否被排除在隧道之外。系统的“阻止不通过 VPN 的连接”也可能比某个浏览器扩展更可靠。

如果使用规则代理,确认 STUN/UDP 流量是否走代理或被阻断。不同客户端的 FakeDNS、TUN、系统 VPN 和仅 HTTP 代理能力完全不同,不能照抄一个开关名称。

浏览器扩展可以限制候选暴露,但它只能控制浏览器内的一部分行为。真正要求“所有流量不得直连”时,边界应该放在系统 VPN 或防火墙层。

要不要直接禁用 WebRTC

禁用确实可能让测试页变得很绿,同时也可能让网页通话、视频会议、语音聊天室和点对点传输失效。更合理的顺序是先让代理覆盖该覆盖的网络路径,再决定是否需要浏览器级限制。

如果你根本不用任何 WebRTC 功能,禁用的代价可能很小;如果每天开网页会议,为了截图全绿把功能砍掉,就有点像为了不担心爆胎把轮胎拆了。

最后留一份可复现记录

记录测试时间、浏览器版本、代理模式、是否启用 IPv6、普通网页出口,以及每个 ICE 候选类型。换一个可信测试页复核即可,不需要连续打开十几个页面让自己越来越慌。

手机端测试页显示异常时,可以用远程调试看 Console 和 Network,先确认测试脚本有没有被扩展、内容拦截或网络错误破坏。

概念参考:MDN 的 ICE candidate type 说明