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


    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
    
    • 1

    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
    
    • 1

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

    sudo apt-get install coturn
    
    • 1

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

    systemctl stop coturn
    
    • 1

    您现在可以跟进本教程的其余部分。有关 coturn 项目的更多信息,请务必访问Github 的官方存储库以查看文档。

    4.4 启用coturn

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

    vim /etc/default/coturn
    
    • 1

    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
    
    • 1
    • 2

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

    vim /etc/turnserver.conf
    
    • 1

    并在其上粘贴以下内容:

    # /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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    这种基本配置通常可以满足大多数需求,但是如果您需要配置其他内容,请务必访问此处的配置属性的官方文档。不要忘记,在这种情况下,我们在文件中包含了一个测试用户,以便稍后测试 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
    
    • 1

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

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

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

    4.8 开启coturn服务器

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

    systemctl start coturn
    
    • 1

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

    systemctl status coturn
    
    • 1

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如您所见,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服务做一些小项目,比如开头提到的视频会议。

  • 相关阅读:
    【深基16.例3】二叉树深度
    「以太坊」性能测试教程
    每日练习-8
    树莓派4B开发之四树莓派3B安装Miniconda
    js:如何使用JavaScript函数小作业
    内存卡数据恢复,5 个免费好用的数据恢复方法工具全解
    第2-3-5章 删除附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss
    JVM堆内存释放不及时问题
    [计算机网络] VPN技术
    java list集合运算
  • 原文地址:https://blog.csdn.net/weixin_39510813/article/details/125886341