WebRTC - STUN/TURN服务器的搭建(使用coturn)
在进行WebRTC通信时,节点间会按照如下顺序获取对方的地址:
1)如果双端在同一个内网,直接用内网IP通信;
2)通过STUN服务器,为双端构造可以直接访问的地址,打造一条可以穿透NAT的通路,俗称“打洞”;
3)双端通过TURN服务器(中继服务器)进行通信。此时,通信网络的拓扑结构不再是P2P,因为数据其实是经过TURN服务器转发给双端的。
-- By Brisk
搭建STUN/TURN服务器
通过下述方法,可以搭建一个同时满足STUN和TURN要求的服务器。操作系统:CentOS 7
1 下载并安装coturn
yum install coturn
2 使用OpenSSL生成证书,该证书用于修改后面的配置文件
openssl req -x509 -newkey rsa:1024 -keyout /etc/turn_key.pem -out /etc/turn_cert.pem -days 9999 -nodes
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
req:生成证书请求
-x509:用x509处理证书,这是一个功能很丰富的证书处理工具
-newkey rsa:位数:生成对应位数的RSA密钥
-keyout:输出的密钥位置
-out:输出的证书位置
-days:密钥持续时间
-nodes:不对输出的密钥进行加密
3 修改配置文件
vim /etc/coturn/turnserver.conf
listening-ip=服务器内网IP地址
listening-port=3478 #STUN/TURN服务的端口 对应UDP和TCP的端口都要打开
tls-listening-port=5349 #TURN服务器的tls端口
relay-ip= 服务器内网IP地址
external-ip= 服务器公网IP地址
lt-cred-mech # 开启密码验证
cert=/etc/turn_cert.pem #证书地址
pkey=/etc/turn_key.pem #密钥地址
no-cli # 关闭CLI支持
user=用户名:密码 # 设置ICE时所用的用户名和密码
4 启动coturn
systemctl start coturn
(如果是使用第三方的云服务器,记得打开TCP与UDP的3478端口。并打开UDP的40000-65535端口,范围和配置文件中min_port与max_port一致)
5 测试
Trickle ICE (webrtc.github.io)
输入
turn:TURN服务器外网IP:3478、用户名、密码
点击"Add server",再点击"gather candidates"
出现下图所示,即为成功。srflx是STUN服务器,relay是TURN服务器。
6 将配置好的STUN/TURN服务器地址添加到ICE配置中
iceConfiguration.iceServers = [
{
urls: 'stun:服务器外网IP:3478',
},
{
urls: 'turn:服务器外网IP:3478',
username: 'admin',
credential: '123456'
}
];
const pc = new RTCPeerConnection(iceConfiguration);
参考资料
openssl 命令,Linux openssl 命令详解:强大的安全套接字层密码库 - Linux 命令搜索引擎 (wangchujiang.com)