使用Nextcloud Talk的时候,安装完Talk软件直接使用,经常会报错:
无法与至少一个参与者建立连接。你的场景可能需要一个 TURN 服务器。请请求你的管理员按照来设置一个。
根据官方文档所说:
Nextcloud Talk 的配置主要取决于你想要的使用方式:
Talk 尝试建立直接的点对点 (P2P)连接,因此在本地网络之外的连接上(在NAT或路由器之后),客户端不仅需要知道彼此的公共 IP,还需要知道参与者的本地 IP . 处理这个,是STUN服务器的工作。
由于 Nextcloud GmbH 为 Nextcloud Talk 预先配置了一个,因此在这种情况下无需执行任何其他操作。
但在许多情况下,尤其是与防火墙或对称 NAT结合使用时,即使在 STUN 服务器的帮助下,直接 P2P 连接也是不可能的。为此,需要另外配置一个所谓的TURN 服务器。
Nextcloud Talk 将首先尝试直接 P2P,如果需要使用 STUN 并作为最后的后备选择使用 TURN。因此,为了在所有可能的连接情况下最灵活并保证 Nextcloud Talk 实例的功能,您需要设置一个 TURN 服务器。
什么意思呢?Nextcloud Talk在建立视频和语音通话的时候,会尝试进行点对点连接,即视频和语音数据不会经过Nextcloud服务器。那么在国内大内网,层层NAT转换的情况下,大多数时候是没有公网IP的,那么Nextcloud便无法进行点对点连接,此时就需要一个TURN服务器进行网络代理,为用户中转数据。
注:本方法会极大消耗服务器流量,服务器带宽要高一点(因为通话各方的流量基本上都从服务器流过了,所以在人多的时候,流量会跑的很快,并且对服务器的网速要求也是很大的)
一、安装coTURN
按照官方文档的要求,我们登录到服务器命令行界面,安装coTURN作为TURN服务器(以Ubuntu为例):
sudo apt install coturn
然后添加coTURN作为自启动程序:
sudo sed -i '/TURNSERVER_ENABLED/c\TURNSERVER_ENABLED=1' /etc/default/coturn
检查是否开启成功:
ls -l /lib/systemd/system/coturn.service
服务器提示:
-rw-r--r-- 1 root root 584 Dec 14 2020 /lib/systemd/system/coturn.service
则开启成功。
二、配置coTURN服务器
首先先给coTURN服务器运行权限(因为涉及到某些操作,如通过TLS进行访问,则需要证书文件,非特权用户无法访问)
systemctl edit coturn
在打开的编辑器中在文件中添加以下内容:
[Service]
User=root
Group=root
接下来来修改一下配置文件:
可以先通过whereis turnserver.conf命令来寻找该配置文件(一般在/etc/turnserver.conf)。找到后进行编辑:
sudo nano turnserver.conf
根据官方文档,需要修改的配置如下(请一个一个找到后取消注释并修改(nano编辑器善用Ctrl + W搜索)):
listening-port=你选择的通信端口(记得放行防火墙!!!)(默认3478)
fingerprint
use-auth-secret
static-auth-secret=你选择的密钥
realm=服务器域名(不带www)
total-quota=0
bps-capacity=0
stale-nonce=600
no-multicast-peers
#请注意,如果你想通过TLS进行连接,请同时修改以下几行:
cert=/usr/local/etc/turn_server_cert.pem(填入自己的域名证书的位置)
pkey=/usr/local/etc/turn_server_pkey.pem(同上)
接着进行保存。
三、配置客户端
使用管理员身份登录Nextcloud,打开Nextcloud的设置页面,选择通话:

添加一个TURN服务器:

填入服务器地址:通信端口、密钥,点击右边测试按钮进行测试。显示√则表示设置完成。
接下来就可以测试不在局域网环境下的通话是否正常。