使用特定端口进行webRTC

Arm*_*ter 7 port stun webrtc

使用webRTC创建对等音频连接时,如果用户位于路由器后面,我们使用的STUN服务器将返回公共IP.现在在ICE对象中,我可以看到rport始终在50000之间.

有没有办法使用特定端口,以便用户不必打开所有这些端口?

sel*_*bie 13

有没有办法使用特定端口,以便用户不必打开所有这些端口?

我觉得你有误会.STUN和ICE(包括其WebRTC衍生物)的重点在于避免任何人必须在其NAT上打开端口.而是,STUN和ICE动态打开端口.

这是它的工作原理(在一个非常简短的描述中).

  1. 客户端在随机端口上打开套接字(例如50001)

  2. 联系STUN服务器使用该套接字发现此套接字的外部IP:端口映射.(例如192.168.1.2:50001映射到1.2.3.4:50001).端口不一定必须在内部和外部地址之间匹配,但它们通常都会匹配,因此我将继续使用此示例.

  3. 通过外部机制(SIP,XMPP,Jingle,带字符串的杯子),交换两个节点的候选地址列表.这包括收集的所有已知内部和外部地址(例如192.168.1.2:50001和1.2.3.4:50001).

  4. 使用在步骤1中打开的相同套接字,双方在彼此之间直接发送(STUN)消息(UDP分组).第一对消息可能被路由器/防火墙阻止.但是因为一方向远程地址发起了一个出站数据包,所以允许来自该地址的后续数据包重新进入.这称为"打孔步骤".因此,端口是动态打开的,而路由器不需要任何特定配置.

希望这可以帮助.

  • 我懂了。但除非我手动打开路由器上的端口,否则 webRTC 将无法工作。这是数百万人使用的标准 FritzBox 路由器,我不认为我有什么花哨的设置。如果我自己不打开端口,STUN 将无法工作(我看到 ICE 候选者的内部和外部地址,但通信无法进行)并且它会退回到 TURN(然后可以工作)。如果端口打开,STUN 就可以工作,不需要 TURN。如果您知道这是为什么 - 我将非常感激。 (3认同)
  • 这里需要注意的是入站出站端口之间的区别。端口应该是开放的出站,这就是第 1 步的工作方式。如果出站端口被阻塞,它将不起作用,打孔也不起作用。 (2认同)

Aki*_*Aki 6

除非您在自己的应用程序中使用 webrtc API,否则您无法以编程方式进行。浏览器将从本地范围中选择特定的本地端口;然后它会在 SDP 和 ICE 候选人信息中告知您有关他们的信息。

STUN 服务器仅帮助发现客户端是否位于 NAT/防火墙后面;然后 ICE 使用此信息建立点对点连接。

我听说某处可能有一种方法可以通过 Chrome 策略模板(企业用来限制 Chrome 设置)来控制该端口范围 - http://www.chromium.org/administrators/policy-templates。可能值得研究一下...