个性化阅读
专注于IT技术分析

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

点击下载

本文概述

在最后几天, 我们需要使用带有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证书(最好是带有通配符的证书, 例如* .ourcodeworld.com)。没有安全协议, 你的服务器实现将无法完成, 并且在HTTPS的WebRTC项目中使用它后将无法正常工作, 因此, 请保持聪明并避免麻烦, 购买SSL证书或通过LetsEncrypt获得免费证书。

话虽如此, 让我们开始学习本教程!

1.安装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上的官方存储库以检查文档。

2.启用翻转

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

nano /etc/default/coturn

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

TURNSERVER_ENABLED=1

保存更改并继续下一步。

3.备份并创建配置文件

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

# Move the original turnserver configuration file to a backup in the same directory
mv /etc/turnserver.conf /etc/turnserver.conf.original

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

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

# We will use the longterm authentication mechanism, but if
# you want to use the auth-secret mechanism, comment lt-cred-mech and 
# uncomment use-auth-secret
# Check: https://github.com/coturn/coturn/issues/180#issuecomment-364363272
#The static auth secret needs to be changed, in this tutorial
# we'll generate a token using OpenSSL
# use-auth-secret
# static-auth-secret=replace-this-secret
# ----
# If you decide to use use-auth-secret, After saving the changes, change the auth-secret using the following command:
# sed -i "s/replace-this-secret/$(openssl rand -hex 32)/" /etc/turnserver.conf
# This will replace the replace-this-secret text on the file with the generated token using openssl. 

# 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创建它。

到此为止, 我们需要在服务器上配置的所有内容都应该完成。

4.在你的DNS管理器上创建眩晕/打开DNS记​​录

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

创建STUN / TURN DNS记录GoDaddy域

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

5.使用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文件上创建了一个用户, 该用户使用纯文本将用户名设置为guest, 密码为somepassword。

6.开启coturn服务器

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

systemctl start coturn

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

systemctl status coturn

哪个应该输出类似于:

Coturn Service守护程序Ubuntu 18.04

7.测试TURN / STUN服务器

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

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

stun:stun.ourcodeworld.com:5349

turn:turn.ourcodeworld.com:5349

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

Stun / Turn服务器测试Trickle ICE WebRTC

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

在线测试TURN / STUN服务器

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

结果测试WebRTC Trickle ICE服务器

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

笔记

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

编码愉快❤️!

赞(2)
未经允许不得转载:srcmini » 如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN/TURN服务器

评论 抢沙发

评论前必须登录!