隐私
WebRTC 泄漏全解:你的浏览器在泄漏什么、怎么止住
WebRTC 通过收集本地和反射 IP 来协商点对点连接。当你使用代理时,这些 candidate 会暴露你的真实 IP。本文解释泄漏如何发生、每种 candidate 的含义、以及真正能修复它的方法。
WebRTC 到底在做什么
WebRTC 是浏览器内驱动视频通话的 API 集合:Google Meet、浏览器内 Zoom、Discord 语音、任何点对点通话。要在两台设备之间建立通话,浏览器需要先在网络上找到彼此。这是通过 ICE(Interactive Connectivity Establishment)完成的,它会收集一份 candidate IP 列表,列出浏览器可以被连接到的地址。
候选地址分三种。host candidate 是设备的局域网 IP——比如 192.168.1.5 或 10.0.0.42。srflx(server-reflexive)candidate 是你的 NAT 暴露的公网 IP——也就是网站看到的那个。relay candidate 来自 TURN 服务器,是当中继作为点对点失败的兜底时分配的 IP。
为什么代理藏不住 WebRTC
代理或 VPN 把你的出站 HTTP 和 TCP 流量路由到一个出口节点。WebRTC 的连接建立用的是 UDP,使用的是和 HTTP 流量完全独立的 socket。代理只知道 HTTP socket 的存在;WebRTC 流量直接从你的真实网卡出去,使用你的真实本地 IP,并把真实公网 IP 暴露给对端。
结果是:任何网站运行几行 JavaScript,与自己控制的服务器建立 WebRTC 连接,就能从 srflx candidate 里拿到你的真实公网 IP——即便你的代理是开着的,即便你的 DNS 走的是 DoH,即便你封了所有其他追踪器。
真正能修复它的方法
三种方案,按破坏性递增排列。(1)装一个浏览器扩展,拦截 ICE candidate 收集并把 srflx candidate 替换成代理出口 IP。uBlock Origin 在「设置 → 过滤列表 → 隐私」里直接有开关。(2)完全禁用 WebRTC——Firefox 在 about:config 里设 media.peerconnection.enabled = false。代价是浏览器内视频通话全废,泄漏也彻底消失。(3)用客户端能在网络层做 WebRTC masking 的 VPN,而不是只在浏览器层做。
如果你是做隐私工具的开发者,正确的模式是收集 candidate、呈现给用户、让用户自己决定。IPCombo 的 WebRTC 组件就是这么做的:它列出浏览器收集到的每个 candidate,标注类型,告诉你其中是否有人和你的代理出口 IP 不一样。
想看更多指南?
全部文章