您当前的位置是:  首页 > 资讯 > 文章精选 >
 首页 > 资讯 > 文章精选 >

OpenSIP学习笔记-如何通过控制界面添加多租户用户和用户别名

2021-01-25 09:00:02   作者: james.zhu   来源: Asterisk开源派   评论:0  点击:


  多租户的SIP账号和别名在电话系统中会经常使用。一台SIP服务器支持多个企业用户的业务,这也是我们经常遇到的场景。另外,很多时候,因为分机号码和分机用户名称以及号码长度根据不同的场景设置方式也不同。今天,笔者针对OpenSIPS环境中的多租户方式和别名设置做一个比较全面的介绍,读者可以通过OpenSIPS界面Control Panel添加管理多租户的用户和别名。为了实现以上这两种功能,我们大概需要经过以下几个步骤的配置,包括安装mysql数据库,配置cfg文件,创建用户表等流程。
  说明,笔者根据以前安装流程来实现的OpenSIPS安装配置,所以,默认环境和以下使用的很多命令仍然是按照默认环境来执行的。用户需要首先确保安装环境更新,以便能够顺利安装必要的支持包。具体配置说明,请参考:
  最完整快速的安装方式安装开源OpenSIPS-3.1和CP控制界面-class 8
  1安装mysql数据库和JSON
  一般来说,SIP服务提供商或者企业电话系统的呼叫都需要经过一定的数据库安全认证。OpenSIPS 的SIP用户可以使用无密码的呼叫设置,但是为了保证其安全,绝大部分的场景中仍然需要用户密码设置。用户需要首先确认支持包安装成功,执行以下命令检查:
  apt-get install opensips-mysql-module
  ls /usr/lib/x86_64-linux-gnu/opensips/modules/db_mysql.so
  安装成功用户,然后安装JSON接口支持包(因为界面系统需要通过此接口连接):
  apt-get install opensips-http-modules
  ls /usr/lib/x86_64-linux-gnu/opensips/modules/httpd.so
  2创建数据库相关表
  用户通过CLI命令安装数据库的表:
  opensips-cli -x database create opensips_new
  输入DB URL:mysql://localhost。执行数据库创建流程。注意,这里的数据库用户名称和密码:opensips:opensipsrw,用户也可以使用其他的用户名称,但是一定要注意在后续的其他配置中做相应修改保证其安全性。
  #mysql
  > CREATE USER 'opensips'@'localhost' IDENTIFIED BY 'opensipsrw';
  > GRANT ALL PRIVILEGES ON opensips.* TO 'opensips'@'localhost';
  > FLUSH PRIVILEGES;
  > QUIT
  3修改cfg文件支持注册和呼叫请求流程
  数据库和支持包安装好以后,我们开始配置和用户注册,呼叫相关的流程。opensips的cfg文件需要增加一些必要的配置。首先,cfg文件需要加载支持模块:
  loadmodule "httpd.so"
  modparam("httpd", "port", 8080)  // GUI 端口
  loadmodule "mi_http.so"
  modparam("mi_http", "root", "json") // 支持json
  加载mysql 数据库模块:
  loadmodule "db_mysql.so"
  设置相关模块的参数设置,注意mysql数据库用户名称和密码
  modparam("usrloc", "working_mode_preset", "single-instance-sql-write-back")
  modparam("usrloc", "db_url",
  "mysql://opensips:opensipsrw@localhost/opensips")
  增加auth模块对SIP用户的支持,注意数据库的用户名称和密码
  loadmodule "auth.so"
  loadmodule "auth_db.so"
  modparam("auth_db", "calculate_ha1", 1)
  modparam("auth_db", "password_column", "password")
  modparam("auth_db|uri", "db_url",
  "mysql://opensips:opensipsrw@localhost/opensips")
  modparam("auth_db", "load_credentials", "")
  在相关auth的检查脚本中增加检测:
  if (!proxy_authorize("", "subscriber")) {
  proxy_challenge("", "auth");
  exit;
  }
  if (!$au==$fU) {
  send_reply(403,"Forbidden auth ID");
  exit;
  }
  consume_credentials();
  if (!www_authorize("", "subscriber")) {
  www_challenge("", "auth");
  exit;
  }
  if (!$au==$tU) {
  send_reply(403,"Forbidden auth ID");
  exit;
  }
  配置文件修改以后,用户保存配置文件,然后重新启动opensips服务器。
  4在opensips-cli 添加必要参数支持
  用户编辑opensips-cli.cfg文件,添加数据库的参数支持,注意数据库用户和密码设置和创建数据库时的匹配。
  database_url: mysql://opensips:opensipsrw@localhost
  database_name: opensips
  database_modules: ALL
  domain: sip.domain.com // 也可以是其他的domain,sip.freepbx.cn
  plain_text_passwords: true
  注意,如果还有opensips.org的话,要删除。通过CLI命令添加两个SIP用户和密码:
  opensips-cli -x user add 1000 freepbx
  opensips-cli -x user add 1001 freepbx
  重新启动原来使用的两个软电话分机,重新注册,测试双方的呼叫。如果一切配置成功的话,双方的呼叫是成功的。如果用户想删除注册信息的话,也可以执行以下命令:
  opensips-cli -x mi ul_rm location XXXX // 删除SIP账号 XXXX
  或者使用dump命令检查location的状态:
  opensips-cli -x mi ul_dump
  5OpenSIPS的多租户配置支持
  很多时候,如果运营商做IPPBX的运营的话,它们可能会在OpenSIPS平台配置多租户的SIP用户帐户支持不同的企业客户。这里,一般的多租户就是指对多个域名的支持,企业用户通过自己的域名来定义用户,用户具有不同域名下的SIP账号。例如,1000:@sip.A.com和1000@sip.B.com 是完全不同的两个SIP账号,分别属于两个公司的SIP账号。笔者这里不过多介绍关于多租户运营的优缺点,用户可以通过网上资料来获得一些背景知识。通过界面设置多租户的SIP用户帐户需要修改几个必要的配置文件。首先需要修改GUI配置文件的环境支持密码为明文的密码设置:
  通过vim 编辑以下文件:
  /var/www/html/opensips-cp/config/tools/users/user_management/local.inc.php
  Set $config->passwd_mode=0
  保存此文件。然后用户需要修改cfg配置文件,增加相关的模块加载和测试配置。
  loadmodule "domain.so"
  modparam("domain", "db_url",
  "mysql://opensips:opensipsrw@localhost/opensips") // 注意密码
  modparam("domain", "db_mode", 1) # 使用catching
  modparam("auth_db|usrloc", "use_domain", 1)
  在opensips.cfg中增加其他的判断脚本:
  ## authenticate and authorize
  #if(is_myself("$fd")) { /*no multidomain version*/
  if(is_from_local()) { /*multidomain version*/
  修改判断设置:
  ##if (!is_myself("$rd")) {
  if (!is_uri_host_local()) {
  保存cfg配置文件,重新启动opensips,然后通过命令查看启动状态:
  systemctl status opensips
  如果有关于SIP账号的domain错误的话,用户可能会注册失败。用户可以删除数据库的location再次测试。如果前面的配置成功配置以后,用户可以通过界面来添加不同的domain:
  每次添加domain以后,因为模块使用了catched设置,用户需要点击”Reload on Server“ 服务器来重新加载模块数据,从数据库更新数据。
  用户添加了doamin以后,也可以通过界面添加此域名下的多租户的SIP账号,例如1000,1001。
 
  用户在注册成功以后,如果管理员想查看contact的信息,可以点击Contacts查看SIP的状态消息:
  
  
  管理员也可以删除contacts:
  
  6OpenSIPS添加SIP账号用户别名
  别名是SIP账号中一种比较实用功能。在SIP平台中,如果PSTN呼入以后,可以作为一个DID的转发呼叫然后路由到SIP服务器的SIP账号中。用户也可以根据不同的业务组对SIP账号定义不同的名称。简单来说,呼叫方呼叫目的地号码时可以使用不同的简化的号码或者其他别名进行呼叫,而不呼叫原号码。SIP账号使用别名可以方便呼叫方拨号,也可以实现对呼入号码的DID路由。在opensips的平台环境中,别名的URL通过opensips转译成一个本地的SIP账号,通过数据库dbaliases lookup的查询方式实现Alias-URI 和原始Original-URI的处理。
  如果需要通过opensips实现别名支持的话,我们需要加载dbaliases和其相关的参数配置选项。打开opensips.cfg 配置文件,添加别名数据库的参数配置:
  loadmodule "alias_db.so"
  modparam("alias_db", "db_url",
  "mysql://opensips:opensipsrw@localhost/opensips") // 注意数据库密码
  #apply DB based aliases (uncomment to enable)
  alias_db_lookup("dbaliases");
  保存cfg文件,重新启动opensips,然后对SIP账号1000添加别名。这里的别名可以是任意的号码,号码格式也可以通过界面配置文件进行自定义的格式支持。用户可以根据自己的业务需求对SIP 1000账号添加一个别名,例如186XXX或者其他的号码,方便记忆,发布使用管理即可。
  
  
  如果用户需要对别名号码实现号码格式的验证支持的话,用户可以修改php配置文件:
  vim:opensips-cp/config/tools/users/alias_management/local.inc.php
  $config->alias_format = "/^[0-9a-zA-Z]+/"; // 强制的号码格式
  保存php文件,重新刷新界面就可以实现别名号码格式的强制设置。
  修改了别名以后,我们使用另外一个SIP 账号,例如1001,呼叫设置了别名为其他号码的,例如186123。如果配置成功的话,SIP 1000就会振铃。说明,SIP 1000支持的别名设置186123是成功的。
  以上是opensips的多租户的实现方式,当然也可以通过SBC或者freesbc支持的不同的多租户方式实现对内网IPPBX的内网管理方式。freesbc/prosbc作为一个多租户的前端服务器,呼叫进入以后,通过不同的域名路由到不同的内网的IPPBX,IPPBX各自独立。外网SIP账号通过域名方式加FreeSBC地址来实现注册。
  freesbc多租户IPPBX支持
  7总结
  本章节主要介绍了关于通过mysql数据库实现SIP账号认证的配置,多租户设置和别名设置。为了实现以上的配置,opensips需要首先安装mysql数据库,创建数据库和创建用户表,并且需要在cfg文件中加载数据库和相关的参数。为了实现多租户的支持,opensips需要加载多租户模块,然后通过界面来创建一个多租户,然后按照多租户来创建一个SIP账号。最后,笔者介绍了关于别名的使用和其配置方式以及测试结果。通过以上比较详细的介绍,希望opensips用户能够熟悉关于多租户的实现和SIP别名的管理。
  参考资料:
  https://docs.telcobridges.com/tbwiki/FreeSBC:_Multiple_Domains/Hosted_PBXs_Configuration
  www.freesbc.cn
  www.opensips.org
  融合通信/IPPBX/FreePBX商业解决方案:www.hiastar.com
  最新Asterisk完整中文用户手册详解:www.asterisk.org.cn
  Freepbx/FreeSBC技术文档: www.freepbx.org.cn
  如何使用免费会话边界控制器-FreeSBC,qq技术分享群:334023047
  关注微信公众号:asterisk-cn,获得有价值的通信行业技术分享






 
【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

相关阅读:

专题

CTI论坛会员企业