共计 3501 个字符,预计需要花费 9 分钟才能阅读完成。
对于 NAT,ICE,STUN,TURN
这些是开发人员必须十分理解的重要概念,能力应用 WebRTC。这是上面有些问题将被解决:
- 什么是 NAT?
- 什么是 NAT 穿透?
- 什么是 ICE?
- 什么是 STUN?
- 什么是 TURN?
- 如何装置 Coturn?
- 如何测试我的 STUN / TURN 服务器?
- 如何配置 STUN / TURN?
- WebRTC 故障排除
- 高级常识: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 配置它,请依照下列步骤操作:
- 编辑 /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/turnserver
https://github.com/coturn/coturn/wiki/CoturnConfig
残缺正文的示例配置文件:https://raw.githubusercontent.com/coturn/coturn/master/examples/etc/turnserver.conf
- 编辑文件 /etc/default/coturn 并设置
<pre>TURNSERVER_ENABLED=1
</pre>
因而,服务器将作为零碎服务守护程序主动启动。
如何测试 STUN/TURN 服务器
要测试您的 STUN / TURN 服务器是否失常运行,请关上 Trickle ICE 测试页面。在该页面中,请依照下列步骤操作:
- 删除默认状况下可能已填写的所有服务器。
- 填写您的 STUN / TURN 服务器详细信息。
仅测试 STUN 服务器(将不测试 TURN 中继):
stun:<StunServerIp>:<StunServerPort>
要同时测试 STUN 服务器和 TURN 中继:
turn:<TurnServerIp>:<TurnServerPort>
并同时填写 TURN 用户名和 TURN 明码。
- 单击增加服务器。列表中应该只有一个条目以及服务器详细信息。
- 单击“收集候选人”。如果您正在测试 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 restart
sudo service kurento-media-server restart
接下来,公网上拜访就不会呈现近程的拜访不到状况了。对于 NET/ICE/STUN/TURN/COTURN 有一篇很好了解的文章在这里:https://blog.yasking.org/a/we…