×

穿不了 NAT 怎么办?用 TURN Server 把墙搬走!

hqy hqy 发表于2025-07-13 02:05:29 浏览7 评论0

抢沙发发表评论

? 摘要

本篇文章以“就算你是小白也能看懂”的原则,详细介绍了如何配置一台可用的 TURN Server(基于 coturn),让 WebRTC 通信再也不怕 NAT 穿透失败。我们将涵盖 TURN Server 的用途、安装方式、配置说明、部署方式(systemd)、以及一些常见问题和同类对比。附带的配置文件案例,直接拿去就能跑!


? 前言:你以为你能直连,其实 NAT 在冷笑

在 WebRTC 的世界里,两个用户的视频聊天、屏幕共享都需要“点对点连接”(P2P)。可惜,现实不如理想丰满:你在公司内网,他在学校 WiFi,你们都躲在 NAT 后,连根头发丝都连不到。

这时候,就轮到我们的主角 —— TURN Server 登场了!


?TURN Server 是什么?为啥我需要它?

? TURN 的作用(通俗翻译版)

“我打不通你?那我找中间人帮我转一下。”

TURN(Traversal Using Relays around NAT)是一种 NAT 穿透机制,是 STUN 的兄弟(或者说升级版)。STUN 是告诉你“你外面的 IP 是啥”,而 TURN 则是“你连接不了?那我替你转发流量”。

? 使用场景

  • WebRTC 视频通话(如会议系统)
  • 远程桌面或协同应用
  • 直播互动平台
  • 一切 P2P 无法直连的地方

? 安装 coturn:先喝碗 EPEL 汤

# 安装 EPEL 仓库
yum install epel-release -y

# 安装 coturn
yum install coturn -y

安装后,会得到 /usr/bin/turnserver 命令,核心服务就靠它了。

⚙ 配置详解:我贴我自己用的配置给你看

文件路径:/acowbo/websoft/turnserver/turnserver.conf


# TURN/STUN 监听端口(UDP/TCP)
listening-port=40997

# TURN TLS监听端口(加密连接)
tls-listening-port=40998

# 开启 fingerprint 和 长时凭证机制
fingerprint
lt-cred-mech

# 认证域名(可以是你实际部署的域名)
realm=ts.example.com

# 用户和密码
user=demo_user:strongpassword123

# 服务器公网IP
relay-ip=1.2.3.4
external-ip=1.2.3.4

# 证书路径(用于TLS加密)
cert=/path/to/fullchain.pem
pkey=/path/to/privkey.pem

# 支持UDP/TCP
no-udp=false
no-tcp=false

# 开启详细日志
verbose
log-file=/acowbo/websoft/turnserver/turnserver.log
log-timestamp

? 提醒:不要把真实密码、IP 地址贴到互联网上!我这里做了脱敏处理。

? 启动服务:打造 systemd 启动脚本

放置路径(可选):/etc/systemd/system/turnserver.service

内容如下:

[Unit]
Description=CoTURN STUN/TURN Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/turnserver -c /acowbo/websoft/turnserver/turnserver.conf
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

然后启动并设置开机自启:

systemctl daemon-reexec
systemctl daemon-reload
systemctl enable --now turnserver

验证状态:

systemctl status turnserver

image-20250614190929307
image-20250614190929307

你可以使用第三方测试工具验证:

  • trickle ICE 测试
  • 在 WebRTC 应用中加入:
iceServers: [{
    urls"turn:ts.example.com:40997",
    username"demo_user",
    credential"strongpassword123"
}]



? 常见问题

问题
原因
解决方式
TURN 无法连接
端口没开、防火墙限制
检查防火墙规则(确保 40997/40998 都开放)
用户认证失败
密码不对 / 配置错误
检查 user= 格式是否正确,用户名/密码对是否正确
TLS 无效
证书路径错误或证书无效
检查 cert 和 pkey 的路径和权限
仅能 STUN,无法 TURN
TURN 不生效,应用退回 STUN
检查外网 IP、端口和协议(UDP/TCP)是否都支持


? TURN 服务器还有谁?

产品
特点
缺点
coturn
社区活跃、文档丰富、部署方便
配置略多
restund
更轻量,适合嵌入式
功能少
Xirsys、Twilio TURN
云服务,集成简单
商业收费,不可控
pions/ice (Go 实现)
与 WebRTC 项目集成度高
适合高级用户

coturn 是目前最主流的开源方案,无论是自己部署还是给 SaaS 平台配套,都是首选。


? 总结:你以为的视频通话,其实背后有个“流量搬运工”

TURN Server 就像一个默默无闻的“中间人”,在两个设备无法互相直连时,承担起流量中继的角色。别小看它,很多高质量视频通话体验,全靠它“托底”。

文章到此,如果你也在做 WebRTC 应用、协同办公、或者远程视频系统,一定记得加上 TURN,否则你可能连不上自己……


打赏

本文链接:https://kinber.cn/post/5255.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客