webrtc P2P服務(wù)器coturn搭建說明

rfc5766-turn-server規(guī)范

rfc5766-turn-server是谷歌推薦的turn開源項(xiàng)目路呜,經(jīng)常作WebRTC的服務(wù)器端使用赞草。 該開源項(xiàng)目是包含TURN與STUN功能于一體离赫,默認(rèn)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ā)送一個(gè)不帶證書的allocate請求痰哨,服務(wù)器返回401錯(cuò)誤。
2.客戶端發(fā)送一個(gè)帶long-term credential(長期證書匾嘱,服務(wù)器配置文件user字段定義)的allocate請求斤斧,服務(wù)器接收請求,并返回分配的轉(zhuǎn)發(fā)地址霎烙。
3.客戶端定期發(fā)送refresh包撬讽,證明自己的存在。

coturn搭建

webrtc適用配置文件:
鏈接:https://pan.baidu.com/s/1oj9zn6q4eE90QBsg0qAbGg 密碼:1vur

安裝依賴項(xiàng)

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相關(guān)的依賴項(xiàng)可能會失敗悬垃,不過這也沒什么大不了的游昼,SQL庫是為了支持更多用戶而準(zhǔn)備的,如果你不是生產(chǎn)環(huán)境的話尝蠕,忽略也行烘豌。

檢出代碼

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

1.png

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

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

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

turnadmin turnutils_peer turnutils_stunclient
turnserver turnutils_rfc5769check turnutils_uclient

turnserver 就是我們需要的服務(wù)器.

turnadmin 用來管理賬戶.

turnutils_stunclient 用于測試stun服務(wù)

turnutils_uclient 用于測試turn服務(wù). 模擬多個(gè)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 示范如何進(jìn)行負(fù)載均衡. 設(shè)置一個(gè)master turn server 然后配置若干個(gè)slave turn server.

longtermsecure 示范如何使用long-term 驗(yàn)證

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

shorttermsecure 示范如何使用short-term驗(yàn)證.

restapi 示范了web方面的使用.

stun 定義了兩種驗(yàn)證方式.

Long-Term Credential  
Short-Term Credential  

短期證書用戶名标锄,密碼及有效時(shí)間。
長期證書包含用戶名序矩,密碼鸯绿,在整個(gè)會話周期有效。

具體可以參考stun標(biāo)準(zhǔn) http://tools.ietf.org/html/rfc5389#section-15.4

但是對于webrtc而言. 僅支持long-term .

fingerprint屬性:當(dāng)幾種協(xié)議復(fù)用相同的通信地址時(shí)簸淀,為了區(qū)分stun消息瓶蝴,可以使用fingerprint屬性,這時(shí)在stun數(shù)據(jù)包中會包含fingerprint屬性租幕。

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

這個(gè)PDF 描述了. turn服務(wù)器和客戶端的交互流程.

簡單的使用

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 表示啟動(dòng)十個(gè)relay線程.

當(dāng)TURN Server用于WebRTC時(shí)舷手,必須使用long-term credential mechanism, 即指定 -a 或者 --lt-cred-mech

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

添加了兩個(gè)用戶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是啟動(dòng)turn server時(shí)-r 參數(shù)指定的.
例如這樣:

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

測試

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

turnserver -h > help.txt    

2.png

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

3.png

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

4.png

啟動(dòng)rfc5766-turn-server

sudo turnserver -c /你的路徑/turnserver.conf --daemon
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贾富,隨后出現(xiàn)的幾起案子歉眷,更是在濱河造成了極大的恐慌,老刑警劉巖颤枪,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汗捡,死亡現(xiàn)場離奇詭異,居然都是意外死亡畏纲,警方通過查閱死者的電腦和手機(jī)扇住,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盗胀,“玉大人艘蹋,你說我怎么就攤上這事∑被遥” “怎么了女阀?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屑迂。 經(jīng)常有香客問我强品,道長,這世上最難降的妖魔是什么屈糊? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任的榛,我火速辦了婚禮,結(jié)果婚禮上逻锐,老公的妹妹穿的比我還像新娘夫晌。我一直安慰自己,他們只是感情好昧诱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布晓淀。 她就那樣靜靜地躺著,像睡著了一般盏档。 火紅的嫁衣襯著肌膚如雪凶掰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音懦窘,去河邊找鬼前翎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛畅涂,可吹牛的內(nèi)容都是我干的港华。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼午衰,長吁一口氣:“原來是場噩夢啊……” “哼立宜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起臊岸,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤橙数,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后帅戒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灯帮,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年蜘澜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了施流。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鄙信,死狀恐怖瞪醋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情装诡,我是刑警寧澤银受,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站鸦采,受9級特大地震影響宾巍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜渔伯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一顶霞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锣吼,春花似錦选浑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至读恃,卻和暖如春隧膘,著一層夾襖步出監(jiān)牢的瞬間代态,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工疹吃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹦疑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓互墓,卻偏偏與公主長得像必尼,于是被迫代替她去往敵國和親蒋搜。 傳聞我的和親對象是個(gè)殘疾皇子篡撵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容