目錄:
一、簡介
二、安裝
三、配置與運行
四、運行檢測
五、答疑環節
一、簡介
本文通過在服務器上安裝coturn這個軟件,實現搭建STUN服務器和TURN服務器。
coturn 簡介:是一個免費的開源的 TURN/STUN 服務器。coturn 服務器完整的實現了 STUN/TURN/ICE 協議,支持 P2P 穿透防火牆。
STUN 服務器用於檢測NAT類型。
TURN 服務器是在點對點失敗后用於通信中繼。
coturn的Github源碼:
https://github.com/coturn/coturn
coturn的wiki使用說明:
https://github.com/coturn/coturn/wiki
Q:
stun服務器和turn服務器在部署步驟上,有什么區別?
A:
因為TURN是STUN的擴展,所以TURN服務器可以當作STUN服務器來用。
在軟件配置上沒有區別。
在硬件配置上,stun服務器需要1台服務器上有2個公網IP,turn服務器只需要有1個公網IP。
所以,如果你想:
只配置stun服務器:按照本文步驟來,還需要有1台用2個公網IP的服務器。
只配置turn服務器:按照本文步驟來。
1台服務器同時配置stun和turn服務器:按照本文步驟來,還需要有1台用2個公網IP的服務器。
二、安裝
安裝過程分為2部分
- 鏡像不帶有coturn的源,此處以ubuntu14.04 LTS 64位為例
- 鏡像自帶有coturn的源(推薦使用,這個比較方便),此處以ubuntu16.04 LTS 64位為例
1. 鏡像不帶有coturn的源,此處以ubuntu14.04 LTS 64位為例
1.安裝相關環境
sudo apt-get install libssl-dev sudo apt-get install libevent-dev sudo apt-get install libpq-dev sudo apt-get install mysql-client sudo apt-get install libmysqlclient-dev sudo apt-get install libhiredis-dev sudo apt-get install git sudo apt-get install make
2.下載並安裝相關代碼
git clone https://github.com/coturn/coturn
cd coturn/
./configure
make
sudo make install
看到下圖,就說明已經安裝好了,這個是一些說明事項,如果想要將其設置成守護進程,可以看看
2. 鏡像帶有coturn的源,此處以ubuntu16.04 LTS 64位為例
輸入apt-get install coturn
三、配置與運行
stun服務器和turn服務器的默認端口都是3478。
stun服務器需要一台服務器,並且服務器上綁定有2個公網IP(如果只有1個公網IP,會出現NAT類型檢測不准確的情況!)。
turn服務器需要一台服務器,並且服務器上綁定有1個公網IP。
stun服務器搭建:
stun服務器需要一台服務器,並且服務器上綁定有2個公網IP。
性能要求應該不高,畢竟一個用戶創建一個通話請求,只需要與stun服務器溝通一次,此后不再溝通,而溝通一次只需要發幾個數據包驗證能否通信。
現在有2種解決方案:
1.用別人現成的stun服務器(推薦使用)
2.自己搭一個stun服務器(2個公網IP的資金花銷太大,而換來的只是一個NAT類型檢測的功能,性價比不高,不推薦使用)
1.用別人現成的stun服務器
以下三個親測可用:
stun.ekiga.net
stun.schlund.de
stun.voxgratia.org
怎么測試是否可用呢?
搜索NAT類型檢測工具,然后下載
再找幾個可用的服務器
框框里填入服務器地址
這個是可用的
這個是用不了的
2.自己搭一個stun服務器
硬件方面,騰訊雲和阿里雲有個叫彈性網卡的技術可以讓一台服務器綁定2個ip,如果服務器只有1個IP,會出現NAT類型檢測不准確的情況!
軟件方面,服務器安裝了coturn后,既是stun服務器,也是turn服務器,所以stun服務器的配置步驟與turn服務器的配置步驟是一樣的。
turn服務器搭建:
coturn 支持三種配置:命令行、conf文件和數據庫(據網上說是有數據庫這種方式,但所有的例子都是前兩種,所以我也不知道怎么用數據庫去配置)。
數據庫支持sqlite,mysql,postgresql,MongoDB,redis。這里的數據庫指的應該是存用戶信息的數據庫,而不是配置coturn用的數據庫。
STUN 定義了兩種驗證方式:Long-Term Credential 和 Short-Term Credential 。但是對於 WebRTC 而言,僅支持 Long-Term Credential 。
本文以命令行舉例:
如果你是只用來做turn服務器:
turnserver -o -v -f -a -m 2 --max-bps=100000 --min-port=32355 --max-port=65535 --user=phz:1 -r phzled.cn -L your.ip
如果你既當作stun服務器,又當作turn服務器(因為stun需要雙公網ip,所以要把-L參數變成-X參數):
turnserver -o -f -v -a -m 2 --max-bps=100000 --min-port=32355 --max-port=65535 --user=phz:1 -r phzled.cn -X <public ip/ private ip> -X <public ip/ private ip>
部分參數說明:
-o 以守護進程模式運行(后台運行)
-v 日志會以“適度詳細”的程度來記錄
-f 增加指紋機制。
-a 長期驗證機制
-m 以x個進程來處理中繼請求
--max-bps 帶寬
--min-port 起始用的最小端口
--max-port 最大端口號
--user=帳號:密碼 (隨便寫啥都行,記得住就行,turn服務的用戶驗證機制要用)
-r 領域(隨便寫啥都行)。如果turn服務器沒有使用任何數據庫/命令行/conf文件進行配置,就需要加這個選項,並且要配合long-term credentials(-a選項)使用
-L 監聽IP(turn服務器的ip)這個ip是你ifconfig查到的ip,不是你的公網ip
-X 后面加 public ip/ private ip 多IP情況下使用,有幾個ip就用幾次
注意:turn服務器是需要有用戶驗證機制的,由賬戶,密碼,領域三部分構成一個完整的賬戶。
看上圖,如果想要在代碼中使用turn服務器,需要輸入正確的賬戶和密碼,才可以正常使用turn服務器,而領域是給turn服務器使用的,不需要輸入。
所以,如果想以命令行的方式配置turn服務器,--user -r -a 這三個選項必不可少。
如果想更詳細的了解,請自行查閱wiki使用說明:
https://github.com/coturn/coturn/wiki
或是使用man手冊查看:
man turnserver
命令行運行后會有以下信息,信息很多,大部分用不到,記住日志文件的位置信息就好,一般會放在/var/log下,以turn+進程號+日期命名。
四、運行檢測
檢測網址
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
如果想檢測stun服務器,只用填寫你的公網IP
如果想檢測turn服務器,就填寫你的公網IP,還有當時配置時填寫的用戶名和密碼,因為turn是需要認證的,(--user選項填的那個信息)
填好相關信息后,點擊按鈕,進行驗證
如果想要設置成開機自啟動
寫一個腳本,將你的腳本復制到 /etc/init.d目錄下
腳本開頭要加這幾行字
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
就像這樣
然后設置腳本文件的權限(這里假設腳本名字為test)
sudo chmod 755 /etc/init.d/test
將腳本設置為啟動腳本
sudo update-rc.d test defaults 95
注:其中數字95是腳本啟動的順序號,按照自己的需要相應修改即可。在你有多個啟動腳本,而它們之間又有先后啟動的依賴關系時你就知道這個數字的具體作用了。
卸載啟動腳本的方法:
sudo update-rc.d -f test remove
五、答疑環節
Q1:
我的服務器成功運行后,在檢測用的網址上檢測不到。
A1:
可以看看是不是因為這2個原因:
1.-L選項的ip地址需要填的是ifconfig查到的ip地址
2.檢查服務器的安全策略,如果是騰訊雲或者阿里雲,查看一下安全組的端口是否開放
stun服務器和turn服務器的默認端口都是3478。
以騰訊雲為例,把端口打開
Q2:
怎么實現在ubuntu上配置雙網卡雙ip?
A2:
https://cloud.tencent.com/developer/article/1472051
有問題可以留言,我會盡力回答。
如果寫的不好,歡迎任何批評指正,我都會虛心接受的!
如果寫的還行,麻煩贊一下,讓我知道我寫的東西幫到了別人^_^