全部文章

检测与排查

WebRTC 检测出另一个 IP:原因和解决办法

代理明明开着,WebRTC 一栏却是另一个地址。这篇讲清检测到底在测什么、三种会出现不一致的情况,以及各自怎么解决。

作者 Mango Team发布于 4 分钟阅读

配好代理,打开一个泄漏检测页,HTTP 地址看起来没问题,WebRTC 那一行却显示了别的东西:你家里的 IP、一个从没见过的 IPv6 地址,或者一串以 .local 结尾的名字。先别急着改设置。这三种结果对应三种不同的情况,其中只有一种才是真正的泄漏。

WebRTC 泄漏检测到底在测什么

网站通常从加载页面的那条连接得知你的地址,这就是 HTTP IP,也是代理和 VPN 本来就要改掉的那个地址。

WebRTC 走的是另一条路。为了建立点对点通话,浏览器会收集「ICE 候选地址」,也就是所有可能联系到你的地址:它向操作系统询问本机网卡,再向互联网上的 STUN 服务器询问「你看到我是从哪个地址来的」。泄漏检测页做的事很简单:在后台创建一个连接,把这些候选地址收集起来,和 HTTP IP 并排打印。

候选类型来源你看到的样子
本机(host)你的网卡局域网私有地址;Chrome 里则是 3f1e….local 这样的 mDNS 名字
反射(srflx)STUN 服务器眼中的你从外部看到的公网 IP,走 UDP
中继(relay)TURN 服务器中继服务器的地址,只有网站提供 TURN 时才出现

真正需要比较的是 HTTP IP 和反射候选地址。两者都是公网地址,都会被网站记录,也理应一致。

WebRTC IP 与 HTTP IP 不一致的三种原因

一、代理只转发 TCP,WebRTC 用的是 UDP

HTTP/HTTPS 代理只处理 TCP 连接,而 STUN 请求走 UDP,根本不会经过代理。它从你的真实网络直接出去,STUN 服务器也就如实报告你的真实公网地址。这就是经典的 WebRTC 泄漏:网站日志里是代理 IP,WebRTC 候选里是你运营商分配的 IP,两个地址被放在了一起。

二、IPv6 和 IPv4 走了两条路

很多家庭和办公网络同时有 IPv4 和 IPv6。如果代理或 VPN 只接管 IPv4,浏览器仍会通过 IPv6 收集到一个候选地址,而那就是没被遮住的真实地址。特征很明显:HTTP IP 是点分的 IPv4,WebRTC IP 是一长串十六进制。

三、检测页显示的是本机地址,不是公网地址

192.168.1.24 这类地址,或者以 .local 结尾的名字,都是本机候选。Chrome 从 2019 年起就用 mDNS 名字把真实局域网地址藏了起来,.local 条目不会告诉网站你在哪里。有些检测页仍会把它标红,但它不是泄漏,也不需要处理。

不一致是线索,不是结论。

地址不同只说明两条路径离开你电脑的方式不同。该用哪种办法,取决于你遇到的是哪一种情况,所以先判断情况。

正确的检测方法

  1. 关掉代理测一次,记下 HTTP IP 和反射候选地址,两者应该完全相同。这是基准。
  2. 打开代理,在同一个浏览器里再测一次,只比较公网候选地址。
  3. WebRTC 地址是 IPv6 而 HTTP 是 IPv4,就是第二种情况;是私有地址或 .local,是第三种;其余都是第一种。
  4. 在你实际工作的网络上重复一遍。咖啡馆 Wi-Fi、手机热点和办公室局域网的表现各不相同。

检测你自己的 WebRTC 结果

实验室会把你的 HTTP IP 和 WebRTC 候选地址并排显示,并解释任何不一致。数据不会离开你的浏览器。

打开实验室

三种情况各自怎么解决

情况一:禁止不经代理的 UDP

Chrome 自带一个开关,叫 WebRTC IP 处理策略。设为「禁用非代理 UDP」后,浏览器只使用经过代理的候选地址,对多数网站来说泄漏就此消失,WebRTC 也会悄悄停止工作。可以通过扩展或企业策略设置。支持 UDP 的 SOCKS5 代理是另一条路,但浏览器不会自动用它来发 STUN 请求。

情况二:让 IPv6 和 IPv4 同等对待

要么在通过代理工作时关闭本机 IPv6,要么换一个同时承载 IPv6 的代理。改完再测一次:IPv6 候选地址消失,就是你要的确认。

情况三:什么都不用做

.local 名字说明浏览器在正常工作,不要动它。

为什么「直接关掉 WebRTC」不是完整答案

彻底禁用 WebRTC 能堵住泄漏,但也让你的浏览器变得不寻常。每一个原版 Chrome 都有 RTCPeerConnection,一个页面发现它不存在,就已经从你身上学到了东西;而任何用 WebRTC 做通话或屏幕共享的网站都会失效。更干净的目标是:WebRTC 正常可用,并且报告的公网地址与 HTTP 一致。

多账号运营时这意味着什么

一个账号泄漏是麻烦,多个账号泄漏是危险。五个环境各自挂着代理,却都通过 WebRTC 泄漏同一个家庭 IP,平台风控看到的就是五个账号、五个国家、一个共同地址。这种关联比任何 Cookie 都强,而且清什么都清不掉。

所以要检查的不是「代理生效了没有」,而是「这个环境出去的每一条路径是否一致」。公网 WebRTC 候选、HTTP IP、时区和语言,应该描述同一个地方。

Mango Browser 怎么处理 WebRTC

Mango 的每个环境都有独立的 WebRTC 设置,五种模式:关闭、自动、手动、真实、禁用 UDP。默认是自动:把公网候选地址替换为该环境所绑定代理的出口 IP,WebRTC 照常可用,并且与 HTTP 地址一致,不需要装扩展或配置策略。

代理同样按环境绑定,支持 HTTP、SOCKS5 和住宅代理;时区、语言和地理位置可以自动跟随出口 IP。在 Mango 环境里打开实验室检测,WebRTC 一行和 IP 一行显示的是同一个地址,其他检测站看到的也会是同样的结果。

参考资料

  1. RFC 8828: WebRTC IP Address Handling Requirements
  2. MDN: RTCIceCandidate.type
  3. Chrome Enterprise policy: WebRtcIPHandling

到指纹实验室看看你的浏览器暴露了什么

继续阅读