没有 public IP 的 ICE Candidate,但 WebRTC 有时仍然可以工作

No ICE Candidate with public IP, but WebRTC can still work sometimes

我们正在 A、B 和 C 三个地方测试 WebRTC。

A和C是ADSL,一个在家里,一个在写字楼。 B是公司静态IP直连,有公司防火墙和一些端口过滤规则。

结果是:A和B都可以连接,B和C只能和A连接。

所以我们检查了他们的浏览器控制台输出。 A 和 C 可以获得内部和 public IPv4 候选地址(192.168.1.xxx 和 123.34.xxx.xxx)。 B 可以找到 4 个 ICE Candidate,2 个 internal IPv4 candidate (10.0.xxx.xxx) 和 2 个 IPv6 candidate(不确定 IPv6 地址是 internal 还是 public)。

所以问题是:

  1. 什么阻止 B 从 STUN 服务器获取 public IP 候选?是不是某个端口被公司防火墙封了?

  2. B永远获取不到publicIP候选,A是怎么联系上他的? A 和 B 可以一直使用 WebRTC。

  3. 为什么C无法连接到B?或者A和C有什么不同?两者都是用ADSL,fiber modem转TPLINK路由器(PPPOE拨号+默认DHCP)到电脑,一模一样

谢谢。

经过进一步研究,C并没有使用ADSL。它实际上是一个写字楼提供的带有防火墙的网络。这就是为什么 C 不能连接 B 但 A 可以。

对不起,客户"thought"他们知道他们的网络细节。

感谢泰勒,你是对的。 WebRTC 工作只需要一个开放网络。

经过数小时的研究,我发现唯一的解决方案是 TURN 服务器。所以我认为这个问题现在可以结束了。