如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN / TURN服务器

如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN / TURN服务器

如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN / TURN服务器

随着疫情的影响,线上办公及线上会议的app及应用越来越多,我们需要使用带有PeerJS和Node.js的基于WebRTC的视频会议应用程序。正如使用该技术的正式说明中提到的那样,在大多数情况下,要使此类应用程序正常工作,您将需要一种特殊的服务器来负责在同级之间中继通信,因为有时通常使用直接套接字客户端之间是不可能的(除非它们位于同一本地网络上)。这称为TURN服务器,代表使用中继NAT进行遍历,并且是用于中继网络流量的协议。

由于找不到免费的TURN服务器非常困难,因为没有服务器,我们最终实现了自己的STUN / TURN服务器,并希望与您分享我们如何实现它。在本教程中,我们将向您介绍如何从头开始安装和配置coturn,以在Ubuntu 18.04中创建自己的STUN / TURN服务器。

一、安装条件

为了成功实施本教程,您将必须具备以下条件:

一个Ubuntu服务器(在我们的例子中是18.04)。
知道您服务器的公共IP,在本例中,我们将使用服务器的公共IP 209.126.124.122。
拥有一个域并可以访问DNS管理器,因为您将需要创建2个子域(ourcodeworld.com在我们的示例中,该域将被托管在goDaddy上)。
子域的SSL证书(最好是带有通配符的证书,例如*.bfw.wiki)。没有安全协议,您的服务器实现将无法完成,并且在HTTPS的WebRTC项目中使用它后将无法正常工作,因此,请保持聪明并避免麻烦,购买SSL证书或通过LetsEncrypt获得免费证书。
话虽如此,让我们开始学习本教程!

二、安装coturn

要实现自己的STUN / TURN服务器,我们将依靠Coturn项目。Coturn是VoIP和WebRTC的TURN和STUN服务器的免费开源实现。该项目是从rfc5766-turn-server项目(https://code.google.com/p/rfc5766-turn-server/)演变而来的。有许多新的高级TURN规范,这些规范远远超出了原始RFC 5766文档。该项目将rfc5766-turn-server的代码作为启动器,并为其添加了新的高级功能。

在继续安装coturn之前,请确保使用以下命令将apt-get存储库更新到最新版本:

sudo apt-get -y update

然后,使用以下命令安装coturn软件包:

sudo apt-get install coturn

这将在您的服务器中安装coturn TURN项目,这是TURN和STUN服务器的免费开源实现。请确保使用以下命令在安装软件包后停止该服务,因为安装完成后它将自动启动:

systemctl stop coturn

现在,您将可以继续学习本教程的其余部分。有关coturn项目的更多信息,请确保访问Github上的官方存储库以检查文档。

二、启用翻转

安装后,您将需要在coturn的配置文件中启用TURN服务器。为此,请取消注释文件中的TURNSERVER_ENABLED属性/etc/default/coturn。您可以使用nano从终端编辑文件:

nano /etc/default/coturn

确保文件内容具有未注释的属性,如下所示:

TURNSERVER_ENABLED=1

保存更改并继续下一步。

三、备份并创建配置文件

现在启用了转弯服务器,您需要根据需要修改配置文件。如果需要恢复其他版本,请确保备份列出了coturn所有可能选项的原始配置文件。您可以使用以下命令来执行此操作:

# Move the original turnserver configuration file to a backup in the same directory

sudo turnadmin -a -u brucewayne -r ourcodeworld.com -p 12345

这将基本上重命名该文件。然后,继续在同一目录中创建配置文件:

nano /etc/turnserver.conf

并在其上粘贴以下内容:

# /etc/turnserver.conf

# STUN server port is 3478 for UDP and TCP, and 5349 for TLS.
# Allow connection on the UDP port 3478
listening-port=3478
# and 5349 for TLS (secure)
tls-listening-port=5349

# Require authentication
fingerprint
lt-cred-mech

# The static auth secret needs to be changed, in the tutorial
# we'll generate a token using OpenSSL
use-auth-secret
static-auth-secret=replace-this-secret

# Specify the server name and the realm that will be used
# if is your first time configuring, just use the domain as name
server-name=ourcodeworld.com
realm=ourcodeworld.com

# Important: 
# Create a test user if you want
# You can remove this user after testing
user=guest:somepassword

total-quota=100
stale-nonce=600

# Path to the SSL certificate and private key. In this example we will use
# the letsencrypt generated certificate files.
cert=/usr/local/psa/var/modules/letsencrypt/etc/live/ourcodeworld.com/cert.pem
pkey=/usr/local/psa/var/modules/letsencrypt/etc/live/ourcodeworld.com/privkey.pem

# Specify the allowed OpenSSL cipher list for TLS/DTLS connections
cipher-list="ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"

# Specify the process user and group
proc-user=turnserver
proc-group=turnserver


此基本配置通常可满足大多数需求,但是如果您需要配置其他内容,请确保在此处访问配置属性的官方文档。别忘了在这种情况下,我们在文件中包括了一个测试用户,以便以后测试TURN服务器,但是您可以随意删除它,并稍后使用创建它turnadmin。

保存更改后,使用以下命令更改auth-secret:

sed -i "s/replace-this-secret/$(openssl rand -hex 32)/" /etc/turnserver.conf

这将replace-this-secret使用openssl将文件上的文本替换为生成的令牌。到此为止,我们需要在服务器上配置的所有内容都应该完成。

四、在您的DNS管理器上创建眩晕/打开DNS记​​录

如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN / TURN服务器

正如我们在本文开头所提到的,您需要拥有将托管STUN / TURN服务器的某些域。您将需要使用turn和stun作为主机分别指向服务器的公共IP来创建2条新的A记录:

创建STUN / TURN DNS记录GoDaddy域

我们的注册商是GoDaddy,他们提供DNS管理系统,因此我们可以轻松地通过表格创建它们。在注册子域并等待适当的时间以便可以通过DNS查找找到它们之后,您可以继续下一步。

五、使用turnadmin创建一个长期用户

Coturn的默认软件包中包含Turnadmin,此应用程序是TURN中继管理工具,可让您管理转向/眩晕服务器的用户。客户端将需要凭据才能连接到您的转弯服务器,因此您可以像这样注册它们:

sudo turnadmin -a -u USERNAME -r REALM -p PASSWORD

例如,要创建测试用户,我将运行以下命令(用户名brucewayne,领域ourcodeworld.com和密码12345):

sudo turnadmin -a -u brucewayne -r ourcodeworld.com -p 12345

请注意,我们之前在/etc/turnserver.conf文件上使用纯文本将用户名设置为username guest和password时创建了一个用户somepassword。

六、开启coturn服务器

创建用户并正确配置Coturn之后,您将能够启动服务,以便客户端可以连接到该服务。使用以下命令继续服务的初始化:

systemctl start coturn

这将启动服务器中的coturn服务。您可以使用以下命令检查服务的状态:

systemctl status coturn

哪个应该输出类似于:
如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN / TURN服务器

Coturn Service守护程序Ubuntu 18.04

七、测试TURN / STUN服务器

幸运的是,有一个很棒的在线工具,可让您检查STUN / TURN服务器的功能。该工具是Trickle ICE,这是一个WebRTC页面项目,可在常规WebRTC实现中测试tests流ICE功能。它使用指定的ICEServers创建PeerConnection(将包含我们最近实现的服务器的信息),然后开始使用单个音频流为会话收集候选人。收集候选人后,它们会显示在下面的文本框中,并在候选人收集完成时显示提示。

要开始使用,请在新的浏览器标签中打开工具网站,然后开始填写ICE服务器表单。在表单中,您将需要分别向STUN或TURN URI提供凭据(仅用于TURN服务器),如下所示:

stun:stun.ourcodeworld.com:5349
turn:turn.ourcodeworld.com:5349

如您所见,URI遵循的模式protocol:domain:port。表单将像这样填写:

如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN / TURN服务器


Stun / Turn服务器测试Trickle ICE WebRTC

然后,在页面底部的ICE选项中,按“收集候选者”按钮运行测试:

如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN / TURN服务器


在线测试TURN / STUN服务器

测试应生成类似于以下内容的内容:

如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN / TURN服务器


结果测试WebRTC Trickle ICE服务器

请注意,发生这种情况是因为该工具在最新的浏览器中存在一个错误,但是只要您能够一次又一次地按下收集候选者(因此收集候选者按钮不会阻塞)来重新运行测试,就可以了STUN / TURN服务器。

注意
确保服务器打开了端口5349和3478。
如果您在NAT之后(例如使用Amazon EC2实例),请确保在配置文件中配置外部IP,如Stack Overflow中此问题所述。

{{collectdata}}

网友评论0

阿里云香港主机,免备案大优惠 打开浏览器开发html,体验云开发的乐趣bfweditor 打开浏览器即可开发php,bfwstudio
其他文章