1. 程式人生 > >resiprocate使用入門:內網搭建基於repro的sipproxy測試環境

resiprocate使用入門:內網搭建基於repro的sipproxy測試環境

撥打 簡單 路徑依賴 ogg 需要 插入 ppr ddr 客戶端使用

測試環境

sipproxy:repro + centos
客戶端:windows電腦客戶端使用X-Lite,手機andriod客戶端使用linphone

repro配置和啟動

log的配置

如果使用默認的log配置,則log級別是INFO,且所有log都打印到標準輸出。如果要輸出到文件,則做如下類似配置:

########################################################
# Log settings
########################################################
LoggingType = file
LogLevel = STACK
#指定log文件路徑
LogFilename = ../log/repro.log
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

web地址設置

如果要通過網頁操作repro的相關配置,則需要將HTTP的地址改成repro所在機器的ip。端口默認配置是5080。我的repro機器ip是172.16.12.29,則配置如下:

HttpBindAddress = 172.16.12.29, ::1
  • 1
  • 2

啟動repro

./repro

創建domain、user以及route

瀏覽器登陸repro的控制頁面:

172.16.12.9:5080
  • 1

提示輸入用戶名和密碼,默認都是admin,登陸成功後點擊login,界面如下:
技術分享

創建domain

任何user都必須要屬於某個domain,repro會根據domain去路由下一跳。創建domain界面如下,端口可以不填,域名隨便輸入。 創建domain後,會顯示在下面的列表中。
技術分享


特別註意的是:
(1)創建domain後,需要重啟repro。
(2)域名可以是字符串,也可以直接使用repro 的ip地址。如果是字符串,就需要配置DNS規則。比如我創建 test.sipproxy.cn,則需要將這個域名DNS到proxy上。最簡單的就是配置到/etc/hosts上。否則會出現480 NO DNS錯誤。

創建user

輸入用戶名,選擇domain,輸入密碼,add即可。
技術分享

創建route

這一步不是必要的,但是我們撥打的時候,習慣輸入數字號碼,而不是用戶名。所以通過創建route來實現數字號碼到用戶名的映射。按照提示正確輸入URI和Destination。
技術分享

客戶端登陸

經過以上步驟,就有用戶了:
技術分享


比如我有兩個用戶:[email protected]和[email protected]
對應的號碼分別是33333和44444

電腦上X-lite登陸:

技術分享

手機上linphone登陸:

技術分享

登陸成功後,repro控制頁面上可以看到相關登陸註冊的信息:
技術分享

測試結果

在test3上撥打號碼44444,撥打成功。抓包,flow圖如下:
技術分享

遇到的問題

(1)域名一定要配置DNS

(2)如果域名用的是repro的ip,則不要改動repro的默認端口5060。我的測試中一開始由於5060被其他應用占用,將repro的端口改成5066,配置ip域名打不通。因為repro代碼中從域名中解析不到端口,就會使用默認的端口5060,這個是硬編碼寫死的。也就是說會將主叫的invite路由到5060端口去,導致通話失敗。非要用ip當域名且改變端口,可以在域名上加上端口,如172.16.12.29:5066。

(3)在repro端口上抓包,通話結束時,竟然沒有抓到bye包。
這個的原因是ack和bye包,主叫和被叫直接發送了,沒有經過repro。因為bye是不同的事務,bye的路徑依賴於RecordRoute,所以這個是repro沒有將自己插入到RecordRoute導致的。這個在配置中將ForceRecordRouting配成true,且RecordRouteUri配上就可以了。

resiprocate使用入門:內網搭建基於repro的sipproxy測試環境