如何使用 Coturn 设置和配置 WebRTC TURN 服务器

如何使用 Coturn 设置和配置 WebRTC TURN 服务器

在本文中,您将使用 Coturn 设置您自己的 TURN 服务器,并使用用户名和密码保护它。您还将学习如何将域添加到您的 TURN 服务器并使用 Docker 运行服务器。

WebRTC 使用点对点连接来传输数据,但是如果两台 PC 之间无法直接连接,因为它们不在同一网络上或者 NAT 或某种防火墙存在问题,会发生什么情况?

TURN,代表 Traversal Using Relays around NAT,用于中继对等点之间的流量,即使它们不能直接连接。TURN 出于安全原因也很重要,因为您隐藏了客户的实际地址。

在本文中,您将使用 Coturn 设置您自己的 TURN 服务器,并使用用户名和密码保护它。您还将学习如何将域添加到您的 TURN 服务器并使用 Docker 运行服务器。

先决条件

在开始本指南之前,您需要具备以下条件:

  • 具有公共 IP 地址的 Linux 服务器
  • (可选):Docker 安装用于更直接的 TURN 服务器创建过程,无需在您的服务器上安装 Coturn
  • (可选):自定义域名

第 1 步 – 安装 Coturn

Coturn 是一个开源的 STUN 和 TURN 实现,它是免费的、高度可配置的并且受到社区的大力支持。

在本节中,您将在您的机器上安装 Coturn 并将该进程作为自动化系统守护进程启用。

首先,您将通过运行apt-get update命令将操作系统的存储库版本更新到最新版本。

sudo apt-get update -y

然后您可以使用以下命令继续安装 coturn。

sudo apt-get install coturn

如果您希望 Coturn 在您打开服务器时自动启动,您必须修改/etc/default/coturn文件。

sudo nano /etc/default/coturn

找到以下行并取消注释以将 Coturn 作为自动系统服务守护程序运行。

TURNSERVER_ENABLED=1

完成后,保存并退出文件。

您现在应该能够使用以下命令启动 coturn 服务。

systemctl start coturn

第 2 步 – 配置 Coturn

现在您已经启动并运行了 Coturn,是时候进行一些基本配置了,例如定义您的外部 IP 地址和添加基本身份验证。

在我们开始修改之前,建议首先制作一份原始配置的安全副本,这样如果出现问题您可以随时返回。

mv /etc/turnserver.conf /etc/turnserver.conf.backup

此命令会将原始配置文件从/etc/turnserver.conf重命名为/etc/turnserver.conf.backup

接下来,我们将在包含我们的配置的同一目录中创建一个空文件。

nano /etc/turnserver.conf

添加以下内容以定义您的 Coturn 服务器领域和服务器名称。根据您的需要替换占位符值。

# TURN server name and realm
realm=<DOMAIN>
server-name=<SERVER_NAME>

之后,添加external-ip键来定义服务器的 IP 地址和listening-ip键来指定 Coturn 服务器应该监听哪些 IP 地址(0.0.0.0 告诉服务器监听所有 IP 地址)。

# IPs the TURN server listens to
listening-ip=0.0.0.0

# External IP-Address of the TURN server
external-ip=IP_ADDRESS

接下来,您可以定义服务器将侦听的端口以及用于进一步配置的端口。

# Main listening port
listening-port=3478

# Further ports that are open for communication
min-port=10000
max-port=20000

然后您可以继续定义日志目录并启用详细日志记录模式。

# Use fingerprint in TURN message
fingerprint

# Log file path
log-file=/var/log/turnserver.log

# Enable verbose logging
verbose

最后,您可以使用用户lt-cred-mech密钥为您的 TURN 服务器启用身份验证。

# Specify the user for the TURN authentification
user=test:test123

# Enable long-term credential mechanism
lt-cred-mech

这些配置块将产生以下文件:

# TURN server name and realm
realm=DOMAIN
server-name=turnserver

# Use fingerprint in TURN message
fingerprint

# IPs the TURN server listens to
listening-ip=0.0.0.0

# External IP-Address of the TURN server
external-ip=IP_ADDRESS

# Main listening port
listening-port=3478

# Further ports that are open for communication
min-port=10000
max-port=20000

# Log file path
log-file=/var/log/turnserver.log

# Enable verbose logging
verbose

# Specify the user for the TURN authentification
user=test:test123

# Enable long-term credential mechanism
lt-cred-mech

# If running coturn version older than 4.5.2, uncomment these rules and ensure
# that you have listening-ip set to ipv4 addresses only.
# Prevent Loopback bypass https://github.com/coturn/coturn/security/advisories/GHSA-6g6j-r9rf-cm7p
#denied-peer-ip=0.0.0.0-0.255.255.255
#denied-peer-ip=127.0.0.0-127.255.255.255
#denied-peer-ip=::1

完成后,保存并退出文件。

您可以通过更改给定键的值或添加新的值来根据自己的需要进一步自定义配置。您可以参考原始配置,它为最重要的选项提供了必要的文档。

完成配置后,您可以重新启动 Coturn 服务器以应用更改。

sudo service coturn restart

第 3 步 – 测试 TURN 服务器

STUN 和 TURN 服务器的功能可以使用Trickle ICE进行测试。该工具通过创建具有您的 TURN 服务器信息的对等连接来试用您的 TURN 服务器功能,然后开始收集 WebRTC 会话的候选者。

如果收集到候选人,他们将显示在下面的文本框中。

现在开始在浏览器中打开网站并将您的 TURN 服务器信息添加到输入表单中。格式如下所示:

turn:TURN_IP:TURN_PORT

还要确保在相应字段中提供用户名和密码。

添加转向涓流

在填写有关您的 TURN 服务器的信息并使用“添加服务器”按钮将其添加到列表后,您可以通过单击“收集候选人”按钮继续运行测试。

收集候选人

您现在应该看到页面底部显示的测试结果类似于:

转测试结果

恭喜您现在已经成功设置并保护了您的 TURN 服务器,并准备好在您的应用程序中使用它。但是您仍然可以配置其他选项,例如添加域和使用 SSL 证书保护服务器,我们将在下一节中介绍这些选项。

您还可以使用 Docker 代替常规部署来部署 Coturn。docker 部署将使更改 Coturn 服务器的版本并将其部署在多台机器上变得更加容易,无论操作系统是什么。

第 4 步(可选)- 将域添加到 Coturn 服务器

现在您可以通过您的公共 IP 地址访问您的 TURN 服务器,是时候将您的域添加到 TURN 服务器并使用 LetsEncrypt 生成的 SSL 证书保护连接。

保护服务器还允许您从安全的 HTTPS 站点访问 TURN 服务器,如果没有证书,这是不可能的。

将 DNS 记录添加到您的域

首先,您将添加 DNS 记录,将您的域指向 TURN 服务器的 IP 地址。

DNS-记录-1

添加 DNS 记录并等待所需的时间,直到可以使用 DNS 查找找到记录后,您就可以继续了。

创建 SSL 证书

LetsEncrypts certbot 可用于快速生成免费的 SSL 证书,这些证书会在用完之前自动更新。

可以使用以下命令安装 Certbot:

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

成功安装 certbot 后,您可以使用以下命令生成证书。

sudo certbot certonly --standalone --preferred-challenges http 
    --deploy-hook "systemctl restart coturn" 
    -d <YOUR_DOMAIN>

在这里,我们请求一个独立的证书,并告诉 certbot 它应该在证书更新时自动重启 coturn。这将确保 TURN 服务器的证书始终是最新的,但缺点是所有正在进行的 TURN 连接都将被中断。

如果您不希望这种情况发生,您可以禁用证书的自动续订。

将 SSL 证书添加到您的配置

现在您已经生成了 SSL 证书,是时候将它添加到您的配置中了。为此,您需要添加三个参数:

# SSL certificates
cert=/etc/letsencrypt/live/<DOMAIN>/cert.pem
pkey=/etc/letsencrypt/live/<DOMAIN>/privkey.pem

# 443 for TURN over TLS, which can bypass firewalls
tls-listening-port=443

这三个参数与之前的配置相结合应该让你做到这一点。

# TURN server name and realm
realm=<DOMAIN>
server-name=<DOMAIN>

# Use fingerprint in TURN message
fingerprint

# IPs the TURN server listens to
listening-ip=0.0.0.0

# External IP-Address of the TURN server
external-ip=IP_ADDRESS

# Main listening port
listening-port=3478

# Further ports that are open for communication
min-port=10000
max-port=20000

# Log file path
log-file=/var/log/turnserver.log

# Enable verbose logging
verbose

# Specify the user for the TURN authentification
user=test:test123

# Enable long-term credential mechanism
lt-cred-mech

# SSL certificates
cert=/etc/letsencrypt/live/<DOMAIN>/cert.pem
pkey=/etc/letsencrypt/live/<DOMAIN>/privkey.pem

# 443 for TURN over TLS, which can bypass firewalls
tls-listening-port=443

# If running coturn version older than 4.5.2, uncomment these rules and ensure
# that you have listening-ip set to ipv4 addresses only.
# Prevent Loopback bypass https://github.com/coturn/coturn/security/advisories/GHSA-6g6j-r9rf-cm7p
#denied-peer-ip=0.0.0.0-0.255.255.255
#denied-peer-ip=127.0.0.0-127.255.255.255
#denied-peer-ip=::1

第 5 步(可选)- 使用 Docker 运行 TURN 服务器

如果你想在 Docker 上运行 Coturn 而不是将它安装在你的机器上并将其作为正常进程进行管理,你可以使用以下命令来实现。

docker run -d --network=host 
            -v $(pwd)/turnserver.conf:/etc/coturn/turnserver.conf 
        instrumentisto/coturn

在这里你运行官方的 coturn docker image instrumentisto/coturn并使用卷提供你的配置。使用主机网络选项是为了使容器网络与主机网络不隔离,因此不会获得自己的 IP 地址。

如果您不想使用network=host选项,您可以删除它并指定使用的端口。

另一种选择是在 docker-compose 文件中定义 Docker 配置,这样可以更轻松地多次运行相同的配置。

version: '3'
services:
  coturn_server:
    image: coturn/coturn:4.5.2
    restart: always
    network_mode: "host"
    volumes:
      - ./turnserver.conf:/etc/coturn/turnserver.conf

然后,您可以使用以下命令启动应用程序:

docker-compose up -d

资源

用于撰写本文的资源:

  • Coturn文档
  • https://docs.bigbluebutton.org/admin/setup-turn-server.html

结论

在本文中,您在 Linux 服务器上安装和配置了 Coturn,并使用WebRTC Trickle ICE工具测试了功能。

作者:Gabriel Tanner
原文链接:https://gabrieltanner.org/blog/turn-server/

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/14899.html

(0)

相关推荐

发表回复

登录后才能评论