浏览器与追踪

WebRTC

约 4 分钟阅读

什么是 WebRTC

WebRTC(Web Real-Time Communication)是一种 Web 标准技术,无需插件即可在浏览器之间实现实时音视频和数据通信。Google Meet、Discord、Facebook Messenger 等的视频通话功能都基于 WebRTC 构建。

为了提高通信效率,WebRTC 采用浏览器之间直接连接的 P2P(点对点)方式。为建立这种直接连接,需要通过 STUN/TURN 服务器将自己的 IP 地址通知对方,这就产生了隐私问题。

STUN/TURN 服务器的作用

建立 WebRTC P2P 连接首先需要确定自己在网络中的位置。这里使用 STUN 和 TURN 两种服务器。

STUN 服务器
Session Traversal Utilities for NAT 的缩写。客户端向 STUN 服务器发送请求后,服务器会回复「你的 IP 地址是这个」。它使 NAT 内部的设备能够获知自己的公网 IP 地址和端口号。Google 免费提供 stun.l.google.com:19302,许多 WebRTC 应用都在使用。
TURN 服务器
Traversal Using Relays around NAT 的缩写。当对称型 NAT 或防火墙导致无法建立 P2P 连接时,TURN 服务器负责中继通信。由于所有流量都经过服务器,带宽成本较高,是 P2P 连接的最后手段。

从隐私角度来看,问题在于 STUN 服务器的查询可能绕过 VPN 隧道。在这种情况下,VPN 本应隐藏的真实 IP 地址会被发送到 STUN 服务器,并可通过 JavaScript 获取。

ICE Candidate 与 IP 泄露机制

WebRTC 使用 ICE(Interactive Connectivity Establishment)框架来建立连接路径。ICE 收集多个连接候选(ICE Candidate)并选择最优路由。

ICE Candidate 收集过程会生成三种类型的候选:

  • Host Candidate:从设备网络接口直接获取的本地 IP 地址(192.168.x.x10.x.x.x)。即使在 VPN 连接期间,物理网卡的 IP 地址也可能被包含;不过截至 2026 年 8 月,Chromium 系浏览器默认会将该候选替换为随机的 .local 名称(mDNS),以隐藏真实的本地 IP
  • Server Reflexive Candidate (srflx):STUN 服务器返回的公网 IP 地址。如果 STUN 查询绕过了 VPN,VPN 外部的真实 IP 就会暴露
  • Relay Candidate:TURN 服务器的地址。隐私风险较低

恶意网站只需创建 RTCPeerConnection 对象并启动 ICE Candidate 收集,无需实际进行通话,就能通过 JavaScript 获取这些 IP 地址。由于只需几行代码即可实现,它与 DNS 泄露并列为使用 VPN 时最常见的信息泄露途径。

本地 IP 默认已被隐藏,但当 STUN 查询走到 VPN 之外的路径时,返回的 srflx 候选仍会原样暴露真实 IP 地址。使用 VPN 时真正需要确认的是这个 srflx 候选,而不是本地 IP。

各浏览器的应对方法

  • Firefox:在地址栏输入 about:config,将 media.peerconnection.enabled 设为 false 可完全禁用 WebRTC。更精细的控制方式是将 media.peerconnection.ice.default_address_only 设为 true,仅公开默认网络接口的 IP,防止其他接口(如 VPN 适配器)的 IP 泄露。
  • Chrome:无法从设置页面禁用 WebRTC 本身。借助能将 ICE Candidate 收集策略改为 disable_non_proxied_udp 的扩展,可阻止不经代理或 VPN 的 UDP 通信,避免真实 IP 出现在候选列表中。此类扩展中不少已停止维护,安装前请确认最后更新日期和所要求的权限。
  • Safari:ICE Candidate 限制默认已启用,通常无需额外设置。在「设置」→「高级」中开启开发菜单的显示后,「开发」→「WebRTC」中会出现 Disable ICE Candidate Restrictions,但它是解除限制的开关,出于隐私目的不应启用。
  • Brave:可在「设置」→「隐私和安全」→「WebRTC IP 处理策略」中选择候选的处理方式。默认值与 Chromium 相同,为 Default;若要优先防止泄露,可选择 Disable non-proxied UDP

即使启用了 VPN 终止开关,也可能无法防止 WebRTC 泄露。浏览器端的防护措施必不可少。

WebRTC 的正当用途

虽然 WebRTC 的隐私风险备受关注,但它是一项无需插件即可实现实时通信的强大技术。了解其主要用途有助于判断禁用后的影响。

  • 视频会议:Google Meet、Zoom(网页版)、Microsoft Teams(网页版)都使用 WebRTC。禁用后将无法通过浏览器参加会议
  • 语音通话:Discord 网页版、Facebook Messenger 的通话功能等
  • P2P 文件共享:WebTorrent 和浏览器间直接文件传输服务
  • 实时游戏:基于浏览器的多人游戏中用于低延迟通信
  • 直播:需要将延迟控制在 1 秒以内的直播会使用 WebRTC

如果经常使用视频会议,与其完全禁用 WebRTC,不如使用 VPN 提供商的 WebRTC 泄露防护功能或浏览器的 ICE Candidate 限制设置,这样更为实际。

WebRTC 泄露的检测方法

您可以使用专门的测试网站轻松检查浏览器是否存在 WebRTC 泄露。在连接 VPN 的状态下运行测试,如果显示了 VPN 服务器 IP 以外的 IP 地址,则说明存在泄露。

检测步骤如下:

  1. 连接 VPN
  2. 访问 WebRTC 泄露测试网站
  3. 查看显示的 IP 地址
  4. 如果出现 VPN 服务器 IP 以外的地址,则存在泄露

定期结合浏览器指纹测试进行检查,有助于验证隐私设置的有效性。

常见误解

使用 VPN 就不会发生 WebRTC IP 泄露
WebRTC 可以绕过 VPN 隧道直接访问网络接口,因此仅靠 VPN 无法防止泄露。需要在浏览器中禁用 WebRTC 或使用泄露防护扩展。
禁用 WebRTC 会导致无法上网
禁用 WebRTC 不会影响正常的网页浏览、视频观看和文件下载。受影响的仅限于浏览器内的视频通话和 P2P 文件共享等实时通信功能。
分享

相关术语

相关文章