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):
4. 阿里云Ubuntu上使用coturn创建和配置stun/turn服务
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 存储库更新到其最新版本:
然后,使用以下命令安装 coturn 包:
这将在您的服务器中安装 coturn TURN 项目,这是 TURN 和 STUN 服务器的免费开源实现。请务必在使用以下命令安装软件包后停止服务,因为安装完成后它将自动启动:
您现在可以跟进本教程的其余部分。有关 coturn 项目的更多信息,请务必访问Github 的官方存储库以查看文档。
4.4 启用coturn
安装完成后,需要在coturn的配置文件中启用TURN服务器。为此,请取消注释文件TURNSERVER_ENABLED中的属性/etc/default/coturn。您可以使用 vim 从终端编辑文件:
4.5 备份和创建配置文件
既然开启了turn server,就需要根据自己的需要修改配置文件了。请务必备份列出coturn所有可能选项的原始配置文件,以防在其他情况下需要恢复。您可以使用以下命令来执行此操作:
这基本上会重命名文件。然后,继续在同一目录中创建配置文件:
并在其上粘贴以下内容:
这种基本配置通常可以满足大多数需求,但是如果您需要配置其他内容,请务必访问此处的配置属性的官方文档。不要忘记,在这种情况下,我们在文件中包含了一个测试用户,以便稍后测试 TURN 服务器,但是您可以随意删除它并在以后使用turnadmin.
至此,我们需要在服务器上配置的所有内容都应该完成。
4.6 在您的 DNS 管理器上创建 stun/turn DNS 记录
正如我们在文章开头提到的,您需要拥有一些将托管 STUN/TURN 服务器的域。您将需要使用 turn 和 stun 作为主机创建 2 个新的 A 记录,分别指向您服务器的公共 IP(这个我们在子域名设置时也已经做过了):
4.7 使用turnadmin创建一个长期用户
Turnadmin包含在 coturn 的默认软件包中,此应用程序是一个 TURN 中继管理工具,可让您管理您的turn/stun服务器的用户。客户端需要凭据才能连接到您的转向服务器,因此您可以像这样注册它们:
例如,要创建一个测试用户,我将运行以下命令(用户名 test、xiaoyaoyou.xyz 和密码 12345):
请注意,我们之前在文件上创建了一个用户,/etc/turnserver.conf使用纯文本将用户名设置为admin和密码admin。
4.8 开启coturn服务器
创建用户并正确配置 coturn 后,您将能够启动服务,以便客户端可以连接到它。使用以下命令继续初始化服务:
这将在服务器中启动 coturn 的服务。您可以使用以下命令检查服务的状态:
应该输出类似于:
4.9 测试turn/stun服务器
幸运的是,有一个很棒的在线工具可以让你检查 STUN/TURN 服务器的功能。这个工具是Trickle ICE,一个 WebRTC 页面项目,用于测试常规 WebRTC 实现中的滴流 ICE 功能。它使用指定的 ICEServers 创建一个 PeerConnection(其中将包含我们最近实现的服务器的信息),然后开始为具有单个音频流的会话收集候选人。在收集候选人时,它们会显示在下面的文本框中,并显示候选人收集何时完成。
要开始使用,请在新的浏览器选项卡中打开工具网站并开始填写 ICE 服务器表格。在表单中,您需要分别提供 STUN 或 TURN URI 和凭据(仅适用于 TURN 服务器),如下所示:
如您所见,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。
- 如果您在 NAT 后面,例如使用 Amazon EC2 实例,请务必在配置文件中配置外部 IP,就像 Stack Overflow 中的这个问题中提到的那样。
5. 最后
接下来我们或许会利用搭建好的stun/turn服务做一些小项目,比如开头提到的视频会议。