跳到正文
查个机

泄露检测

WebRTC 泄露自测

首发 查于 第 1 版阅读约 6 分钟

要点

开着代理,网页仍可能借 WebRTC 拿到你家宽带的公网 IP。按下面的按钮测一次,结论说两个地址不一样,就按本页限制 WebRTC 后再测。

在这台浏览器上测一次

按下按钮后,浏览器会和公共 STUN 服务器打一次招呼,下面列出 WebRTC 能看到的地址。结果只在你的屏幕上,本站不收。

问:上面的按钮测的是什么?

短答:让浏览器向 stun.cloudflare.com 问一次「从外面看你是哪个地址」,再和本站读到的出口 IP 比。

按「开始测」以后,浏览器会建一条只在本机存在的 WebRTC 连接,向公共 STUN 服务器发一个 UDP 请求,约 2.5 秒后列出结果。结果只显示在你的屏幕上,本站不收、不存。四行分别是:

  • 本站读到的出口 IP:网页请求经过代理后到达本站时的地址,也就是节点出口。在本地预览打开本页时这一行读不到。
  • WebRTC 暴露的公网地址:STUN 服务器回报的地址,网页拿到的就是它。
  • WebRTC 暴露的局域网地址:浏览器直接报出的内网地址;现在的浏览器多半用随机的 .local 名字代替,所以常显示「没有」。
  • 结论:按前两行是否一致给出的判断。

问:四行结果怎么读?

短答:盯住第二行,它为空或等于出口 IP 就没漏,是别的地址再往下查。

你看到的 读法 要不要改
公网地址一行写「没有」 浏览器没拿到 STUN 回报:WebRTC 已被限制,或本机 UDP 出不去 不用改
公网地址等于出口 IP WebRTC 的 UDP 也经过了代理,露出来的是节点地址 不用改
公网地址和出口 IP 不同,查归属是本地运营商 真实宽带地址漏出去了 按下一节限制
一个是 IPv4、一个是 IPv6 可能是同一节点的两种地址,也可能是 IPv6 直连漏出 把 WebRTC 那个地址拿去 IP 风险查询 看归属
局域网一行列出 192.168 或 10 开头的地址 浏览器没用 .local 名字隐藏内网地址 只露内网,介意再限制

STUN[协议]帮浏览器问出「外面看到的地址」的服务。① 走 UDP,系统代理(HTTP 或 SOCKS 端口)接管不到;② 回报的就是那个 UDP 包实际出去时的地址。参见:srflx 候选。

srflx 候选[WebRTC 字段]STUN 回报的公网地址,按钮第二行显示的就是它。① 客户端开 TUN 模式时,UDP 进隧道,回报的是节点出口;② 只开系统代理时,UDP 直接出门,回报的是你家宽带的地址。参见:STUN、.local 地址。

.local 地址[WebRTC 字段]浏览器用来代替真实内网 IP 的随机名字,以 .local 结尾。① 看到它说明浏览器已在隐藏内网地址;② 它和公网地址是否泄露无关。

问:漏了怎么在浏览器里限制?

短答:两条路:在代理客户端开 TUN 模式让 UDP 也进隧道;或者让浏览器的 WebRTC 只经代理走。

浏览器 做法 生效后的样子
Chrome 设置页没有开关。用浏览器策略 WebRtcIPHandling,取值 disable_non_proxied_udp 地址栏打开 chrome://policy 能看到这条策略,状态为正常
Edge 策略名是 WebRtcLocalhostIpHandling,取值同上 edge://policy 能看到这条
Firefox about:config 里把 media.peerconnection.ice.proxy_only_if_behind_proxy 设为 true;要彻底关掉,把 media.peerconnection.enabled 设为 false 刷新本页再测,读数没变就重启 Firefox
Safari 没有关闭 WebRTC 的开关;网页没拿到摄像头和麦克风权限时,Safari 本来就不报本机地址 仍漏就改用客户端的 TUN 模式

Windows 上给 Chrome、Edge 写策略(在管理员 PowerShell 里执行,写完把浏览器完全退出再开):

reg add "HKLM\SOFTWARE\Policies\Google\Chrome" /v WebRtcIPHandling /t REG_SZ /d disable_non_proxied_udp /f
reg add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v WebRtcLocalhostIpHandling /t REG_SZ /d disable_non_proxied_udp /f

Linux 上的 Chrome 把策略写成 JSON 文件:

sudo mkdir -p /etc/opt/chrome/policies/managed
echo '{ "WebRtcIPHandling": "disable_non_proxied_udp" }' | sudo tee /etc/opt/chrome/policies/managed/webrtc.json

写了策略以后,浏览器设置页会显示「由你的组织管理」,这是策略生效的正常提示。不想要了就删掉:

reg delete "HKLM\SOFTWARE\Policies\Google\Chrome" /v WebRtcIPHandling /f
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v WebRtcLocalhostIpHandling /f

disable_non_proxied_udp 的意思是:WebRTC 只用代理支持的 UDP,否则退回经代理的 TCP。系统代理一般不转 UDP,所以设置后按钮第二行多半会变成「没有」。

问:改完怎么确认?

短答:完全退出浏览器再开,回本页按「再测一次」,再用第二个检测站对照。

  1. 把浏览器完全退出(Windows 看任务栏托盘、macOS 用 Command+Q),再重新打开本页。
  2. 按「再测一次」,看第二行是否变成「没有」或等于出口 IP。
  3. 打开 browserleaks 的 WebRTC 页面或 ipleak.net,对照 Public IP Address 那一行;两边的读法写在 ipleak 一页。
  4. 两处都不再出现你家宽带的地址,才算限制成功。

问:按钮显示没漏,网站还是认出了你,问题在哪?

短答:WebRTC 只是三条泄露路径之一,剩下两条是 DNS 和出口本身。

先做一次 DNS 泄露检测,看域名查询是否还在交给本地运营商;DNS 也干净,就去比几个检测站对你出口的判定,读法见 IP 纯净度检测网站。出口被判成机房、地区又和服务要求对不上,那就不是浏览器设置能解决的了。

常见问题

WebRTC 测试里列出的局域网地址要紧吗?

影响小。192.168 或 10 开头的内网地址只说明你在哪个局域网里,网站拿它找不到你的宽带;介意的话,按本页的浏览器策略一并限制即可。

限制了 WebRTC,网页版视频会议还能用吗?

多数还能用。改成只走代理以后,音视频改经代理的 TCP 传,延迟会变高;彻底关掉 WebRTC 的做法(Firefox 的 media.peerconnection.enabled)会让这类网页直接打不开通话。

客户端开了 TUN 模式,还需要在浏览器里限制 WebRTC 吗?

先测再说。TUN 模式下浏览器的 UDP 也进了隧道,按钮读到的公网地址通常就是节点出口;只有节点不转 UDP、或客户端把 STUN 规则设成了直连时,才需要再在浏览器里限制。

手机浏览器做 WebRTC 检测准吗?

准,但手机上很少有地方能改 WebRTC 设置。测出漏了,更现实的做法是在手机客户端里开 TUN 或 VPN 模式,让整机流量都进隧道,再回本页测一次。

本页第 (1)
  • :首发

网站地图 · 机场推荐