首页 > Linux > ESXi5安装PBX in a Flash (PIAF)虚拟机实现VoIP GSM网关

ESXi5安装PBX in a Flash (PIAF)虚拟机实现VoIP GSM网关

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

几天前 Raspberry Pi上搭建和配置RasPBX实现VoIP GSM网关,之后入手了第二个 E173的 3G U棒,因为手上有个安装了 EXSi5的 ProLiant MicroServer Gen8 服务器(安装过程见 这里),所以继续试验了一下在ESXi5环境下安装IP PBX虚拟机以实现VoIP GSM网关的功能。

为图省事,打算直接用一个现成的虚拟机安装包,经 Google搜索 找到 PIAF-Green Virtual Machine for VMware ESXi(下载页面点这里 或官方的 sourceforge页面,另外,官方的 博客页面 似乎屏蔽了来自大陆ip的访问?),是一个基于 Centos 6.x系统、集成了 Asterisk 11和 FreePBX 2.11等软件的虚拟机模板,看网上的评论似乎安全性好点、功能也更多点。
piaf20642

 

通过 vSphere Client软件部署该模板,就可在 ESXi主机上导入这个 PIAF-Green的虚拟机。

启动虚拟机后,用 Putty 登录 PIAF(默认用户名和密码分别是rootpassword)就可以进入 ssh控制台,借用一张博客页面 里的图片

注:提醒一下,如果之后又更改了虚拟机网卡的mac地址,则 PIAF自动从 DHCP服务端获取ip地址可能会失败,请按照这个教程,修改 /etc/udev/rules.d/70-persistent-net.rules这个文件然后重启网络服务。

 
安装 wmtools

在 vSphere Client软件界面,点击 PIAF虚拟机右键菜单中的“Install/Upgrade VMware Tools”

然后参考 这里 或者官方的 博客页面,运行如下命令完成 vmtools的安装

mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cp /mnt/cdrom/VMwareTools-*.tar.gz /tmp
umount /mnt/cdrom
tar -zxf /tmp/VMwareTools-*.tar.gz -C /tmp
cd /
./tmp/vmware-tools-distrib/vmware-install.pl -d

 
FreePBX的设置

用浏览器访问 http://PIAF的ip地址,进入 PIAF的管理主界面,点击左下角的滑动块至 ADMIN,可以看到更多的图标

注:Linux Webmin(默认root、password可登录,可用 passwd-webmin命令修改)用于系统本身,如防火墙、网络配置、磁盘,等等的管理,与 VoIP无关。

点击 FreePBX Administration图标可进入FreePBX管理页面(默认 maintpassword,可用 passwd-webmin命令修改)

注:几次密码输错后会触发 PIAF内置的 Fail2ban,这时远程访问无响应,只能从本机登录访问(比如通过 vSphere Client 软件界面的 Console)。

至于 FreePBX的具体配置请参考 前一篇文章 或是 wiki.freepbx.org

 
安装 chan_dongle驱动

PIAF 没有集成 chan_dongle(华为3G U棒的驱动),需要手动安装,不过原版本太旧了不支持 Asterisk 11,需改用这个 patch版本

先安装 usb_modeswitch,以方便以后可能切换 3G U棒的工作模式

wget http://pkgs.repoforge.org/usb_modeswitch/usb_modeswitch-1.2.3-1.el6.rf.i686.rpm
wget http://pkgs.repoforge.org/usb_modeswitch-data/usb_modeswitch-data-20120120-1.el6.rf.noarch.rpm
rpm --install usb_modeswitch*.rpm

然后按照 patch版作者的 说明,安装 patch版 chan_dongle驱动,安装过程中有提示warning(但无error),不影响使用

wget https://github.com/jstasiak/asterisk-chan-dongle/archive/asterisk11.zip
unzip asterisk11
cd asterisk-chan-dongle-asterisk11
aclocal && autoconf && automake -a
./configure && make && make install
 
#还要拷贝一个配置文件并修改文件权限,重启系统
cp /root/asterisk-chan-dongle-asterisk11/etc/dongle.conf /etc/asterisk/
chmod 664 /etc/asterisk/dongle.conf
reboot

 
e173插到 ESXi主机,在 vSphere Client软件界面的 PIAF-Green虚拟机设置里依次添加 usb controller和 usb device时却没有识别出 e173,原因是被 ESXi识别为 cdrom设备了,因此需要用 AT命令将U棒默认的cdrom模式改为modem模式,具体方法请见 前一篇文章这里(建议修改前先记下 AT^U2DIAG? 命令反馈的数字,以便将来可能改回cdrom模式)。

现在可以用 lsusb命令可以看到 PIAF虚拟机已识别出 e173,但在 Asterisk CLI界面里却不断提示出错 “chan_dongle.c:218 opentty: unable to open /dev/ttyUSB2: Permission denied”,修改一下相关文件的权限就正常了

root@pbx:~ $ chmod 666 /dev/ttyUSB*
root@pbx:~ $ ls /dev/ttyUSB* -al
crw-rw-rw- 1 root dialout 188, 0 Oct  7 12:23 /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 1 Oct  7 12:23 /dev/ttyUSB1
crw-rw-rw- 1 root dialout 188, 2 Oct  7 12:47 /dev/ttyUSB2

现在 Asterisk CLI界面里就可以顺利读取这个e173上网卡和sim卡的参数了。

root@pbx:~# asterisk -r   #或者 asterisk -rvvvv 进入调试模式
pbx*CLI> dongle show device state dongle0

但每次系统重启或插拔 U棒后都要修改 ttyUSB*文件的权限嫌麻烦,于是参考 这里,用 WinSCP 新建 /etc/udev/rules.d/92-dongle.rules这个文件,内容如下(OWNER和GROUP项的内容可先用比如 ls /dev/ttyUSB* -al 命令查看一下)

KERNEL=="ttyUSB*", MODE="0666", OWNER="root", GROUP="dialout"

重启一下 udevd服务就可以了

/sbin/start_udev

 
接下来试用后发现 e173还是无法接收来电和短信,于是对照之前完工的 RasPBX的配置,修改 /etc/asterisk/dongle.conf这个配置文件中的 defaults项

[defaults]
; now you can set here any not required device settings as template
;   sure you can overwrite in any [device] section this default values

;context=default            ; context for incoming calls
context=from-trunk-dongle
group=0                ; calling group
...
exten=+1234567890        ; exten for start incoming calls, only in case of Subscriber Number not available!, also set to CALLERID(ndid)

注:还可以修改 exten为 U棒里的sim卡手机号码

还要在 /etc/asterisk/extensions_custom.conf文件的末尾添加一段 dialplan


;;copied from RasPBX and then modified
[from-trunk-dongle]
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${BASE64DECODE(${SMSBASE64})})
;exten => sms,n,System(echo "To: xxx@gmail.com\nSubject: Incoming SMS from ${CALLERID(num)}\n\n${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: " > /tmp/sms.txt)
exten => sms,n,Set(MAILSUBJECT="Incoming SMS from ${CALLERID(num)} to ${OUTCID_1}")
exten => sms,n,System(echo "${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: " > /tmp/sms.txt)
exten => sms,n,Set(FILE(/tmp/sms.txt,,,a)=${BASE64DECODE(${SMSBASE64})})
;exten => sms,n,System(sendmail -t < /tmp/sms.txt) 
exten => sms,n,System(mail -s ${MAILSUBJECT} xxx@gmail.com < /tmp/sms.txt) 
;exten => sms,n,DongleSendSMS(dongle0,+8618699999999,${BASE64DECODE(${SMS_BASE64})} - from ${CALLERID(num)})
exten => sms,n,Hangup()
exten => _.,1,Set(CALLERID(name)=${CALLERID(num)})
exten => _.,n,Goto(from-trunk,${EXTEN},1)

注:红字部分请见 前一篇文章 里的说明

重启 Asterisk

root@pbx:~# asterisk -r
pbx*CLI> core restart now

再试 e173的电话和短信收发就正常了。

 
补充:
FreePBX的 Module升级后会导致 PIAF的管理主界面丢失,访问 http://PIAF的ip地址 会直接进入 FreePBX Administration页面,作者在 这里 有个解决办法,抄录如下

cd /var/www/html
rm index*
wget http://pbxinaflash.com/piaf-index.tar.gz
# alternate site
# wget http://nerdvittles.dreamhosters.com/pbxinaflash/source/kennonsoft/piaf-index.tar.gz
tar zxvf piaf-index.tar.gz
# for absolute protection, uncomment the next line
# chattr +i index*

 

参考文章
http://nerdvittles.com/?p=7502
http://zaliasrobotas.blogspot.com/2013/10/chandongle-do-not-compile-with-asterisk.html

 
 

  1. 一张超级马里奥纸牌
    2015年7月12日22:07 | #1

    你好,最近看了几篇你的文章,受益良多。请教个问题,如果我想用这套系统,但是不是GSM网关,而是传统固定电话线路PSTN,也就是使用VOIP打外线的时候,使用家里的固定电话打出去。家里已经改造光纤,固定电话是通过光猫接入的。这样的话需要把e173替换为什么设备?

  2. LTNS
    2015年7月12日22:28 | #2

    @一张超级马里奥纸牌
    我对asterisk不太熟悉,看了下网上的介绍,接pstn电话线一般需要一个兼容FSO的电话适配卡,至于能否兼容光猫voip的电话线就不知道了。

    另外,现在电信提供的新光猫上的电话功能多是voip,基于带tag标识的vlan,不知道能不能不用适配卡、而是在光猫和路由器上设置一下vlan然后就能直接连上asterisk?

  3. 一张超级马里奥纸牌
    2015年7月12日22:47 | #3

    @LTNS
    应该不可以,家里最终还是模拟信号线路的电话,只是联通光纤进来时,做了一道转换。
    我在淘宝上搜“asterisk 语音卡”,100块钱的那个,选择FXO模块,理论上是否就可以实现外线使用固话拨出的功能?

  4. LTNS
    2015年7月12日22:50 | #4

    @一张超级马里奥纸牌
    这个帖子里有人提到电信提供的光猫中兴F460,里面电话的设置是软交换SIP协议。
    http://bbs.m0n0china.org/viewthread.php?tid=17632

    如果可以搞出SIP帐号,不知道能否作为自定义的Trunk设备来使用。另,看帖子里第7楼的意思,似乎用的H.248语音协议Asterisk不一定支持。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
10 - 9 = (必填)