resiprocate使用入門:內網搭建基於repro的sipproxy測試環境
測試環境
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測試環境