本文档介绍如何在 homeserver 上启用 VoIP 中继(TURN)。
palpo Matrix homeserver 支持通过 TURN server REST API 集成 TURN 服务器。这允许 homeserver 通过与 TURN 服务器共享的密钥生成可用的 TURN 服务器凭据。
本文档以 coturn 服务器为例进行配置说明。
要使 TURN 中继正常工作,TURN 服务必须部署在具有公网 IP 的服务器/端点上。
如果 TURN 部署在 NAT 后面,则需要端口转发,并且 NAT 网关必须有公网 IP。即使配置正确,NAT 也可能导致问题,通常并不推荐。
之后,homeserver 还需要进一步配置。
你的 homeserver 配置文件有 [turn]
部分用于 TURN 服务器配置。
例如,以下是 matrix.org
的相关配置片段。turn_uris
适用于监听默认端口、无 TLS 的 TURN 服务器。
更新 homeserver 配置后,需重启 palpo:
然后重载客户端(或等待一小时自动刷新设置)。
coturn 是免费开源的 TURN/STUN 服务器实现。TURN 服务器是 VoIP 媒体流量 NAT 穿透服务器和网关。
TURN 守护进程 coturn
可通过多种方式安装,如包管理器或源码编译。
直接安装 debian 包:
这会安装并启动名为 coturn
的 systemd 服务。
从 github 最新发布页 下载源码,解压并进入目录。
配置编译:
如需 libevent2
,请按系统推荐方式安装。数据库支持可忽略。
编译并安装:
创建 compose.yml
文件,添加 coturn 配置:
然后运行:
更多安装细节见 官方文档。
编辑 /etc/turnserver.conf
,主要配置如下:
static-auth-secret
可用 pwgen
生成:
realm
必须指定,通常设为你的服务器名。
建议配置 coturn 日志输出到 syslog:
或配置为写入日志文件,详见 coturn 示例配置。
安全建议,最小配置如下:
如需支持 TLS/DTLS,添加如下配置:
若使用 Let's Encrypt 证书,Element Android/iOS 可能不支持,建议用 ZeroSSL。
防火墙需放行 TURN 端口(默认 3478、5349,UDP relay 49152-65535)。
若 TURN 在 NAT 后,需配置 external-ip
:
可选:限制监听本地 IP:
支持 IPv6 时,分别配置 IPv4/IPv6。
重启 turn 服务器:
Debian 包或 systemd:
源码安装:
常见症状:不同网络间通话卡在“正在连接”。排查建议:
检查防火墙是否放行 TURN 端口(3478、5349,UDP relay 49152-65535)。
尝试仅启用非加密 TCP/UDP 监听(WebRTC 媒体流始终加密)。
某些 WebRTC 实现(如 Chrome)对 IPv6 支持不佳,可移除 AAAA 记录,仅用 IPv4。
NAT 情况下,确保端口转发和 external-ip 配置正确。
启用 coturn 日志 verbose
,或 eturnal 的 debug 日志。
浏览器端可用 chrome://webrtc-internals/
或 Firefox 的 about:webrtc 查看连接日志。
可用 https://test.voip.librepush.net/ 测试 Matrix TURN 配置,或用 https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ 测试 TURN 服务器。
生成测试用用户名/密码可用如下 shell 命令:
临时配置 coturn 静态用户名/密码:
修改配置后需重启 coturn,测试完请恢复原配置。
如 TURN 配置正确,测试结果应至少有一个 relay
条目。