在阿里云Ubuntu中使用coturn创建和配置您自己的STUN/TURN服务

2023-10-26

1. 前言

此前rtsp转webRTC的本地服务运行的不错,但是使用的某个免费stun服务突然被关停了,造成一些rtspToWebRTC的服务受到影响,因此,目前打算在我闲置的阿里云服务器上搭建stun/turn服务,我的域名xiaoyaoyou.xyz二级域名也一直只用在github page上,算是比较浪费,这里正好搭个stun/turn服务,后面看能否接到一些项目补贴一下。

2. 子域名设置

2.1 参考

参考这里:https://help.aliyun.com/document_detail/155782.html
在这里插入图片描述

所以我们添加设置一个三级域名:stun.xiaoyaoyou.xyz
按照帮助文档中的方法:
1 、 首先需要确认要设置什么子域名
例如主域名为dns-example.com, 要让访问者能够实现通过 www.dns-example.com 和 dns-example.com 这两个子域名进行访问
2、 登录 云解析DNS控制台
3、 在域名解析列表中,单击 域名 ,进入解析设置页面
4、 在解析设置页面, 单击 添加记录

  • 记录类型:选择 A记录
  • 主机记录:这里是您创建子域名的关键,例如需要创建 www.dns-example.com ,则在此处输入 www 即可; 如需创建dns-example.com,则在此处输入 @ 即可。
  • 解析线路:选择 默认 即可;
  • 记录值: 这里输入网站服务器的IP地址(如果您不知道,可以联系您的服务器提供商或者网站空间服务商获取)
  • TTL:选择 10 分钟即可。

2.2 创建单域名

我是直接在阿里云的app上操作的,按照上面的说法主机记录输入stun即可,最终如下:
在这里插入图片描述

3. 阿里云免费SSL证书申请及域名设置

3.1 参考

参考这里:https://help.aliyun.com/document_detail/156645.html
搜索数字证书管理服务->SSL证书->免费证书->购买20个即可:
在这里插入图片描述

之后创建证书并填写申请信息即可(免费的只支持单域名,无法带有通配符*.xxx.xxx):
在这里插入图片描述

添加域名解析并验证后即可提交审核:
在这里插入图片描述

之后等待审核通过即可,我这边很快就好了:
在这里插入图片描述

同样操作,再对turn.xiaoyaoyou.xyz进行一次(由于免费ssl证书只能单域名,因此需要申请两个证书,后面实际看只需要一个turn.xiaoyaoyou.xyz的就可以了):
在这里插入图片描述

域名解析(两个单子域名的,两个ssl证书的):
在这里插入图片描述

3.2 部署

部署(部署证书参考:https://help.aliyun.com/document_detail/98575.html):
在这里插入图片描述

3.3 生成公钥

之后会在部署位置生成私钥、证书、证书路径:
在这里插入图片描述

生成公钥的防范可以参考这里,后面公钥和证书会有用(https://www.fzb.me/2015-1-15-openssl-rsa.html):

openssl rsa -in turn_server_cert.key -pubout -out turn_server_public_key.pem

4. 阿里云Ubuntu上使用coturn创建和配置stun/turn服务

参考自:https://ourcodeworld.com/articles/read/1175/how-to-create-and-configure-your-own-stun-turn-server-with-coturn-in-ubuntu-18-04

4.1 为何需要stun/turn服务简洁

在最后几天,我们需要使用 PeerJS 和 Node.js 来实现一个基于 WebRTC 的视频会议应用程序。正如在开始使用这项技术的官方说明中提到的那样,大多数时候要使这样的应用程序工作,您将需要一种特殊的服务器来负责中继对等点之间的流量,因为有时直接套接字通常是客户端之间是不可能的(除非它们位于同一个本地网络上)。这被称为 TURN 服务器,它代表 Traversal Using Relay NAT,是一种用于中继网络流量的协议。
在本教程中,我们将向您解释如何从头开始安装和配置 coturn,以在 Ubuntu 中创建您自己的STUN/TURN 服务器。
如果没有stun服务被关停的顾虑,我们可以使用这里的免费的stun服务(也可以直接搜国内免费stun服务):
https://gist.github.com/mondain/b0ec1cf5f60ae726202e

4.2 要求

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

  • 一个 Ubuntu 服务器(在我们的例子中是 20)。
  • 知道您的服务器的公共 IP,在我们的例子中,我们将使用我们的服务器公共 IP 209.126.124.122。
  • 拥有一个域并有权访问 DNS 管理器,因为您需要创建 2 个子域(在我们的例子中为:turn.xiaoyaoyou.xyz、stun.xiaoyaoyou.xyz)。
  • 子域的 SSL 证书(最好是带有通配符的证书,例如*.ourcodeworld.com,免费的ssl证书只有单域名的,所以申请两个,也可以只申请turn的)。如果没有安全协议,您的服务器实现将无法完成,并且在使用 HTTPS 在您的 WebRTC 项目上使用它之后它将无法工作,所以要聪明并避免头痛,购买 SSL 证书或使用 LetsEncrypt 获得免费证书(阿国内的云厂商一般可以申请免费的SSL证书)。

这些要求上面我们已经达到了,接下来我们继续按照步骤进行。

4.3 安装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 的官方存储库以查看文档。

4.4 启用coturn

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

vim /etc/default/coturn

4.5 备份和创建配置文件

既然开启了turn server,就需要根据自己的需要修改配置文件了。请务必备份列出coturn所有可能选项的原始配置文件,以防在其他情况下需要恢复。您可以使用以下命令来执行此操作:

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

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

vim /etc/turnserver.conf

并在其上粘贴以下内容:

# /etc/turnserver.conf

#云主机内网IP
listening-ip=xxx
# 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
#云主机内网ip
relay-ip=xxx
#云主机公网IP
external-ip=xxx

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

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.
#ssl证书路径
cert=/ssl/turn_server_cert.pem
#ssl公钥路径
pkey=/ssl/turn_server_public_key.pem

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

这种基本配置通常可以满足大多数需求,但是如果您需要配置其他内容,请务必访问此处的配置属性的官方文档。不要忘记,在这种情况下,我们在文件中包含了一个测试用户,以便稍后测试 TURN 服务器,但是您可以随意删除它并在以后使用turnadmin.
至此,我们需要在服务器上配置的所有内容都应该完成。

4.6 在您的 DNS 管理器上创建 stun/turn DNS 记录

正如我们在文章开头提到的,您需要拥有一些将托管 STUN/TURN 服务器的域。您将需要使用 turn 和 stun 作为主机创建 2 个新的 A 记录,分别指向您服务器的公共 IP(这个我们在子域名设置时也已经做过了):
在这里插入图片描述

4.7 使用turnadmin创建一个长期用户

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

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

例如,要创建一个测试用户,我将运行以下命令(用户名 test、xiaoyaoyou.xyz 和密码 12345):

sudo turnadmin -a -u test -r xiaoyaoyou.xyz -p 12345

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

4.8 开启coturn服务器

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

systemctl start coturn

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

systemctl status coturn

应该输出类似于:
在这里插入图片描述

4.9 测试turn/stun服务器

幸运的是,有一个很棒的在线工具可以让你检查 STUN/TURN 服务器的功能。这个工具是Trickle ICE,一个 WebRTC 页面项目,用于测试常规 WebRTC 实现中的滴流 ICE 功能。它使用指定的 ICEServers 创建一个 PeerConnection(其中将包含我们最近实现的服务器的信息),然后开始为具有单个音频流的会话收集候选人。在收集候选人时,它们会显示在下面的文本框中,并显示候选人收集何时完成。
要开始使用,请在新的浏览器选项卡中打开工具网站并开始填写 ICE 服务器表格。在表单中,您需要分别提供 STUN 或 TURN URI 和凭据(仅适用于 TURN 服务器),如下所示:

//非加密端口
stun:stun.xiaoyaoyou.xyz:3478
turn:turn.xiaoyaoyou.xyz:3478
//加密端口
stun:stun.xiaoyaoyou.xyz:5349
turn:turn.xiaoyaoyou.xyz:5349

如您所见,URI 遵循protocol:domain:port. 表格将这样填写:
在这里插入图片描述

然后在页面底部的 ICE 选项中,按 Gather Candidates 按钮运行测试:
在这里插入图片描述

测试应该生成类似于:
在这里插入图片描述

就像网站这里说的(stun服务产生srflx,turn产生relay类型数据):
If you test a STUN server, it works if you can gather a candidate with type “srflx”. If you test a TURN server, it works if you can gather a candidate with type “relay”.

4.10 注意事项

  • 确保您的服务器已打开端口 5349 和 3478。

在这里插入图片描述

5. 最后

接下来我们或许会利用搭建好的stun/turn服务做一些小项目,比如开头提到的视频会议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在阿里云Ubuntu中使用coturn创建和配置您自己的STUN/TURN服务 的相关文章

随机推荐

  • 地址栏参数隐藏

    1 result type 的redirectAction改为chain 但要注意如果是登录方法 权限拦截器中就可能会影响 2 将参数放到作用域中 比如session 注意 1 这样的注释是没用的
  • 网络编程13——epoll事件模型:ET和LT模、掌握实现epoll的ET模式(非阻塞模式

    epoll是linux下多路复用IO select poll 的增强版本 它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率 因为它会复用文件描述符集合来传递结果为不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文
  • shiro认证机制及认证原理

    转自 shiro认证机制 认证原理 下文笔者将讲述shiro的认证机制及认证原理 如下所示 Shiro认证 验证用户身份的过程 在认证过程中 用户需要提交实体信息 Principals 和凭据信息 Credentials 以检验用户是否合法
  • 【玩转PointPillars】Ubuntu18.04上部署nutonomy/second.pytorch

    系统环境 Ubuntu18 04 cuda10 2 GeForce GTX 1650 今天部署的项目虽然名称上叫做second pytorch 实际上是PointPillars的作者fork自SECOND项目 并作了改动之后形成的Point
  • 词法分析器构造工具Flex基础学习

    Flex是一个生成词法分析器的工具 它可以利用正则表达式来生成匹配相应字符串的C语言代码 其语法格式基本同Lex相同 单词的描述称为模式 Lexical Pattern 模式一般用正规表达式进行精确描述 FLEX通过读取一个有规定格式的文本
  • SVN 服务器发送了意外的返回值(405 Method Not Allowed),在响应 “MKCOL” 的请求

    先转载一段网上说的解决方法 svn 405 Method Not Allowed 在响应 MKCOL 的请求 I managed to solve the problem Delete the parent s directory of t
  • jupyter lab的目录调整及默认浏览器设置为chrome

    Jupyter lab 的目录调整及默认浏览器设置为chrome 1 Jupyter 默认目录调整 首先要找到jupyter生成的配置文件 jupyter notebook config py 如果没有 在 anaconda prompt
  • 在Anaconda中快速安装OpenCV for Python

    一 下载和安装Anaconda Anaconda下载地址 Anaconda Individual EditionAnaconda s open source Individual Edition is the easiest way to
  • 【吐血整理】java程序员推荐轻薄笔记本

    正文 在写这个文章之前 我花了点时间 自己臆想了一个电商系统 基本上算是麻雀虽小五脏俱全 我今天就用它开刀 一步步剖析 我会讲一下我们可能会接触的技术栈可能不全 但是够用 最后给个学习路线 Tip 请多欣赏一会 每个点看一下 看看什么地方是
  • kali Linux自带firefox ESR设置代理

    1 打开kali的火狐浏览器 找到右上角的 三个杠 在点击 preferences 2 general gt network proxy gt setting 3 打开靶场和burp suite工具 注意火狐浏览器的代理是启动状态 靶场地址
  • 双写绕过的原理

    可以看到代码对key进行了过滤 那怎么办呢 可以构造kekeyy 当key被过滤掉时 剩下的字符自动拼接在一起 就形成了key 所以说 这样就可以拿下flag了
  • 梯度下降(学习笔记)

    应用 梯度下降法 Gradient Descent 又称最速下降法 是迭代法的一种 可用于求解机器学习算法的模型参数 即无约束优化问题 具体来讲可用来求解损失函数的最小值 也可求解最小二乘问题 分类 批量梯度下降 BGD 使用全部样本构建了
  • 职场大佬常用工具:Baklib,一款个人知识笔记管理神器

    又到了大家喜爱的好用工具推荐环节 今天我要给大家推荐一款个人知识笔记管理神器 不出你们所料 它就是Baklib 言归正传那Baklib究竟能干啥呢 引用官网的一句话来说 Baklib工具可以将大家日常工作学习中 存储到电脑 云盘上的文档 知
  • 06makefile学习之三个自动变量($@,$^,$<),模式规则和静态模式规则

    06makefile学习之三个自动变量 lt 和模式规则 以下为相关makefile的学习文章 01makefile学习之GCC编译的四个阶段 带编译阶段 汇编阶段 S c的区别 02makefile学习之makefile的基本原则 03m
  • Oracle存储过程处理大批量数据性能测试

    通过此次的大批量数据性能测试 还会间接的给大家分享一个知识点 Oracle存储过程如何处理List集合的问题 废话不多说了 老规矩直接上代码 首先要做的 想必大家应该猜到了 建表 create table tab 1 id varchar
  • linux内核中打印栈回溯信息 - dump_stack()函数分析

    简介 当内核出现比较严重的错误时 例如发生Oops错误或者内核认为系统运行状态异常 内核就会打印出当前进程的栈回溯信息 其中包含当前执行代码的位置以及相邻的指令 产生错误的原因 关键寄存器的值以及函数调用关系等信息 这些信息对于调试内核错误
  • 使用matlab修改单张或多张图像大小

    使用matlab修改单张或多张图像大小 版权声明 本文为CSDN博主 berlinpand 的原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net berlin
  • 黑马程序员 《ios零基础教程》--全局和局部变量、结构体、枚举 2014-4-2总结

    a href http edu csdn net target self ASP Net Unity开发 a a href http edu csdn net target self Net培训 a 期待与您交流 前几天出差有事儿没学习 今
  • ChatGPT-4.5:AI技术的最新进展

    文章目录 创作者 全栈弄潮儿 个人主页 全栈弄潮儿的个人主页 个人社区 欢迎你的加入 全栈弄潮儿的个人社区 专栏地址 AI大模型 OpenAI最新发布的GPT 4 在聊天机器人的功能上取得了显著的改进 虽然GPT 4仍处于早期阶段 但有传言
  • 在阿里云Ubuntu中使用coturn创建和配置您自己的STUN/TURN服务

    1 前言 此前rtsp转webRTC的本地服务运行的不错 但是使用的某个免费stun服务突然被关停了 造成一些rtspToWebRTC的服务受到影响 因此 目前打算在我闲置的阿里云服务器上搭建stun turn服务 我的域名xiaoyaoy