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 才算穿透成功。



……