浏览器 WebRTC IP 泄漏修复教程:Chrome、Edge、Firefox、Brave 设置指南
很多人已经把浏览器代理、系统代理、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 泄漏通常漏的是什么
常见泄漏结果大概分三类:
Local IP Address显示192.168.x.x、10.x.x.x、172.16.x.xPublic IP Address显示你的真实宽带公网 IP,而不是代理 IPIPv6 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 | reg add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v WebRtcLocalhostIpHandling /t REG_SZ /d disable_non_proxied_udp /f |
重新打开 Edge,进入:
1 | edge://policy |
点击“重新加载策略”,看到下面状态就说明生效:
1 | 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 | reg add "HKLM\SOFTWARE\Policies\Google\Chrome" /v WebRtcIPHandling /t REG_SZ /d disable_non_proxied_udp /f |
重新打开 Chrome,进入:
1 | chrome://policy |
点击“重新加载政策”,看到下面内容即可:
1 | 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 LeakLocal 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 | defaults delete com.microsoft.Edge WebRtcLocalhostIpHandling |
Chrome macOS:
1 | defaults delete com.google.Chrome WebRtcIPHandling |
Edge Windows:
1 | reg delete "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v WebRtcLocalhostIpHandling /f |
Chrome Windows:
1 | reg delete "HKLM\SOFTWARE\Policies\Google\Chrome" /v WebRtcIPHandling /f |
Brave 直接回到 brave://settings/privacy,把 WebRTC IP Handling Policy 改回默认选项即可。
Firefox 则回到 about:config,把你改过的项目恢复默认或手动切回原值。
参考资料
- Microsoft Edge WebRtcLocalhostIpHandling 策略文档
- Chrome Enterprise Policy List:WebRtcIPHandling
- Chrome Developers:chrome.privacy API / webRTCIPHandlingPolicy
- Google:Manage Chrome policies with Windows registry
- Google:Chrome Browser quick start on Mac - Set policies
- Mozilla Support:How to stop Firefox from making automatic connections
- Mozilla Support:Configuration Editor for Firefox
- Mozilla Bugzilla:WebRTC does not use proxy
- Brave Browser Wiki:WebRTC Custom Settings