对于NAT,ICE,STUN,TURN

这些是开发人员必须十分理解的重要概念,能力应用WebRTC。这是上面有些问题将被解决:

  1. 什么是NAT?
  2. 什么是NAT穿透?
  3. 什么是ICE?
  4. 什么是STUN?
  5. 什么是TURN?
  6. 如何装置Coturn?
  7. 如何测试我的STUN / TURN服务器?
  8. 如何配置STUN / TURN?
  9. WebRTC故障排除
  10. 高级常识:NAT类型和NAT遍历

什么时候须要STUN和TURN?

NAT前面的每个WebRTC参与者都须要 STUN(可能还有 TURN)。尝试从 NAT前面进行连贯的所有对等方都须要“关上 ”本人的端口,这一过程称为 NAT遍历。这能够通过应用部署在NAT内部的 STUN服务器来实现。

STUN服务器配置为应用一系列UDP和TCP端口。在服务器的网络配置或平安组中,所有这些端口也应向所有流量凋谢。

如果要在NAT环境中装置Kurento(例如,如果服务器位于NAT防火墙前面),则还须要在/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini中配置内部STUN服务器。同样,位于NAT前面的所有浏览器客户端都须要应用RTCPeerConnection构造函数的iceServers字段配置STUN服务器详细信息。

比方:

Kurento Media Server及其应用程序服务器在云计算机中运行,对传入连贯没有任何NAT或端口限度,而浏览器客户端从可能受限制的NAT网络运行,该网络禁止在未“关上”任何端口的端口上进行传入连贯提前

浏览器客户端能够出于信令目标与Application Server通信,然而最终,大部分音频/视频通信是在浏览器的WebRTC引擎和KMS之间实现的。

在这种状况下,客户端可能将数据发送到KMS,因为其NAT将容许传出数据包。然而,KMS 无奈将数据发送到客户端,因为客户端的NAT已敞开,无奈接管传入的数据包。这能够通过配置客户端应用STUN服务器来解决。客户端的浏览器将应用此服务器关上NAT中的相应端口。实现此操作后,客户端当初能够从KMS接管音频/视频流:

此过程由客户端浏览器的ICE实现实现。

请留神,只有KMS自身也配置为应用STUN服务器,您也能够在NAT防火墙后部署KMS。

如何装置coturn

Coturn是STUN服务器和TURN中继,反对ICE协定所需的所有性能,并容许从NAT前面建设WebRTC连贯。

Coturn能够间接从Ubuntu软件包存储库装置:

sudo apt-get update && sudo apt-get install --no-install-recommends --yes \    coturn

要为WebRTC配置它,请依照下列步骤操作:

  1. 编辑/etc/turnserver.conf。

此示例配置是很好的第一步;它将与Coturn和Kurento Media Server一起用于WebRTC流时无效。然而,您可能须要依据须要进行更改:

# This server's external/public address, if Coturn is behind a NAT.# It must be an IP address, not a domain name.external-ip=<CoturnIp># STUN listener port for UDP and TCP.# Default: 3478.#listening-port=<CoturnPort># TURN lower and upper bounds of the UDP relay ports.# Default: 49152, 65535.#min-port=49152#max-port=65535# Uncomment to run server in 'normal' 'moderate' verbose mode.# Default: verbose mode OFF.#verbose# Use fingerprints in the TURN messages.fingerprint# Use long-term credential mechanism.lt-cred-mech# Realm used for the long-term credentials mechanism.realm=kurento.org# 'Static' user accounts for long-term credentials mechanism.user=<TurnUser>:<TurnPassword># Set the log file name.# The log file can be reset sending a SIGHUP signal to the turnserver process.log-file=/var/log/turnserver/turnserver.log# Disable log file rollover and use log file name as-is.simple-log

留神:

  • external-ip:是服务器的公网ip.(是ip不是域名!)
  • WebRTC还须要须要填:Fingerprint,lt-cred-mech和realm
  • user是受权应用的最根本的模式TURN中继性能。写下您想要的用户名和明码的字段<TurnUser>和<TurnPassword>
  • 其余参数能够依据须要进行调整。无关更多信息,请查看Coturn帮忙页面:
https://github.com/coturn/coturn/wiki/turnserverhttps://github.com/coturn/coturn/wiki/CoturnConfig残缺正文的示例配置文件:https://raw.githubusercontent.com/coturn/coturn/master/examples/etc/turnserver.conf
  1. 编辑文件/etc/default/coturn并设置

<pre>TURNSERVER_ENABLED=1
</pre>

因而,服务器将作为零碎服务守护程序主动启动。

如何测试STUN/TURN服务器

要测试您的STUN / TURN服务器是否失常运行,请关上Trickle ICE测试页面。在该页面中,请依照下列步骤操作:

  1. 删除默认状况下可能已填写的所有服务器。
  2. 填写您的STUN / TURN服务器详细信息。

仅测试STUN服务器(将不测试TURN中继):

stun:<StunServerIp>:<StunServerPort>

要同时测试STUN服务器和TURN中继:

turn:<TurnServerIp>:<TurnServerPort>

并同时填写TURN用户名和TURN明码。

  1. 单击增加服务器。列表中应该只有一个条目以及服务器详细信息。
  2. 单击“ 收集候选人”。如果您正在测试STUN ,请验证您是否取得该类型的候选人srflx。同样,如果要测试TURN ,则应取得类型srflx 和类型的候选relay。

如果短少任何预期的候选类型,则您的STUN / TURN服务器运行不失常,WebRTC将失败。查看您的服务器配置以及您的云提供商的网络设置。

kurernto如何设置STUN/TURN

`vim /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini`
stunServerAddress=(StunServerIp)stunServerPort=(StunServerPort)turnURL=myuser:mypassword@198.51.100.1:3478

以下端口应在防火墙或云计算机的平安组中关上

CoturnPort(默认值:3478)UDP和TCP。
49152-65535 UDP和TCP:依照RFC 5766,这些是TURN中继将用于替换媒体的端口。能够应用Coturnmin-port和max-port参数更改这些端口。

端口范畴必须在Coturn和Kurento Media Server之间匹配。查看文件/etc/turnserver.conf和/etc/kurento/modules/kurento/BaseRtpEndpoint.conf.ini,以验证这两个文件将应用同一组端口。

重启Coturn和Kurento服务器:

sudo service coturn restartsudo service kurento-media-server restart

接下来,公网上拜访就不会呈现近程的拜访不到状况了。对于NET/ICE/STUN/TURN/COTURN有一篇很好了解的文章在这里:https://blog.yasking.org/a/we...