部署文档

配置 TURN 中继实现跨网络通话与传输

跨网段通话与传文件失败的根因,多是没有部署中继。

最后更新:2026-10-06

什么时候需要 TURN 中继

同一局域网内一般无需中继。若客户端不在同一网络,或处于公司、校园、酒店这类只放行少数端口的严格网络下,语音视频或文件传输连不上,就需要部署 TURN 中继。

  • 局域网内互通:不需要中继
  • 跨网络 / 严格防火墙:需要中继
  • 两个服务都使用 host 网络,中继必须监听宿主机端口并对外宣告客户端可达的地址

用自带的中继 Compose 启动

部署包自带一个带中继的 Compose 文件,用它启动即可(主服务 + coturn 中继容器)。它与基础版 Compose 二选一,不要同时运行。

docker compose -f docker-compose-coturn.yaml up -d

放行端口

需要在宿主机防火墙或云安全组放行以下端口:

  • 3478 TCP、UDP:TURN / STUN 主端口
  • 49152-51199 UDP:媒体中继端口段
  • 443 TCP:回退端口,仅启用时(供只放行 443 的严格网络使用)

在管理后台启用并自检

无需手工修改配置文件,也无需自己编造密钥。登录管理后台 →「系统设置」→「TURN 中继」,打开开关并保存即可,其余项已自动填好。

  • TURN 地址:已按访问管理后台的地址自动填好;客户端从别的网络访问时,填客户端能访问到的地址
  • REST 密钥:临时凭证密钥,已自动生成
  • 服务器位于路由器或云主机 NAT 之后时,需在「高级设置 → 对外宣告地址」填公网 IP(或 公网IP/内网IP)
  • 保存后可在同一页面点「连通性自检」确认中继端口可达,也可在「系统 → 系统健康」查看 TURN 中继状态

查看中继日志与关闭说明

需要排查时查看 coturn 容器日志;后台未启用前,coturn 容器不会监听任何端口,可以放心让它常驻。关闭开关后 coturn 会随之停止,避免变成人人可用的开放中继。

docker logs -f jisiyu-coturn

常见问题

同一局域网内通话正常,一出差就连不上,是什么原因?

典型的中继缺失。局域网内可直连,跨网络或严格防火墙下需要 TURN 中继转发。请用 docker-compose-coturn.yaml 部署,并在后台「系统设置 → TURN 中继」中启用,同时放行 3478 与 49152-51199 端口。

TURN 密钥需要自己生成吗?

不需要。后台启用时会自动生成 REST 密钥并自动填好地址,通常保持默认即可。

怎么确认中继真的生效了?

在 TURN 设置页点「连通性自检」确认中继端口可达;也可以到「系统 → 系统健康」查看 TURN 中继一项的状态,能发现「开关开了但 coturn 没起来」这类问题。

其他部署文档