亚洲综合伊人,成人欧美一区二区三区视频不卡,欧美日韩在线高清,日韩国产午夜一区二区三区,大胆美女艺术,一级毛片毛片**毛片毛片,你瞅啥图片

您當(dāng)前的位置是:  首頁(yè) > 資訊 > 文章精選 >
 首頁(yè) > 資訊 > 文章精選 >

OpenSIPS學(xué)習(xí)筆記-如何通過OpenSIPS-媒體服務(wù)器-語(yǔ)音網(wǎng)關(guān)實(shí)現(xiàn)落地呼叫

2021-02-07 13:35:12   作者: james.zhu    來源:Asterisk開源派   評(píng)論:0  點(diǎn)擊:


  一般來說,OpenSIPS通過SIP trunk進(jìn)行純SIP網(wǎng)絡(luò)的呼叫的話,OpenSIPS平臺(tái)用戶之間的呼叫都無(wú)需落地。但是,如果用戶想通過OpenSIPS進(jìn)行落地呼叫的話,OpenSIPS必須對(duì)接一個(gè)網(wǎng)關(guān)或者媒體服務(wù)器來支持落地呼叫。這里,因?yàn)镺penSIPS對(duì)接語(yǔ)音網(wǎng)關(guān)的話,網(wǎng)關(guān)支持的業(yè)務(wù)功能相對(duì)比較少并且缺乏媒體服務(wù)器的支持,語(yǔ)音提示和編碼轉(zhuǎn)換都存在一定的問題。因此,很多呼叫功能通過OpenSIPS對(duì)接一個(gè)媒體服務(wù)器的方式實(shí)現(xiàn),然后,媒體服務(wù)器再對(duì)接語(yǔ)音網(wǎng)關(guān)或者語(yǔ)音板卡出局。用戶如果需要測(cè)試通過OpenSIPS加媒體服務(wù)器落地的呼叫流程,用戶需要經(jīng)過幾個(gè)步驟來實(shí)現(xiàn),它們分別是修改cfg 配置文件,通過界面添加媒體網(wǎng)關(guān)服務(wù)器,修改界面配置文件,通過界面添加ACL組,不同SIP賬號(hào)呼叫測(cè)試。以下是一個(gè)簡(jiǎn)單的呼叫測(cè)試流程,包括SIP終端,OpenSIPS,Asterisk媒體服務(wù)器和網(wǎng)關(guān)設(shè)備。
  說明,因?yàn)楸疚闹攸c(diǎn)是介紹opensips中ACL配置,所以忽略了Asterisk和網(wǎng)關(guān)配置的流程。在本文章中,筆者已經(jīng)假設(shè)用戶安裝好了opensips,其控制界面,asterisk和網(wǎng)關(guān)設(shè)備。如果讀者沒有安裝此環(huán)境,請(qǐng)按照歷史文檔中的介紹安裝OpenSIPS,控制界面和asterisk以及網(wǎng)關(guān)配置。
  1opensips cfg文件配置
  如果用戶要實(shí)現(xiàn)opensips呼叫媒體服務(wù)器進(jìn)行落地處理的話,需要添加配置文件,修改必要的設(shè)置。首先,添加權(quán)限模塊:
  loadmodule "permissions.so"
  modparam("permissions", "db_url",
  "mysql://opensips:opensipsrw@localhost/opensips")
  loadmodule "group.so"
  modparam("group", "db_url",
  "mysql://opensips:opensipsrw@localhost/opensips")
  添加了權(quán)限模塊和組模塊的處理以后,用戶需要在撥號(hào)規(guī)則中對(duì)呼出號(hào)碼進(jìn)行判斷來決定媒體服務(wù)器的動(dòng)作或者是否有權(quán)限呼出的規(guī)則設(shè)置。注意,這里的通配符是一個(gè)示例的通配符,用戶需要根據(jù)自己本地號(hào)碼和國(guó)際長(zhǎng)途的設(shè)置來進(jìn)行處理,包括前綴號(hào)碼設(shè)置等。在這里處理了這些流程以后,此呼叫抵達(dá)媒體服務(wù)器以后就無(wú)需再進(jìn)行判斷驗(yàn)證。當(dāng)然,如果用戶仍然想在媒體服務(wù)器做號(hào)碼處理,也可以根據(jù)自己的業(yè)務(wù)邏輯在媒體服務(wù)器進(jìn)行處理。這里,在主路由邏輯中添加一個(gè)簽權(quán)認(rèn)證的流程:
  ## authenticate and authorize
  if (check_source_address(0)) {
  # caller is a gateway
  } else
  if (is_from_local()) {
  # caller is local
  # authenticate if from local subscriber
  # authenticate all initial non-REGISTER request that pretend to be
  # generated by local subscriber (domain from FROM URI is local)
  if (!proxy_authorize("", "subscriber")) {
  proxy_challenge("", "auth");
  exit;
  }
  if (!$au==$fU) {
  send_reply(403,"Forbidden auth ID");
  exit;
  }
  consume_credentials();
  # caller authenticated
  } else {
  # if caller is not local, then called number must be local
  if (!is_uri_host_local()) {
  send_reply(403,"Rely forbidden");
  exit;
  }
  }
  然后分別添加local 呼叫,國(guó)際長(zhǎng)途呼叫和號(hào)碼格式的判斷:
  if ($rU=~"^[5-9][0-9]{6}$") {  // 是否是本地號(hào)碼,用戶根據(jù)本地號(hào)碼位數(shù)做調(diào)整。
  if (db_is_user_in("credentials","local")) {
  prefix("0075"); // 前綴是0755 或者其他的號(hào)碼前綴
  route(to_pstn);
  } else {
  send_reply(403, "No permissions for local calls");
  exit;
  }
  }
  國(guó)內(nèi)長(zhǎng)途的判斷,通過區(qū)號(hào)加號(hào)碼位數(shù)判斷:
  # 長(zhǎng)途電話區(qū)號(hào)+號(hào)碼位數(shù),具體位數(shù)修改通配符設(shè)置
  if ($rU=~"^[0-9][0-9][0-9][2-9][0-9]{6}$") {
  if (db_is_user_in("credentials","ld")) {
  prefix("1");
  route(to_pstn);
  } else {
  send_reply(403, "No permissions for long distance");
  exit;
  }
  國(guó)際長(zhǎng)途呼叫是否符合E164的號(hào)碼格式的判斷,例如呼叫日本長(zhǎng)途電話,或者其他的國(guó)家號(hào)碼,具體號(hào)碼位數(shù)需要自己修改。
  if ($rU=~"^081[0-9]*$") {
  if (db_is_user_in("credentials","int")) {
  strip(3);
  route(to_pstn);
  } else {
  send_reply(403, "No permissions for international calls");
  exit;
  }
  }
  在路由到PSTN的模塊中添加一個(gè)呼叫媒體服務(wù)器的路由規(guī)則。保存配置文件以后,然后重新啟動(dòng)OpenSIPS服務(wù)器。
  route[to_pstn] {
  # routing to the pstn (Use the IP address of the gateway)
  # Please use as the IP address one of the gateways provided
  sethostport("sip.freesbc.cn:5600"); // 這里也可以是媒體服務(wù)器的IP地址。
  t_relay();
  exit;
  }
  2通過opensips 操作界面添加媒體服務(wù)器
  完成了cfg文件的配置以后,在opensips的控制界面添加一個(gè)路由規(guī)則。
  3修改opensips 操作界面的配置
  因?yàn)镺penSIPS作為一個(gè)運(yùn)營(yíng)級(jí)的軟交換,它要實(shí)時(shí)處理幾千或者上萬(wàn)次的呼叫,每一個(gè)呼叫都要經(jīng)過呼叫簽權(quán)認(rèn)證。為了控制呼叫的認(rèn)證流程,OpenSIPS使用ACL來對(duì)呼叫認(rèn)證進(jìn)行管理。ACL本身可以支持非?焖俚膶(shí)時(shí)處理流程。在ACL管理的模塊中修改配置文件,支持grp表的配置設(shè)置。用戶然后修改control panel的PHP代碼,增加本地呼叫,長(zhǎng)途呼叫和國(guó)際長(zhǎng)途的規(guī)則設(shè)置。
  讀者使用ACL時(shí)要注意,前面筆者已經(jīng)說明。OpenSIPS作為一個(gè)運(yùn)營(yíng)級(jí)的平臺(tái),它可以支持上千或者上萬(wàn)的呼叫并發(fā)。而且一個(gè)SIP用戶如果需要執(zhí)行ACL的話,賬號(hào)本身可能涉及多個(gè)SQL 查詢流程。因此,ACL可能會(huì)引起數(shù)據(jù)庫(kù)查詢帶來的效率問題,ACL頻繁訪問會(huì)使得數(shù)據(jù)庫(kù)負(fù)載增加,從而會(huì)一致影響OpenSIPS的性能。為了提高ACL的執(zhí)行性能,ACL模塊引入了group的概念,通過ACL grp來提高查詢用戶的速度和優(yōu)化ACL的查詢性能。具體語(yǔ)法如下:
  4添加ACL 控制組
  通過控制界面,修改ACL的呼叫權(quán)限控制。針對(duì)不同的SIP 賬號(hào)做不同的處理設(shè)置。ld表示僅支持長(zhǎng)途呼叫,local表示僅支持本地呼叫,int表示僅支持國(guó)際長(zhǎng)途呼叫。
  這里,1000 用戶可以呼叫本地用戶,呼叫長(zhǎng)途;1001用戶可以呼叫本地和國(guó)際長(zhǎng)途電話。對(duì)用戶ACL設(shè)置中,ACL支持了多種用戶驗(yàn)證的查詢方式,cfg腳本可以通過這幾種方式實(shí)現(xiàn)快速查詢,無(wú)需通過數(shù)據(jù)庫(kù)訪問來實(shí)現(xiàn)查詢,所以,這些查詢方式可能更加高效。它們都可以通過avpops,aaa_radius, 和ldap模塊實(shí)現(xiàn)支持。首先,ACL支持了binary code方式,使用一個(gè)bit就可以表示用戶的認(rèn)證權(quán)限,通過bitmask支持多種呼叫權(quán)限的設(shè)置。第一個(gè)bit表示賬號(hào)停用,第二個(gè)bit表示允許voip呼叫,第三個(gè)bit表示允許PSTN國(guó)內(nèi)呼叫,第四個(gè)bit表示允許國(guó)際呼叫。在cfg中對(duì)avp操作實(shí)現(xiàn)ACL流程的處理:
  相當(dāng)于binary code來說,使用access level coding方式,用戶可能更加容易明白。ACL支持了Level encoding(0,1,2,3),這里0表示賬號(hào)停用,1表示使用VOIP呼叫,2表示允許國(guó)內(nèi)PSTN呼叫,3表示允許國(guó)際呼叫等。
  但是,如果使用binary code或者access level設(shè)置呼叫權(quán)限的話,它仍然對(duì)用戶來說不是非常友好,畢竟,binary code 相對(duì)比較難以理解。具有一定含義的字符串對(duì)于大部分用戶來說是非常易懂的,而且也可以支持腳本執(zhí)行檢測(cè)。使用字符串的ACL 方式中,d表示SIP用戶停用,v表示允許voip呼叫,n表示允許國(guó)內(nèi)PSTN呼叫,i表示允許用戶執(zhí)行國(guó)際呼叫。
  5媒體服務(wù)器設(shè)置以及呼叫測(cè)試
  這里的媒體服務(wù)器是一個(gè)Asterisk服務(wù)器,通過IP呼叫到Asterisk以后,Asterisk做路由處理,然后呼叫鼎信的FXO語(yǔ)音網(wǎng)關(guān),最后語(yǔ)音網(wǎng)關(guān)呼叫落地運(yùn)營(yíng)商的PSTN線路,直到最終用戶終端。如果用戶安裝FreePBX作為一個(gè)IPPBX的話,用戶可以通過界面直接配置一個(gè)pjsip的IP呼叫 trunk,直接對(duì)接到鼎信網(wǎng)關(guān)地址。然后再通過呼出路由規(guī)則做一個(gè)呼出路由就可以實(shí)現(xiàn)完整的通過OpenSIPS網(wǎng)關(guān)媒體服務(wù)器落地的流程。注意,Asterisk服務(wù)器也可以不經(jīng)過PSTN落地,呼叫真實(shí)運(yùn)營(yíng)商的線路,也可以播放一個(gè)語(yǔ)音提示來做不同呼叫路由的測(cè)試。
  OpenSIPS的SIP賬號(hào)可以首先注冊(cè)(使用1000用戶/1001用戶分別測(cè)試不同號(hào)碼)到OpenSIPS服務(wù)器,然后通過呼叫本地號(hào)碼,長(zhǎng)途號(hào)碼和國(guó)際長(zhǎng)途來實(shí)現(xiàn)測(cè)試流程。如果asterisk媒體服務(wù)器設(shè)置為一個(gè)偽落地環(huán)境,對(duì)SIP 賬號(hào)播放語(yǔ)音的話,成功的呼叫就會(huì)聽到不同的語(yǔ)音提示音。如果媒體服務(wù)器對(duì)接了語(yǔ)音網(wǎng)關(guān)的話,根據(jù)號(hào)碼位數(shù)和格式,運(yùn)營(yíng)商會(huì)呼叫到本地,國(guó)內(nèi)或者國(guó)際用戶終端。
  6總結(jié)
  OpenSIPS作為一個(gè)運(yùn)營(yíng)級(jí)的軟交換,它本身需要一個(gè)ACL模塊對(duì)用戶呼叫進(jìn)行認(rèn)證設(shè)置。根據(jù)不同的用戶路由到不同的媒體服務(wù)器和落地網(wǎng)關(guān)。本文章通過OpenSIPS對(duì)接Asterisk和網(wǎng)關(guān)的方式說明如何在OpenSIPS平臺(tái)通過ACL來對(duì)用戶進(jìn)行認(rèn)證流程。其中,ACL通過界面,組設(shè)置和ACL設(shè)置實(shí)現(xiàn)SIP賬號(hào)呼叫的驗(yàn)證。在本文章中,筆者介紹了如何修改cfg文件對(duì)呼叫做不同的判斷,同時(shí)介紹了通過OpenSIPS界面做路由和ACL設(shè)置。另外,針對(duì)ACL策略的設(shè)置方式,筆者做了一些深入的分析,包括各種設(shè)置方式的優(yōu)缺點(diǎn)。
  OpenSIPS用戶通過物理終端可以對(duì)ACL設(shè)置進(jìn)行呼叫測(cè)試。通過撥打不同的號(hào)碼來檢測(cè)ACL的正確性。
  參考資料:
  www.opensips.org
  www.freesbc.cn
  www.freepbx.org.cn
  • 融合通信/IPPBX/FreePBX商業(yè)解決方案:www.hiastar.com
  • 最新Asterisk完整中文用戶手冊(cè)詳解:www.asterisk.org.cn
  • Freepbx/FreeSBC技術(shù)文檔: www.freepbx.org.cn
  • 如何使用免費(fèi)會(huì)話邊界控制器-FreeSBC,qq技術(shù)分享群:334023047
  • 關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的通信行業(yè)技術(shù)分享
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

專題

CTI論壇會(huì)員企業(yè)

容城县| 和硕县| 莱州市| 当涂县| 万源市| 西华县| 京山县| 聂荣县| 班玛县| 沈阳市| 洞头县| 阿拉善盟| 信阳市| 车致| 大洼县| 鸡西市| 灵宝市| 万年县| 阿拉善右旗| 西宁市| 河津市| 封丘县| 大同县| 白山市| 宁武县| 洪湖市| 原平市| 涿鹿县| 邵阳市| 当雄县| 资阳市| 桐乡市| 汝南县| 汨罗市| 新建县| 邹平县| 扶沟县| 双峰县| 林西县| 乌海市| 武川县|