STUN 是一种轻量级的协议,主要用于帮助客户端发现其在公共网络上的 IP 地址和端口号,并检测 NAT 类型。
TURN 是一种中继协议,客户端通过连接 TURN 服务器,并使用 TURN 服务器分配的中继地址进行通信。
WebRTC 使用 ICE 协议来协调 STUN 和 TURN 的使用。ICE 会尝试所有可能的连接方式,并选择最佳的连接方式。免费的 STUN 服务有很多,但免费的 TURN 很少很少,需要自建。
下载并安装coturn
CentOS: yum install coturn
Debian / Ubuntu: apt install coturn
生成证书
openssl req -x509 -newkey rsa:1024 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
修改配置文件
配置文件在 /etc/turnserver.conf
。
listening-device=eth0 # 网卡名称
listening-port=3478 # turnserver监听UDP/TCP端口
tls-listening-port=5349 # turnserver监听TLS/DTLS端口
listening-ip=0.0.0.0 # 设置 0.0.0.0 即可
relay-ip=10.120.92.4 # 一定是内网IP,不然relayIP会获取不到
external-ip=X.X.X.X # 一定是公网IP
cert=/etc/turn_server_cert.pem # 证书地址
pkey=/etc/turn_server_pkey.pem # 密钥地址
user=用户名:密码 # 用户名:密码
realm=X.X.X.X # 域名或者公网IP
lt-cred-mech # 开启密码验证
启动coturn
启动:systemctl start coturn.service
重启:systemctl restart coturn.service
停止:systemctl stop coturn.service
放开端口
服务器防火墙一定要放开 TCP 和 UDP 协议的端口,如果监听了 TLS 端口,那么也要放开。
测试
可以在 Trickle ICE 测试 STUN/TURN 服务是否部署好。只有 relay 的地址是你的 IP 才算穿透成功。