webrtc P2P服務器coturn搭建說明

rfc5766-turn-server規(guī)范

rfc5766-turn-server是谷歌推薦的turn開源項目,經(jīng)常作WebRTC的服務器端使用。 該開源項目是包含TURN與STUN功能于一體,默認TURN與STUN監(jiān)聽端口為3478。
支持tcp, udp, tls, dtls 連接.tls為基于TCP的安全層傳輸協(xié)議,dtls為基于udp的安全傳輸層協(xié)議。
注意: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.客戶端發(fā)送一個不帶證書的allocate請求,服務器返回401錯誤。
2.客戶端發(fā)送一個帶long-term credential(長期證書,服務器配置文件user字段定義)的allocate請求,服務器接收請求,并返回分配的轉(zhuǎn)發(fā)地址。
3.客戶端定期發(fā)送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庫是為了支持更多用戶而準備的,如果你不是生產(chǎn)環(huán)境的話,忽略也行。

檢出代碼

https://code.google.com/p/rfc5766-turn-server/source/checkout 到任意目錄,我檢出到了stun,下文腳本請注意自行對號入座。cd進去

1.png

開始編譯
生成makefile文件,編譯,安裝

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

在bin目錄下生成六個可執(zhí)行文件

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庫. 用于示范數(shù)據(jù)庫的格式.

coturn 支持三種配置. 命令行, conf文件和數(shù)據(jù)庫. 數(shù)據(jù)庫支持sqlite, mysql, postgresql, MongoDB, redis

examples\scripts 下一些測試用例:

loadbalance 示范如何進行負載均衡. 設置一個master turn server 然后配置若干個slave turn server.

longtermsecure 示范如何使用long-term 驗證

longtermsecuredb 與 longtermsecure 類似, 不過是從數(shù)據(jù)庫配置

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屬性:當幾種協(xié)議復用相同的通信地址時,為了區(qū)分stun消息,可以使用fingerprint屬性,這時在stun數(shù)據(jù)包中會包含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 有很多參數(shù)可以配置的.

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 參數(shù)指定的.
例如這樣:

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

測試

試試看是否編譯成功,先看看turnserver支持哪些功能

turnserver -h > help.txt    

2.png

支持協(xié)議
測試各基礎協(xié)議是否支持

3.png

配置
rfc5766-turn-server是利用配置文件來定義自己的功能表現(xiàn)的,安裝完成后,在下列路徑都有默認的配置文件:

4.png

啟動rfc5766-turn-server

sudo turnserver -c /你的路徑/turnserver.conf --daemon
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容