首页 > Linux > 连接两套VoIP GSM网关实现漫游通话

连接两套VoIP GSM网关实现漫游通话

2014年10月10日 LTNS     访问次数 175 发表评论 阅读评论

在前面的两篇文章中已用 Raspberry Pi (RPI) 搭建 RasPBX、以及 ESXi5安装 PBX in a Flash (PIAF) 虚拟机,配合 E173上网卡初步完成了两套 VoIP GSM网关,接下来通过互联网把这两套网关连接起来以实现漫游通话,网络连接示意图如下
GSM-VoIP-gateway-topology-structure

 

 
连接两地的 VoIP GSM网关

之前通过 FreePBX已完成的 Asterisk初步配置,单个 VoIP GSM网关下的几个分机号可相互通话,也可以用“9+外线号码”拨打外线,现在通过 IAX协议将两个网关连接起来。

在 PIAF这一头,点击菜单 Connectivity > TrunksAdd IAX2 Trunk

注:在 PEER Details框中填写以下内容后,提交设置,然后点击页面右上角的“Apply Config”按钮以使设置生效

host=xxx.ddns.net
username=PIAF
secret=abc123
type=friend
context=from-internal
qualify=yes
qualifyfreqok=25000
transfer=no
trunk=yes
forceencryption=yes
encryption=yes
auth=md5

在 RasPBX那一头也添加一个 IAX2 Trunk,Outgoing Settings项里的 Trunk Name框填“PIAF”,而PEER Details框中填写如下内容

host=xxx.3322.org
username=RasPBX
secret=abc123
type=friend
context=from-internal
qualify=yes
qualifyfreqok=25000
transfer=no
trunk=yes
forceencryption=yes
encryption=yes
auth=md5

PIAF这一头添加 Outbound Route,完成后就可以在 PIAF的分机上拨号“0+外线号码”,即可从另一头(RasPBX) 3G U棒里的手机号码拨打出去,还可以用“2XX”号码拨打另一头的分机号
PIAF_Outbound_Routes

RasPBX那一头也添加类似的 Outbound Route
RasPBX_Outbound_Routes

还要记得两地的路由器都要开通 IAX通信所需的 UDP 4569的端口映射
router_PIAF_NAT

至此,两地的分机号就可相互拨通(如 RasPBX下面的分机2XX拨打 PIAF的1XX),每个分机还可拨号“0+外线号码”以便从另一头的 VoIP GSM网关拨打外线。

 
两地的外线号码相互通话

PIAF这一头,点击菜单 Applications > Misc Destinations,预设一个直通另一头(RasPBX)的某个外线号码,在号码前添加一个“0”
PIAF_Misc_Destination

然后修改 PIAF的 Inbound Routes
PIAF_Inboud_Routes

而在 RasPBX那一头,点击菜单 Applications > DISA,添加一个 Direct Inward System Access (DISA),以便让来电自动接入 VoIP GSM网关内部,然后就可以像 RasPBX的分机那样继续拨打内线或异地的外线了(拨“9”从本地打外线会遇忙音,因为仅有的一个 3G U棒已被来电占用,只能拨“0+外线号码”从PIAF这头打出去)
RasPBX_DISA

最后修改 RasPBX的 Inbound Routes
RasPBX_Inbound_Routes

这样,PIAF这一头的某个外线号码 phone1拨打 PIAF-e173的手机号时,预设的另一头(RasPBX)的外线号码 phone2就会响铃;反过来,在另一头的某个外线号码 phone2那里拨通 RasPBX-e173的手机号之后,输入预设的 PIN码就可以听到拨号音,然后继续拨号“0+phone1”就实现了回拨。

比如出国前你可以把sim卡放入 PIAF-e173里,在国外部署 RasPBX上网和 PIAF连通,购买当地的两张sim卡,一张放入 RasPBX-e173,另一张当作日常手机号用。接国内的电话可省去国际漫游费,回拨也一样(就是比接电话多一笔在国内的本地通话费),而且对方无论接、打电话都是跟你留在国内的手机号联系,所以通话时也不会知道其实你已身在国外,效果就跟 这里 老外用的一样了。
architecture_01

当然,只部署一套 VoIP GSM网关也行,只是在另一地需要手机能移动上网访问 GSM网关,手机上还要安装 SIP SoftPhone软件(如 ZoiperCSipSimple等)以实现 SIP电话机的功能。IAX SoftPhone也可以,比如 Zoiper对SIP和IAX协议都支持。

 
顺便提一下,RasPBX默认未装 DISA、Misc Destinations等模块,需点击菜单 Admin > Module Admin 进入模块管理页面,点击页面左上角的“Check Online”按钮,选择需要下载或升级的模块后,再点击右上角的“Process
raspbx_download_module

 
可能会遇到的问题

我这里的E173放入移动的sim卡,从外线打sim卡手机号测试 DISA功能,输入正确的 PIN码但 Asterisk应答提示通不过;临时取消 DISA设置里的PIN码再试,能自动接入 VoIP GSM网关内部并听到了拨号音,但拨号却无效,就像 Asterisk无法识别出来电的 DTMF音频。把移动的sim卡换成联通的就正常了,不知道是移动的问题,还只是跟 E173上网卡兼容性不够好的缘故。

检查了一下 /etc/asterisk/dongle.conf配置文件中的相关设置似乎也没什么问题


dtmf=relax			; control of incoming DTMF detection, possible values:
				;   off	   - off DTMF tones detection, voice data passed to asterisk unaltered
				;              use this value for gateways or if not use DTMF for AVR or inside dialplan
				;   inband - do DTMF tones detection
				;   relax  - like inband but with relaxdtmf option
				;  default is 'relax' by compatibility reason

 
 

参考文章
http://wiki.freepbx.org/pages/viewpage.action?pageId=4161588
 

16 / 4 = (必填)