很多人已经把浏览器代理、系统代理、OpenClash 或 VPN 配好了,但一打开 WebRTC 泄漏测试网站,还是能看到本机内网地址、真实公网 IP,甚至家宽 IPv6。

这个问题不一定是代理节点坏了,而是 WebRTC 本身会为了点对点连接收集 ICE candidates。浏览器在默认配置下,可能会暴露本地接口信息,或者绕过普通 HTTP/SOCKS 代理尝试 UDP 直连。

这篇文章整理一套比较稳的处理方法:不彻底禁用 WebRTC,而是优先把 WebRTC 的非代理 UDP 限制掉。这样视频会议、网页语音通话这类功能通常还有机会继续工作,同时也能降低真实 IP 暴露风险。

先说结论

如果你只想快速处理,优先记住这几个设置:

  • Chrome:策略名 WebRtcIPHandling,值设为 disable_non_proxied_udp
  • Microsoft Edge:策略名 WebRtcLocalhostIpHandling,值设为 disable_non_proxied_udp
  • Brave:进入 brave://settings/privacy,把 WebRTC IP Handling Policy 改成 Disable Non-Proxied UDP
  • Firefox:优先使用 media.peerconnection.ice.proxy_only_if_behind_proxy = true;更强限制可用 media.peerconnection.ice.proxy_only = true;彻底禁用才改 media.peerconnection.enabled = false

其中 disable_non_proxied_udp 的意思可以简单理解为:WebRTC 不再随便使用非代理 UDP,除非代理本身支持 UDP,否则退回 TCP。微软 Edge 官方策略文档也说明,这个值不会暴露本地 IP。

WebRTC 泄漏通常漏的是什么

常见泄漏结果大概分三类:

  1. Local IP Address 显示 192.168.x.x10.x.x.x172.16.x.x
  2. Public IP Address 显示你的真实宽带公网 IP,而不是代理 IP
  3. IPv6 Address 显示 2409:240e:2600: 这类真实家宽 IPv6

前两类通常可以通过浏览器 WebRTC IP handling 策略缓解。第三类要特别注意:如果远程测试里仍然显示你的真实 IPv6,那可能不是单纯浏览器设置问题,而是你的 LAN IPv6、软路由 IPv6 下发、DNS 或 OpenClash 分流策略还在直出。

Microsoft Edge:macOS 设置

Edge 的官方策略名是:

1
WebRtcLocalhostIpHandling

要设置的值是:

1
disable_non_proxied_udp

在 macOS 上可以先尝试用终端写入:

1
defaults write com.microsoft.Edge WebRtcLocalhostIpHandling -string "disable_non_proxied_udp"

然后完全退出 Edge:

1
killall "Microsoft Edge"

重新打开 Edge,在地址栏输入:

1
edge://policy

点击页面里的“重新加载策略”,确认能看到:

1
WebRtcLocalhostIpHandling = disable_non_proxied_udp

如果策略页没有显示,说明当前写法没有被 Edge 当成受管策略读取。个人 Mac 上可以先这样试;企业或严格受管环境建议改用配置描述文件、MDM 或官方策略模板。

Microsoft Edge:Windows 设置

Windows 上最稳的是写入注册表策略。用管理员身份打开 CMD 或 PowerShell,执行:

1
2
reg add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v WebRtcLocalhostIpHandling /t REG_SZ /d disable_non_proxied_udp /f
taskkill /IM msedge.exe /F

重新打开 Edge,进入:

1
edge://policy

点击“重新加载策略”,看到下面状态就说明生效:

1
2
WebRtcLocalhostIpHandling = disable_non_proxied_udp
状态:正常

Edge 官方文档还提到,这个策略不支持动态刷新,需要重启浏览器。所以只点“重新加载策略”不一定够,建议先完全退出再打开。

Chrome:macOS 设置

Chrome 对应的策略名是:

1
WebRtcIPHandling

值同样设为:

1
disable_non_proxied_udp

macOS 上可以尝试:

1
defaults write com.google.Chrome WebRtcIPHandling -string "disable_non_proxied_udp"

然后完全退出 Chrome:

1
killall "Google Chrome"

重新打开 Chrome,进入:

1
chrome://policy

点击“重新加载政策”,确认是否出现:

1
WebRtcIPHandling = disable_non_proxied_udp

如果没有出现,不要只看终端命令有没有报错,关键以 chrome://policy 为准。Chrome 在 macOS 的标准企业管理方式是通过 .plist / configuration profile / MDM 下发策略;个人设备可以先试 defaults write,不显示再换成正式策略文件。

Chrome:Windows 设置

Windows 上用管理员身份打开 CMD 或 PowerShell,执行:

1
2
reg add "HKLM\SOFTWARE\Policies\Google\Chrome" /v WebRtcIPHandling /t REG_SZ /d disable_non_proxied_udp /f
taskkill /IM chrome.exe /F

重新打开 Chrome,进入:

1
chrome://policy

点击“重新加载政策”,看到下面内容即可:

1
2
WebRtcIPHandling = disable_non_proxied_udp
状态:正常

如果 Chrome 提示“由贵组织管理”,这是策略生效后的正常现象,不代表浏览器被别人接管。你自己写进注册表或配置文件的本地策略,也会让 Chrome 显示受管理状态。

Brave:直接在设置里改

Brave 不需要注册表也能直接改。打开:

1
brave://settings/privacy

找到:

1
WebRTC IP Handling Policy

选择:

1
Disable Non-Proxied UDP

Brave 官方 Wiki 对这个选项的说明也很直白:WebRTC 只应使用 TCP 联系对端或服务器,除非代理服务器支持 UDP,并且不会暴露本地地址。

如果你发现 Brave 的这个设置保存不住,先检查扩展。比如部分广告拦截或 WebRTC 防泄漏扩展也会改这个选项,扩展和浏览器设置同时抢控制权时,页面上看起来就像“自动跳回去了”。

Firefox:优先不要一刀切禁用

Firefox 没有 Chrome/Edge 那种完全一样的策略项,主要通过 about:config 调整。

地址栏输入:

1
about:config

接受风险提示后,优先搜索并设置:

1
media.peerconnection.ice.proxy_only_if_behind_proxy = true

这个设置更适合“已经配置代理,希望 WebRTC 在代理场景下不要直接 UDP P2P”的用户。Mozilla Bugzilla 里也有人提醒,如果直接把更硬的 media.peerconnection.ice.proxy_only 设为 true,在没有代理时可能会破坏 WebRTC 使用。

如果你想更强一点,再搜索:

1
media.peerconnection.ice.proxy_only

改成:

1
true

如果你想彻底禁用 WebRTC,才搜索:

1
media.peerconnection.enabled

改成:

1
false

不建议一上来就彻底禁用,因为这会影响网页视频会议、语音通话、网页远程协作、部分在线客服和文件直连传输。

验证是否生效

改完之后,打开下面两个测试页面:

理想结果是:

  • WebRTC Leak Test 显示 No Leak
  • Local IP Address 显示 - 或没有可识别的本地地址
  • Public IP Address 显示代理出口 IP,而不是你的真实宽带 IP

注意,测试前最好先完全退出并重新打开浏览器。Chrome 和 Edge 的策略页显示正常,才算真的下发成功。

如果还漏 IPv6,去软路由里查

很多人最容易卡在这里:WebRTC 的本地 IP 不漏了,但测试页还是显示一个 2409: 开头的 IPv6。

这种情况通常要回到路由器或软路由排查,尤其是 iStoreOS / OpenClash 用户:

  • LAN 侧是否仍在给客户端下发 IPv6 地址
  • OpenClash / Mihomo 配置里是否开启了 ipv6: true
  • DNS 是否返回了 AAAA 记录并让浏览器直连
  • 代理节点是否不支持 IPv6,但本机 IPv6 还在直出
  • 分流规则里是否让测试站点或 WebRTC 相关连接绕过了代理

如果你只是想先求稳,可以在 iStoreOS 里关闭 LAN IPv6 下发,或者在 OpenClash/Mihomo 配置里先把 IPv6 关掉。等 IPv4 代理链路确认稳定后,再单独处理 IPv6 代理与 DNS。

如何恢复默认

如果后面某些网页会议、远程协作工具无法连接,可以先恢复默认再测试。

Edge macOS:

1
2
defaults delete com.microsoft.Edge WebRtcLocalhostIpHandling
killall "Microsoft Edge"

Chrome macOS:

1
2
defaults delete com.google.Chrome WebRtcIPHandling
killall "Google Chrome"

Edge Windows:

1
2
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v WebRtcLocalhostIpHandling /f
taskkill /IM msedge.exe /F

Chrome Windows:

1
2
reg delete "HKLM\SOFTWARE\Policies\Google\Chrome" /v WebRtcIPHandling /f
taskkill /IM chrome.exe /F

Brave 直接回到 brave://settings/privacy,把 WebRTC IP Handling Policy 改回默认选项即可。

Firefox 则回到 about:config,把你改过的项目恢复默认或手动切回原值。

参考资料