Skip to content
0

文章发布较早,内容可能过时,阅读注意甄别。

1. 背景

当我们做音视频通话、屏幕共享、在线会议时,需要让两端设备直接传输音视频数据。 但实际情况很复杂:

  • 用户大多在 NAT 或防火墙后(比如家庭路由器、公司内网)。
  • 两个客户端之间可能根本无法直接互相建立连接。

2. STUN 和 TURN 的区别

  • STUN (Session Traversal Utilities for NAT) 用来告诉客户端:

    “你现在的公网 IP 是啥?端口是多少?” 这样双方就能尝试打洞直连(P2P)。

  • TURN (Traversal Using Relays around NAT) 当打洞失败、双方无法直连时,TURN 就登场了:

    “行,我帮你们转发数据,所有音视频流都经过我中转。” 所以 TURN 是 中继服务器,性能压力会比 STUN 大很多。

3. TURN 服务的作用

保证通信成功率

  • 没有 TURN,只有 STUN 的话,可能 20-30% 的用户根本连不上(尤其是公司、学校的严格网络)。
  • 有了 TURN,哪怕打洞失败,数据也能通过 TURN 中转,保证通话成功。

解决防火墙、对称 NAT 的问题

  • 对称 NAT 很难打洞,TURN 直接转发,绕开限制。

提供安全控制

  • TURN 支持用户鉴权、带宽控制,防止被滥用。

4. TURN 服务常用场景

  • WebRTC 应用(视频会议、直播互动、远程面试)。
  • 即时通讯(音视频通话)。
  • 游戏语音。
  • 远程桌面、远程协助。

5. TURN 常用实现

  • coturn(最流行,开源,稳定) 支持 STUN + TURN,支持 TCP/UDP + TLS,企业级部署常用它。

部署后你通常会监听:

  • 3478/tcp3478/udp → STUN/TURN 主端口
  • 5349/tcp → TLS 加密 TURN
  • 可能还要开启动态分配的 relay 端口范围

turn开放防火墙

markdown
 sudo turnserver -c /etc/turnserver.conf -o 
 sudo ufw allow 3478/tcp
sudo ufw allow 3478/udp
sudo ufw allow 5349/tcp
# TLS UDP 也可放行,如果客户端支持 DTLS
sudo ufw allow 5349/udp
sudo ufw allow 50000:65535/tcp
sudo ufw allow 50000:65535/udp
最近更新