深圳市宝安区华美居

0086-18665301040

Kamailio实现开源IPPBX托管多租户部署解决方案

Kamailio实现开源IPPBX托管多租户部署解决方案

企业云服务是目前企业融合通信中正在发展的新型业务。企业IPPBX云托管服务的需求越来越多,目前的很多解决方案都是基于开源的软交换平台结合一些运营商的线路资源来实现。各种解决方案都各有利弊,我们不在这里做过多讨论。今天,我们主要介绍如何使用开源的dSIPRouter结合FreePBX实现托管和多租户服务的简单安装配置流程。

dSIPRouter+FreePBX

01

关于dSIPRouter的安装准备

dSIPRouter是基于Kamailio开发的界面管理系统,其主要功能包括:SIP trunk的对接管理,运营商管理,企业IPPBX对接管理。目前主要支持的开源IPPBX是FreePBX和fusionpbx。

Kamailio实现开源IPPBX托管多租户部署解决方案

dSIPRouter解决了Kamailio用户对接媒体服务器的困难,用户可以比较轻松地实现企业IPPBX托管,多租户配置和IPPBX的集群。其安装步骤也非常简单,主要支持Centos和Dedian平台。用户可以在本地机房部署也可以在云平台部署。在Centos-7 平台部署的步骤为:

yum install -y git curl // Centos-7 最小化安装以后,安装支持包cd /optgit clone https://github.com/dOpensource/dsiprouter.gitcd dsiprouter./dsiprouter.sh install // 执行脚本

02

dSIPRouter安装选项和步骤安装配置

dSIPRouter 支持了多种安装选项,可以支持SIP/NAT的问题。用户安装时根据自己的配置选项来选择,当然如果后期需要更新的话,用户也可以根据要求通过脚本再次更新。其选项包括:

  • Proxy SIP Traffic Only (笔者的测试环境仅选择此项)

  • Proxy SIP Traffic and Audio when it detects a SIP Agent is behind NAT

  • Proxy SIP Traffic, Audio and it configures the system to work properly when the PBX’s and dSIPRouter are behind a NAT.

经过脚本执行以后,如果安装成功的话,系统会显示最后的成功安装信息,外网IP地址,内网IP地址和admin密码。注意,这里的管理员的端口号都是5000,用户如果需要从外网访问的话,需要路由器开启此端口。

Kamailio实现开源IPPBX托管多租户部署解决方案

通过IP地址和端口号提示,可以访问dSIPRouter的界面:

Kamailio实现开源IPPBX托管多租户部署解决方案

如果不能访问的话,用户可能需要重新启动脚本dsiprouter.sh restart或者服务器重新测试。

接下来登录此界面,配置IPPBX和domain,添加FreePBX测试机器的IP地址。当然,用户必须首先安装好IPPBX,或者后续安装完成后,修改这里的IPPBX地址。这里的domain是我们测试的两个公司的domain,用户也可以添加多个公司的domain,通过不同的domain实现对分机用户的区分管理。例如,SIP 分机用户100,可以配置在100@hiastar.com, 也可以配置其他的100@freepbx.cn, 这样就可以区分不同的租户。用户注册SIP账号时通过不同的域名必须加以区分。

Kamailio实现开源IPPBX托管多租户部署解决方案

Kamailio实现开源IPPBX托管多租户部署解决方案

Kamailio实现开源IPPBX托管多租户部署解决方案

03

FreePBX创建分机,注册分机

完成dSIPRouter配置以后,用户就可以安装配置FreePBX。比较简单的办法就是一个可以直接在本地下载FreePBX ISO光盘,然后安装。另外,用户可以通过脚本在阿里云进行安装。我们公司提供了脚本安装的程序,用户可以自己查找。用户也可以我们的官方文档,一步步在阿里云安装FreePBX。安装完成以后,登录的界面如下:

Kamailio实现开源IPPBX托管多租户部署解决方案

新安装的系统,界面会弹出一些其他的业务的提示广告,如果用户不用的话,可以跳过。接下来,我们在界面上配置SIP账号。我们通过PJSIP的驱动来配置SIP账号。这里,我已经配置了两个SIP分机来做测试。

Kamailio实现开源IPPBX托管多租户部署解决方案

04

使用SIP软电话测试呼叫流程

使用软电话测试呼叫。这里,我们使用了Zoiper 软电话来测试的呼叫。用户需要填入FreePBX的SIP 用户帐户名称和密码。注意填写的内容格式。如果正常注册以后,就可以测试分机之间的呼叫。

Kamailio实现开源IPPBX托管多租户部署解决方案

注册成功后状态信息:

Kamailio实现开源IPPBX托管多租户部署解决方案

05

PJSIP show hiastory排查工具

Asterisk和FreePBX提供了多种方式的排查工具,通过执行命令或者工具可以轻松判断分机的注册状态。PJSIP show hiastory是Asterisk最新的一个PJSIP 排查命令,此命令非常好用。不像以前的工具和日志,系统显示的没有一定的格式,用户很难完整查看一个SIP 事件的完整流程。PJSIP show hiastory可以完整显示所有呼叫流程,也可以仅显示一个entry的流程,对用户来说是非常方便的工具。首先,需要通过Asterisk CLI 开启PJSIP show hiastory 排查根据,然后可以通过命令输出日志信息,还可以查看某一个特定的entry 数据跟踪信息。

Kamailio实现开源IPPBX托管多租户部署解决方案

显示历史记录:

Kamailio实现开源IPPBX托管多租户部署解决方案

显示某一个特定的entry,例如注册信息:

Kamailio实现开源IPPBX托管多租户部署解决方案

通过freepbx的显示报表也可以检查实时的PJSIP的注册状态(地址是Kamailio地址):

Kamailio实现开源IPPBX托管多租户部署解决方案

呼叫以后,用户也可以通过界面来查看CDR呼叫记录信息:

Kamailio实现开源IPPBX托管多租户部署解决方案

呼叫状态中,终端显示:

Kamailio实现开源IPPBX托管多租户部署解决方案

06

Asterisk CLI 呼叫记录

Kamailio实现开源IPPBX托管多租户部署解决方案

07

Kamailio kamctl 排查工具

用户也可以通过dSIPRouter 系统的kamailio CL 命令来检查users,domain等相关信息:

Kamailio实现开源IPPBX托管多租户部署解决方案

检查用户和domain配置:

Kamailio实现开源IPPBX托管多租户部署解决方案

是否成功创建domain表:

Kamailio实现开源IPPBX托管多租户部署解决方案

08

dSIPRouter命令说明

支持了多种命令,用来控制系统重启,重新配置和备份等命令:

命令参数 用途
install [-rtpengine] installs dSIPRouter and the RTPEngine if you need to proxy RTP traffic.
install [-rtpengine] [-servernat] installs dSIPRouter and the RTPEngine if you need to proxy RTP traffic thats behind a NAT
start Starts dSIPRouter
stop Stops dSIPRouter from running
restart Restarts DSIPRouter after a stop
uninstall Uninstalls dSIPRouter

09

dSIPRouter 使用场景

dSIPRouter目前功能非常简单,但是相对比较实用。目前主要的应用场景包括:

  • SIP trunk的IP认证方式对接

  • SIP trunk的用户密码认证方式对接

  • 支持多租户FusionPBX对接方式,集群配置。

  • 支持多租户FreePBX对接方式,集群配置。

  • 支持话机终端自动部署

  • 呼入DID映射匹配管理

  • 运营商组配置管理

具体的配置细节,用户可以参考其官方文档。

10

dSIPRouter升级备份处理方式

如果用户需要对dSIPRouter进行升级的话,必须首先对其主要的系统文件和数据库进行备份。

首先,对数据库备份:

cd /opt/mysqldump kamailio > kamailio-bk.sql

然后执行删除命令:

cd /opt/dsiprouter./dsiprouter.sh uninstall

删除路径下的文件:

mv /dsiprouter /usr/local/src (moving directory)或者rm -r /dsiprouter (removing directory)

重新执行安装步骤,这里安装的是v0.51 版本,用户可以更新到最新版本(如果支持的话)

cd /opt/apt-get updateapt-get install -y git curlcd /optgit clone -b v0.51 https://github.com/dOpensource/dsiprouter.gitcd dsiprouter./dsiprouter.sh install

重新安装备份的数据库:

cd /opt/mysql  kamailio < kamailio-bk.sql

最后,完成数据库配置以后,重新启动系统:

cd /opt/disprouter/./dsiprouter.sh restart

11

关于dSIPRouter部署的其他讨论

在开源软交换领域,kamailio在很多的开源项目做作为一个集成的首先项目。其稳定的功能和技术团队成为其他项目集成时所考虑到重要因素。作为媒体服务器的前端,它几乎可以胜任很多SIP网络的功能:

  • 作为SBC,这里,Kamailio 可以作为SBC来实现NAT隐藏功能,和防攻击的功能。同样的原理,用户也可以通过配置RTP Engine来实现NAT支持。但是,这里的Kamailio不能支持编码转换的功能,编码转换需要在媒体服务器来实现。

  • 作为SIP网络的WebRTC网关来使用,在前面的章节中,我们已介绍过关于WebRTC的内容,用户可以参考。通过Kamailio的WebRTC功能实现和其他SIP服务器的对接。这里的dSIPRouter 目前界面暂不支持此功能,用户需要自己开发。

  • 支持SIP网络的集群处理支持Asterisk或者其他的媒体服务器实现开展。简单的集群方式例如我们现在的一台Kamailio下挂多台FreePBX或者FusionPBX的方式来实现。通过“Local Subscriber Table”实现FreePBX的集群方式。

  • 通过容器的方式完全实现Kamailio/媒体服务器的扩展。这种方式通过均衡负载模块对Asterisk媒体服务器实现灵活调动拓展。通过调度模块实现Kamailio/媒体服务器的集群。

kamailio-etcd-dispatcher

Kamailio实现开源IPPBX托管多租户部署解决方案

但是,这里用户能够遇到一个比较棘手的问题,如何部署新的软件版本,并且既能保证其版本的稳定性,又不会在新的部署过程中出现大的问题。在Kamailio的调度模块中增加一个cancary release的模块,让新的媒体服务器承担相对比较小比例的呼叫,如果呼叫失败也不会影响其他的业务,而且把风险降低到了最小。用户可以不断检测此新版本的稳定性,如果稳定性达到了其部署要求,则调度正常比例的呼叫到此服务器。

Kamailio实现开源IPPBX托管多租户部署解决方案

另外一种解决办法就是配置两套使用环境,新的呼叫进入到新环境(Blue)中。

Kamailio实现开源IPPBX托管多租户部署解决方案

上面我们提到的容器的Asterisk高可靠性解决办法使用了kamailio-etcd-dispatcher的调度模块,结合其他的组件来实现的基于容器的Asterisk集群解决方案。具体的实现方式,用户可以查阅参考资料的链接。

Kamailio实现开源IPPBX托管多租户部署解决方案

kamailio-etcd-dispatcher实现的方式比较简单,它可以通过命令直接添加媒体服务器的IP地址,也可以支持FreeSWITCH等其他的媒体服务器。

12

总结

在本文档中,我们具体介绍了如何通过Kamailio的界面管理系统dSIPROUTER实现对FreePBX/Asterisk的托管/多租户的支持。我们首先介绍了如何安装dSIPROUTER,然后介绍了如何配置IPPBX和终端,并且介绍了关于domain的配置。完成配置以后,用户需要创建SIP转换,通过软电话注册登录SIP账号,实现domain环境下的分机之间的呼叫流程。

在测试文档中,我们假设创建了两个domain,用户可以分别参加支持两种domain属性,实现了多租户的支持。

另外,因为条件所限,笔者没有测试SIP trunk和多家运营商或者线路的配置,用户可以添加线路和DID实现针对不同IPPBX的路由。dSIPRouter也可以支持fusionPBX(基于FreeSWITCH的界面系统),如果用户有一定的技术经验,也可以通过dSIPROUTER 配置来实现托管服务。

最后,因为很多用户对Kamailio使用有着严重的误解,用户可能是缺乏SIP相关的知识,在使用场景的选择上出现很多问题。笔者重点介绍了Kamailio的其他的用法和具有真正商业价值,可行的几种部署解决方案。这些方案可以作为商业解决方案的参考,并且也满足现代互联网的技术要求和趋势,希望可以对用户提供更多的解决问题的思路。

参考资料:

https://dsiprouter.readthedocs.io/en/latest/index.html

http://www.freepbx.org.cn/

https://github.com/dougbtv/kamailio-etcd-dispatcher

http://dougbtv.com/2015/05/21/high-availability-asterisk-coreos/

Kamailio实现开源IPPBX托管多租户部署解决方案

Kamailio实现开源IPPBX托管多租户部署解决方案

关注微信公众号:asterisk-cn,获得有价值的Asterisk行业分享

Asterisk freepbx 中文官方论坛:http://bbs.freepbx.cn/forum.php

Asterisk freepbx技术文档: www.freepbx.org.cn

融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com

Asterisk/FreePBX中国合作伙伴,官方qq技术分享群(3000千人):589995817

联系电话-18665301040
客服-3
客服-2
客服-1