在 Linux 服务器搭建Coturn即ICE/TURN/STUN实现P2P(点对点)直连
首先,通过 SSH 登录到你的云服务器,并更新系统软件包:
sudo apt-get update
sudo apt-get upgrade -y
然后,安装 Coturn 服务器。在 Ubuntu 上,这非常简单:
sudo apt-get install coturn -y
Coturn 默认使用 3478
端口进行 STUN 和 TURN 的侦听,并使用 49152
到 65535
之间的端口范围进行数据中继。你需要确保你的服务器防火墙和云服务商的安全组都开放了这些端口。
在云服务商的安全组中,添加入站规则:
-
协议:UDP
-
端口:
3478
-
协议:TCP
-
端口:
3478
-
协议:UDP
-
端口范围:
49152-65535
在服务器的防火墙中(如果启用),运行以下命令开放端口:
sudo ufw allow 3478/udp
sudo ufw allow 3478/tcp
sudo ufw allow 49152:65535/udp
sudo ufw enable # 启用ufw防火墙
配置 Coturn 服务器
Coturn 的配置文件通常位于 /etc/turnserver.conf
。你需要编辑这个文件来设置你的服务。
打开配置文件:
sudo nano /etc/turnserver.conf
在文件中添加或修改以下关键配置项:
# 侦听的公网IP,如果有多个IP,可以指定
# listening-ip=0.0.0.0 # 服务器的公网IP地址,这是最关键的配置,请替换成你的服务器IP
external-ip=你的服务器公网IP# 域名,用于访问TURN服务时的realm。请替换成你自己的域名或公网IP
realm=your.domain.com# 用户认证方式,推荐使用长效凭证机制
# lt-cred-mech
no-stun-backward-compatibility# 侦听端口,默认是3478,如果需要可修改
listening-port=3478# 关闭loopbackpeers,防止数据包回环
no-loopback-peers# 日志配置
log-file=/var/log/turnserver/turnserver.log# 用户配置
# 格式为 user=username:password
# 这是最简单的认证方式,推荐在生产环境中使用动态凭证机制
user=testuser:testpass
注意: 在配置文件中,#
开头的行是注释。请将 你的服务器公网IP
和 your.domain.com
替换为你的实际信息。user
字段的用户名和密码可以自定义。
启用 Coturn 服务
默认情况下,Coturn 服务可能不会自动启动。你需要编辑 /etc/default/coturn
文件来启用它。
sudo nano /etc/default/coturn
找到 TURNSERVER_ENABLED
这行,将其从 1
修改为 1
并保存:
TURNSERVER_ENABLED=1
现在,你可以启动 Coturn 服务了:
sudo service coturn start
为了确保服务已经成功启动,你可以查看其状态:
sudo service coturn status
使用一个在线的 ICE 测试工具来验证你的服务器是否工作正常。
-
打开 Trickle ICE 网站。
-
在 STUN or TURN URI 框中,输入:
-
如果你配置了域名:
turn:your.domain.com:3478
-
如果你只使用IP:
turn:你的服务器公网IP:3478
-
-
在 TURN username 中输入:
testuser
-
在 TURN password 中输入:
testpass
-
点击 Add Server,然后点击 Gather candidates。
如果你的配置正确,你会在结果中看到 srflx
和 relay
类型的候选地址,这表明 STUN 和 TURN 服务都已成功工作。
在你的应用程序中,你需要配置ICE服务器信息。通常,这会是一个 iceServers
数组,其中包含你的 Coturn 服务器信息,例如:
const iceServers = {iceServers: [{urls: 'stun:你的服务器公网IP:3478'},{urls: 'turn:你的服务器公网IP:3478',username: 'testuser',credential: 'testpass'}]
};
通过以上步骤,你就成功搭建了一个功能完整的 P2P/TURN/STUN 服务器,为你的实时通信应用提供了可靠的连接支持。