WebRTC 泄露检测说明

了解 WebRTC 泄露、ICE 候选地址、STUN 检测结果与浏览器防护方式。

IPDO · 文档团队 · 更新于

什么是 WebRTC 泄露

WebRTC(Web Real-Time Communication)是浏览器提供的实时音视频和点对点数据通道技术。视频会议、屏幕共享、在线客服和云游戏都可能使用它。

WebRTC 泄露指的是连接建立过程中的 ICE 候选地址意外暴露了本地或真实公网 IP。即使网页普通请求显示的是 VPN 或代理出口,网页脚本或第三方服务仍可能通过 WebRTC 看到另一条网络路径,从而削弱隐私隔离效果。

为什么要检测

WebRTC 检测是网络环境自查的一部分。使用 VPN、代理、跨境电商、AI 应用或流媒体服务时,建议同时比较 HTTP 出口、WebRTC 公网候选和 DNS 解析出口。三者不一致时,通常需要检查代理是否接管 UDP、浏览器隐私策略是否生效,以及是否有扩展改变了 WebRTC 行为。

浏览器是否容易泄露取决于具体实现、隐私默认值、扩展配置和代理模式。Chromium 浏览器通常需要通过策略或扩展限制候选收集;Firefox 提供了更直接的配置项。最可靠的判断方式是在实际使用的浏览器和网络环境中测试。

ICE 候选地址

建立点对点连接时,浏览器会通过 STUN / TURN 服务收集 ICE candidates:

  • host:本机网卡或局域网地址,例如 192.168.x.x、10.x.x.x。
  • srflx:STUN 服务看到的公网映射地址,通常是最需要与 HTTP 出口比较的候选。
  • relay:通过 TURN 中继分配的地址。
  • mDNS:浏览器用随机 .local 主机名替换真实内网地址,是常见的本地地址混淆方式。

普通 HTTP(S) 流量通常遵循浏览器代理设置,而 WebRTC 的 STUN 请求可能通过 UDP 直接发出。如果代理接管了网页流量但没有接管 UDP,WebRTC 公网候选就可能与 HTTP 可见地址不同。

IPDO 如何检测

IPDO 为清单中的每台 STUN 服务器单独创建一个 RTCPeerConnection,不会把所有服务器混在同一个连接里。这样可以知道每个节点是否响应、响应耗时以及返回的候选地址。

当前检测包含 12 个国内外 STUN 节点,分批并行执行:

  1. 创建数据通道并生成 offer,触发浏览器开始 ICE 收集。
  2. 逐条读取 host、srflx、prflx 和 relay 候选。
  3. 使用 /api/ip-check 获取 HTTP 层出口 IP,并忽略回环和私网地址作为比较对象。
  4. 与出口 IP 一致的公网候选显示为绿色,其他公网候选显示为红色。
  5. .local 候选单独显示为内网地址。单个 STUN 节点超时只代表本次请求未完成,不代表一定安全或一定被拦截。

如何理解结果

  • 绿色公网地址:与 HTTP 出口 IP 一致,本次检测没有发现额外公网地址。
  • 红色公网地址:与 HTTP 出口 IP 不一致,是需要重点关注的 WebRTC 泄露信号。
  • .local 地址:通常是 mDNS 混淆后的内网候选,不等于真实局域网地址已经暴露。
  • 全部超时:可能是 UDP 被阻断、代理规则、浏览器扩展或 STUN 服务故障,不能把超时直接当作安全证明。
  • 出口 IP 无法对比:页面只能展示 STUN 返回的候选,无法判断候选是否为额外泄露地址。

如何降低风险

如果需要继续使用浏览器音视频功能,可以优先限制候选收集策略:

Firefox 可以在 about:config 中调整 media.peerconnection.enabled。完全关闭会同时禁用网页视频会议、语音通话和点对点功能。需要保留 WebRTC 时,优先使用能够接管 UDP 的 VPN TUN / TAP 模式;修改设置后应刷新页面并重新检测。

隐私说明

STUN 探测和候选地址解析都在当前浏览器中完成,候选地址不会回传到 IPDO。页面只调用本站 IP 查询接口获取 HTTP 层出口地址用于比较。STUN 服务会看到你的网络连接信息,检测结果不会作为查询记录保存。