WebRTC

webrtc P2P服务器coturn搭建说明

2019-06-07  本文已影响4人  技术人生666

rfc5766-turn-server规范

rfc5766-turn-server是谷歌推荐的turn开源项目,经常作WebRTC的服务器端使用。 该开源项目是包含TURN与STUN功能于一体,默认TURN与STUN监听端口为3478。
支持tcp, udp, tls, dtls 连接.tls为基于TCP的安全层传输协议,dtls为基于udp的安全传输层协议。
注意:TLS和DTLS需要安装证书。

TURN specs:  
   RFC 5766 - base TURN specs  
   RFC 6156 - IPv6 extension for TURN  
   Experimental DTLS support as client protocol.  


STUN specs:  
   RFC 5389 - base "new" STUN specs  
   RFC 5769 - test vectors for STUN protocol testing  
   RFC 5780 - NAT behavior discovery support  
   RFC 3489 STUN1  

典型的TURN与client通信流程如下:

11.png
1.客户端发送一个不带证书的allocate请求,服务器返回401错误。
2.客户端发送一个带long-term credential(长期证书,服务器配置文件user字段定义)的allocate请求,服务器接收请求,并返回分配的转发地址。
3.客户端定期发送refresh包,证明自己的存在。

coturn搭建

webrtc适用配置文件:
链接:https://pan.baidu.com/s/1oj9zn6q4eE90QBsg0qAbGg 密码:1vur

安装依赖项

1.sudo apt-get install libssl-dev  
2.sudo apt-get install libevent-dev  
3.sudo apt-get install libpq-dev  
4.sudo apt-get install mysql-client  
5.sudo apt-get install libmysqlclient-dev  
6.sudo apt-get install libhiredis-dev    

其中SQL相关的依赖项可能会失败,不过这也没什么大不了的,SQL库是为了支持更多用户而准备的,如果你不是生产环境的话,忽略也行。

检出代码

https://code.google.com/p/rfc5766-turn-server/source/checkout 到任意目录,我检出到了stun,下文脚本请注意自行对号入座。cd进去

1.png

开始编译
生成makefile文件,编译,安装

1./configure  
2.make  
3.sudo make install  

在bin目录下生成六个可执行文件

turnadmin turnutils_peer turnutils_stunclient
turnserver turnutils_rfc5769check turnutils_uclient

turnserver 就是我们需要的服务器.

turnadmin 用来管理账户.

turnutils_stunclient 用于测试stun服务

turnutils_uclient 用于测试turn服务. 模拟多个UDP,TCP,TLS or DTLS 类型的客户端

example 目录主要是示范如何配置和使用turn. 包含一些测试用例.

example/etc 下是pem证书和conf配置文件

example/var/db 下是sqlite的db库. 用于示范数据库的格式.

coturn 支持三种配置. 命令行, conf文件和数据库. 数据库支持sqlite, mysql, postgresql, MongoDB, redis

examples\scripts 下一些测试用例:

loadbalance 示范如何进行负载均衡. 设置一个master turn server 然后配置若干个slave turn server.

longtermsecure 示范如何使用long-term 验证

longtermsecuredb 与 longtermsecure 类似, 不过是从数据库配置

shorttermsecure 示范如何使用short-term验证.

restapi 示范了web方面的使用.

stun 定义了两种验证方式.

Long-Term Credential  
Short-Term Credential  

短期证书用户名,密码及有效时间。
长期证书包含用户名,密码,在整个会话周期有效。

具体可以参考stun标准 http://tools.ietf.org/html/rfc5389#section-15.4

但是对于webrtc而言. 仅支持long-term .

fingerprint属性:当几种协议复用相同的通信地址时,为了区分stun消息,可以使用fingerprint属性,这时在stun数据包中会包含fingerprint属性。

http://www.ietf.org/proceedings/87/slides/slides-87-behave-10.pdf
TURN REST Server API

这个PDF 描述了. turn服务器和客户端的交互流程.

简单的使用

turnserver -o -a -f -v --mobility -m 10 --max-bps=100000 --min-port=32355 --max-port=65535  
 --user=ling:ling1234 --user=ling2:ling1234 -r demo  

-m 10 表示启动十个relay线程.

当TURN Server用于WebRTC时,必须使用long-term credential mechanism, 即指定 -a 或者 --lt-cred-mech

--max-bps=100000 限制最大速度为100KB/s.

添加了两个用户ling 和ling2.
可以直接使用turnutils_uclient -u ling -w ling1234 来测试. turnutils_uclient 有很多参数可以配置的.

webrtc::PeerConnectionInterface::IceServer turnServer;  
turnServer.uri = "turn:ip"; 
turnServer.username = "ling";   
turnServer.password = "ling1234";   
servers.push_back(turnServer);   

如果从安全性方面考虑. 可以为账户生成key, 这样就可以直接通过key登录. 而不需要提供密码.
key 通过turnadmin生成, 需要(username, password, realm) . realm是启动turn server时-r 参数指定的.
例如这样:

turnadmin -k -u ling -p ling1234 -r demo    
0xccba8f3a6a025a38eb4a0e795fc92705

测试

试试看是否编译成功,先看看turnserver支持哪些功能

turnserver -h > help.txt    
2.png
支持协议
测试各基础协议是否支持 3.png

配置
rfc5766-turn-server是利用配置文件来定义自己的功能表现的,安装完成后,在下列路径都有默认的配置文件:

4.png

启动rfc5766-turn-server

sudo turnserver -c /你的路径/turnserver.conf --daemon
上一篇 下一篇

猜你喜欢

热点阅读