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)

centos7搭建stun/turn服务器 | 志博日记 (zhiboblog.com)

安装和配置 WebRTC 的 STUN/TURN 服务 coturn | 代码手工艺人 (joey.blue)

posted @ 2023-01-07 23:24  Brisk  阅读(6009)  评论(0编辑  收藏  举报