概述
freeswitch是一款簡單好用的VOIP開源軟交換平臺。
現(xiàn)在的VOIP服務(wù)越來越傾向于云端服務(wù)暂雹,包括呼叫中心云服務(wù),線路云平臺。
而云平臺對多個客戶的服務(wù)就需要做好隔離田炭,包括數(shù)據(jù)隔離、線路隔離漓柑、服務(wù)隔離等教硫。
freeswitch內(nèi)部的多租戶模式根據(jù)不同用戶SIP域的配置,來實現(xiàn)呼叫的服務(wù)隔離辆布。
環(huán)境
centos:CentOS? release 7.0 (Final)或以上版本
freeswitch:v1.10.7
GCC:4.8.5
多租戶模式
云端的服務(wù)不可能只提供給一個客戶使用瞬矩,如何在服務(wù)上區(qū)分客戶,做到數(shù)據(jù)和資源的隔離锋玲。
服務(wù)中的多租戶模式意味著多個客戶可以同時使用一套服務(wù)景用,但又要求不會互相影響。
對于VOIP服務(wù)來說惭蹂,多租戶代表在整個服務(wù)系統(tǒng)中伞插,多家公司通過一定的規(guī)則實現(xiàn)號碼、路由規(guī)則盾碗、資源的互相隔離媚污,同時又互不影響,最大程度的利用好有限的資源廷雅。
對于云端PBX來說耗美,多個客戶甚至可以使用相同的sip賬號注冊和呼叫,又各自獨立航缀。
fs已經(jīng)實現(xiàn)了通過SIP域的方式商架,達到多租戶模式的效果。
配置方案
復(fù)制并修改注冊端口文件conf/sip_profile/internal5062.xml谬盐,不再強制修改用戶注冊SIP域為"$${domain}"甸私。
<!-- <param name="force-register-domain" value="$${domain}"/> -->
<!-- <param name="force-subscription-domain" value="$${domain}"/> -->
<!-- <param name="force-register-db-domain" value="$${domain}"/> -->
修改sip終端10011賬戶注冊信息,使用“test123.com”的SIP域注冊飞傀。
domain修改為”test123.com”皇型。
domain proxy的send outbound via設(shè)置為”10.55.55.138:5062”。
10011終端的注冊信令如下砸烦。
REGISTER sip:test123.com SIP/2.0
Via: SIP/2.0/UDP 10.9.0.16:14542;branch=z9hG4bK-d87543-ef1e50670e66bb09-1--d87543-;rport
Max-Forwards: 70
Contact: <sip:10011@10.9.0.16:14542;rinstance=1937ab4fc61e1076>
To: "10011"<sip:10011@test123.com>
From: "10011"<sip:10011@test123.com>;tag=0479973d
Call-ID: MzU2MjgzMmI2NWM3ZmM2YTE5YTJmYzZmM2E2NTdlZjM.
CSeq: 1 REGISTER
Expires: 3600
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: eyeBeam release 1004p stamp 31962
Content-Length: 0
freeswitch注冊告警信息弃鸦,注冊失敗,因為還沒有設(shè)置”test123.com”對應(yīng)的SIP域信息幢痘。
2022-12-12 16:05:17.568684 [WARNING] sofia_reg.c:2973 Can't find user [10011@test123.com] from 10.9.0.16
You must define a domain called 'test123.com' in your directory and add a user with the id="10011" attribute
and you must configure your device to use the proper domain in it's authentication credentials.
復(fù)制并修改conf/directory/default5062.xml唬格,設(shè)置”test123.com”對應(yīng)的SIP域信息,域用戶的user_context使用test123.com。
<domain name="test123.com">
...
<variables>
? <variable name="user_context" value="test123.com"/>
</variables>
...
? <group name="default">
? ? <users>
? ? ? <X-PRE-PROCESS cmd="include" data="default5062/*.xml"/>
? ? </users>
? </group>
復(fù)制并修改conf/directory/default5062/10011.xml购岗,刪除賬戶默認(rèn)的user_context設(shè)置汰聋,統(tǒng)一使用SIP域設(shè)置的user_context。
刪除行<variable name="user_context" value="default"/>
修改conf/dialplan/test.xml撥號計劃喊积,增加context為test123.com的呼叫流程烹困。
<context name="test123.com">
? ? <extension name="test123">
? ? <condition field="destination_number" expression="^(\d+)$">
? ? ? ? ? ? <action application="bridge" data="user/$1@test123.com"/>
? ? ? ? </condition>
? ? </extension>
</context>
測試
使用10011呼叫1002,測試日志如下乾吻。
2022-12-12 17:29:03.375298 [INFO] mod_dialplan_xml.c:637 Processing 10011 <10011>->1002 in context test123.com
Dialplan: sofia/internal5062/10011@test123.com parsing [test123.com->test123] continue=false
Dialplan: sofia/internal5062/10011@test123.com Regex (PASS) [test123] destination_number(1002) =~ /^(\d+)$/ break=on-false
Dialplan: sofia/internal5062/10011@test123.com Action bridge(user/1002@test123.com)
10011賬戶的呼出流程使用“context test123.com”的撥號計劃髓梅。
總結(jié)
freeswitch可以通過不同的SIP域配置實現(xiàn)多租戶模式,針對云端服務(wù)的用戶配置有一定的參考意義绎签。
多租戶模式的呼出流程通過注冊SIP域?qū)崿F(xiàn)隔離枯饿,回呼流程則需要根據(jù)號碼或端口的方式來區(qū)分目標(biāo)SIP域。
空空如常
求真得真