STUN 与 TURN 的 3478 端口
3478 是 NAT 穿透相关服务的端口,常用于音视频通话与实时互动场景。STUN 只帮助客户端发现自己在公网上的映射地址,流量很小;当双方无法直连时,媒体流会改由 TURN 服务中继,此时服务器需要承担全部音视频带宽。TLS 承载方式通常在 5349 端口,中继本身还会使用一段独立的端口范围。自建该服务时,不做认证就等同于把中继能力开放给任何人。
基本信息
| 服务 | STUN 与 TURN 服务(常见实现为 coturn) |
|---|---|
| 协议 | UDP 与 TCP,默认 3478;TLS 常用 5349 |
| 关键配置 | 监听端口、中继端口范围、认证机制与域名 |
| 资源特点 | STUN 消耗小,TURN 中继消耗大量带宽 |
| 权限要求 | 生产环境必须启用认证 |
| 安全等级 | 可公网提供服务,但需防滥用 |
典型使用场景
- 音视频通话:为不同网络环境下的客户端寻找可直连的路径
- 实时互动与连麦:直连失败时由中继保证通话建立
- 在线互动应用:帮助位于严格 NAT 后的终端建立连接
- 自建替代第三方服务:避免通话媒体流经外部服务商
- 排障验证:确认客户端能否获取到正确的公网映射地址
验证服务与观察绑定结果
验证服务与观察绑定结果
# 使用客户端工具发起绑定请求,应返回本机的公网映射地址与端口
stunclient stun.example.com 3478
ss -lntup | grep -E ':3478|:5349' # 服务端确认监听
# 抓包确认请求与响应是否有来回
sudo tcpdump -ni eth0 'udp port 3478' -c 20STUN 与 TURN 的分工
| 角色 | 作用 | 资源影响 |
|---|---|---|
| STUN | 告知客户端其公网映射地址 | 不承载媒体,消耗极小 |
| TURN | 直连失败时中继媒体流 | 带宽消耗大,必须启用认证 |
| TLS 承载 | 在受限网络中走加密通道 | 使用 5349,证书需与域名匹配 |
中继服务配置要点
中继服务配置要点
listening-port=3478
fingerprint
realm=stun.example.com
# 生产环境启用长期凭据或动态凭据机制,避免匿名中继
lt-cred-mech
min-port=49152 # 中继端口范围起点
max-port=65535 # 中继端口范围终点,需与防火墙放行范围一致不做认证的中继服务会被用来转发他人流量,既消耗带宽也可能让你的 IP 出现在滥用投诉中;生产环境必须启用凭据校验。
放行范围别只开信令端口:中继端口范围也要一并放行,否则在对称型网络环境下通话仍建立不起来,表现为呼叫一直处于连接中。
排查通话失败建议同时看客户端连接候选信息与服务端日志:如果双方都只拿到中继地址却仍连不上,问题通常在中继端口未被放行,而不是信令服务本身。