You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无网隔离LAN中,如何让浏览器提供正确的WebRTC本地ICE候选地址?

解决方案:让浏览器生成隔离LAN的ICE本地候选

核心原因

现代浏览器的ICE候选收集逻辑会结合系统路由优先级和页面来源的网络安全策略,默认优先选择带互联网访问的默认路由接口(eth0),即使页面从隔离LAN加载,也可能过滤掉非默认接口的候选。以下是针对Chrome/Firefox/Brave的有效解决方法:


1. 代码层面:显式配置RTCPeerConnection

创建连接时强制枚举所有本地候选,跳过STUN/TURN(本地网络无需):

const pc = new RTCPeerConnection({
  iceServers: [], // 禁用STUN/TURN,仅依赖本地候选
  iceTransportPolicy: "all", // 允许收集所有类型的候选
  iceCandidatePoolSize: 0 // 按需收集候选,避免预收集的优先级偏差
});

如果自动收集仍未返回目标IP,可手动构造并添加候选:

// 手动添加192.168.0.200的本地候选
const targetCandidate = new RTCIceCandidate({
  candidate: "a=candidate:1000 1 udp 2113937151 192.168.0.200 50000 typ host generation 0 network-cost 10",
  sdpMid: "0",
  sdpMLineIndex: 0
});
pc.addIceCandidate(targetCandidate);

2. Chrome/Brave:修改启动参数

添加启动参数强制枚举所有私有/公共接口的候选:

--webrtc-ip-handling-policy=default_public_and_private_interfaces

若仍无效,可搭配补充参数:

--enable-features=WebRTCAllowUnicastLocalIPs --webrtc-max-local-candidates=0

3. Firefox:修改about:config配置

打开about:config,调整以下参数:

  • media.peerconnection.ice.default_address_only:设为false(禁用仅默认地址限制)
  • media.peerconnection.ip_handling_policy:设为default_public_and_private_interfaces
  • media.peerconnection.ice.no_host:设为false(允许收集本地候选)

4. 系统层面:调整路由优先级

修改系统路由,让隔离LAN的接口(eth1)优先级高于默认路由(eth0),Linux示例:

# 降低默认路由优先级(metric值越小优先级越高)
ip route change default via 10.1.1.1 dev eth0 metric 200
# 提升隔离LAN路由优先级
ip route change 192.168.0.0/24 dev eth1 metric 100

系统优先使用eth1处理隔离LAN流量后,浏览器会自动优先收集该接口的ICE候选。

内容的提问来源于stack exchange,提问作者DasKeks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:30:22