新的一年依始,开始定好了旅行计划,但是有个东西却依然心神不宁。
那就是万一在国外有什么变动,如何往国内打电话呢?!
说到这里,不得不提个东西,那就是旅顺的App,这个东西已经消失了,但是绝对值得被记住啊。
这个东西在塞班岛旅游的时候曾经救了自己两次
首先是它的第一代产品:
第一代的原理似乎是把手机的信号直接通过网络转移到了国内,随身携带然后配合app使用,这点非常牛吧!国内的窜出点会随机,忽而天津,忽而别的地方,所以呼出电话搞不好是长途计费。第一次呢八戒是在塞班岛中部那个麦当劳附近,用这个接到了国内的电话,说是出大事了,有人把公司数据库的数据给改了,当时约定下午6:00再打,然后下午在台湾牛肉面的店里,又用这个往国内通了电话,打了半个多小时,领导告知了具体的情况,要是接不起来那可真就麻烦大了。
这个是它第二代的产品:
这个是升级版pro,就更厉害了,直接放家里,手机上下个app,有网络就能用了,不用像第一代一样随身携带了。
这个更是救命了,话说第二回在塞班的时候正是疫情刚发作的时候,塞班直接封岛了,然后好多航班都延期或终止了,就是用这个旅顺打国内电话改签了回国的机票,足足打了两个小时啊,到处占线等待,如果打国际长途的话费用不堪设想,另外打塞班大韩航空的电话改签两程机票也是不可想像的,所以,关键时刻是真的救命啊。
这么好的软件却直接倒闭消失了,真是万分可惜啊。
哎,现在没有这个了,只能自己搭一个voip电话自用了。
刚开始是考虑RasPBX,其实自己用树莓派搭过,费事不说,主要树莓派容易死机,务必要稳定,所以干脆用FreePBX搭建在kvm服务器虚拟机上的方式,来保持绝对稳定。
以下教程只适用于 FreePBX 16 的官方ISO,具体做法如下:
一、安装KVM虚机:
1#下载FreePBX16的iso光盘
2wget https://downloads.freepbxdistro.org/ISO/SNG7-PBX16-64bit-2302-1.iso
3
4#创建qcow2虚机文件
5qemu-img create -f qcow2 freepbx-8-2-60/freepbx-8-2-60.qcow2 20G
6
7virt-install \
8--name=freepbx-8-2-60 \
9--vcpu=4 \
10--ram=8096 \
11--disk path=/export/kvm/freepbx-8-2-60/freepbs-8-2-60.qcow2,format=qcow2,size=20 \
12--cdrom=/export/kvm/SNG7-PBX16-64bit-2302-1.iso \
13--network bridge=br0 \
14--os-type=linux \
15--vnc --vnclisten=0.0.0.0 --vncport=5916
用vnc连接5916端口安装,设置一下root的密码安装。
这样安装好后,系统其实是dhcp动态获得ip的,进入看了看,是Centos,我们不需要dhcp,把IP给固定死
1vi /etc/sysconfig/network-scripts/ifcfg-eth0
2
3TYPE="Ethernet"
4BOOTPROTO="static"
5IPADDR=10.8.2.60
6NETMASK=255.255.255.0
7GATEWAY=10.8.2.1
8DNS1=114.114.114.114
9DEFROUTE="yes"
10NAME="eth0"
11DEVICE="eth0"
12ONBOOT="yes"
SSH登录一下没问题,看到绿框就ok了
二、配置FreePBX的分机
打开网址 http://10.8.2.60 , 登录 FreePBX Administration
登上去后是这个样子
上面我没有开System Firewall,这个看个人需求,绝对不要像公网开放80端口,只开5060的udp和1000-10004的UDP。
开了公网80的话,那就是另外一个悲伤的故事了!!!
然后建立第一个分机888:
直接在Applications
->Extensions
->Add new Chan_SIP Extension
新建一个分机,在General
tab页里面填好第一个SIP账户的信息
General填写:
- User Extension 分机号为888
- Display Name 为 ba jie,最好自己名字,好区分
- Secret 是密码,要填写个非常复杂的,绝对不能简单。
然后最底下,Submit 提交一下
最后点击右上角的Apply Config
应用刚才的配置。
三、配置dongle无线卡
内部分机有了,我们需要配置外部线路
去淘宝上买个dongle卡,插到服务器上
登录服务器,lsusb 查看一下usb的地址
得到 vendori d: 12d1 和 product id: 1436 这两个字串,编辑一个文件 usb-attach.xml 文件:
1vi usb-attach.xml
2<hostdev mode='subsystem' type='usb'>
3 <source>
4 <vendor id='0x12d1'/>
5 <product id='0x1436'/>
6 </source>
7</hostdev>
然后挂接上
1virsh attach-device freepbx-8-2-60 --file usb_huawei.xml --persistent
ssh登录进入freepbx,lsusb查看一下,同样能看到就对了
然后就是大工程了,编译驱动程序,非常的复杂
不想编译的办法:
1# 解压包
2unzip -x dongle.zip
3
4cp chan_dongle.so /usr/lib64/asterisk/modules
5chmod 644 /usr/lib64/asterisk/modules/chan_dongle.so
完整的编译的方法:
1#解压包
2unzip asterisk-chan-dongle-master*
3
4#安装准备包编译
5yum install automake autotools-dev autoconf
6yum -y install tcl asterisk18-devel make automake binutils
7
8#编译安装
9cd asterisk-chan-dongle-master/
10autoupdate
11aclocal
12autoconf
13automake -a
14./bootstrap
15./configure --with-astversion=18.19.0
16make clean
17make
18make install
19
20cd /usr/lib64/asterisk/modules
21ls -lcat|more
看到有dongle字样就ok了
没完呢啊,还需要把配置文件都弄进去
1#解压
2unzip -x dongle.zip
3
4#install dongles driver
5cd
6echo 'KERNEL=="ttyUSB*", MODE="0666", OWNER="asterisk", GROUP="uucp"'>/etc/udev/rules.d/92-dongle.rules
7echo 'rungroup = dialout'>>/etc/asterisk/asterisk.conf
8mv dongle.conf /etc/asterisk/dongle.conf
9chown asterisk.asterisk /etc/asterisk/dongle.conf
10chmod 664 /etc/asterisk/dongle.conf
11mv extensions_custom.conf /etc/asterisk/extensions_custom.conf
12chown asterisk.asterisk /etc/asterisk/extensions_custom.conf
13chmod 664 /etc/asterisk/extensions_custom.conf
下载地址:dongle.zip
然后把虚机reboot一下,进入asterisk查看
1asterisk -rvvv
2dongle show devices
看到自己dongle设备的id,是dongle1,记下来,就ok
四、配置FreePBX的进出线路
1、增加trunk
回到 FreePBX 的配置界面,先配一下 Trunk 线路,增加一个trunk:connectivity
->Trunks
增加一个 Custom Trunk:
General填写:
- Trunk Name : china_unicom
- Outbound CallerID: 空 (联通手机号,最好空,后面有提示忽略,这个接打的时候会自动替你填上的)
- Maximum Channels: 1 (只有一个联通sim卡,就是1,2个就是2)
然后点到custom Settings,填入如下内容,注意,我的设备是dongle1,按查出来的设备填写啊。
1dongle/dongle1/$OUTNUM$
然后同样 Submit, 然后 Apply config. 会提示CallerID,ok忽略即可。
2、配置拨入线路Inbound route
connectivity
->Inbound Routes
增加一个新的Inbound,名字就叫gsm_in,可以随便改。DID和CallerID都是ANY,意味着所有达到这个sim卡内的电话都接下来,Destination选择咱们一开始的888分机,这样呼入的电话就可以被888分机接听了
- Description: gsm_in
- DID Number: ANY
- CallerID Number: ANY
- Set Destination: Extensions
- 888 zhang ranrui
最后同样 Submit , Apply Config配置生效
3、配置拨出线路Outbound Routes
connectivity
->Outbound Routes
增加一条新的拨出线路,名字叫gsm_out好了,可以随便改,Trunk选咱们建立的 china_unicom
Route Name : gsm_out
Trunk Sequence for Matched Routes: china_unicom
注意,点到拨号盘,还需要配一下 Dail Patterns
- Match Pattern: ZX.
ZX. 的意思是拨出去的号码最少有3个数字那么长,且第一位不是0,那手机11位,起始是1就满足了。很多教程教配个1和9什么的,有毛病啊,拨出去还要加拨1和9
最后仍然是Submit,Apply Config配置生效。
这样基本上就完工了
五、配置手机端voip软件
网上大多数的教程都是用zoiper,这里强烈指出,这个软件根本不行!!!
一是zoiper必须运行在前台才能接起来打到dongle里的电话,二是zoiper里gsm好的音频编码居然是收费的。
网上搜了半天,终于找到了个好的,PortSIP,iphone下也是必须用外区id才能搜到并下载安装。
这个软件其实是一家提供pbx服务的公司提供的客户端,可以接起来打到asterisk手机卡里的手机,而且音频编码g.729等等都是免费的。
那必须赞一个。高级设置里强制和集成就是接起来的保证,不过会大面积耗电。
音频编码器中g.729也是免费的。比zoiper还收你钱厚道多了。
设置也及其简单:
域名和出站代理都写Freepbx暴露出去的公网ip即可
用户名就是pbx添加的那个分机888,密码就是secret。
八戒亲自在泰国普吉测试了很多次,完胜zoiper,强烈推荐啊。
六、路由器设置
有公网设置,需要做端口映射
1路由器Port 5060 udp --> FreePBX Port 5060 udp
2
3路由器Port 10000->10004 udp --> FreePBX Port 10000-10004 udp
10000到10004的端口映射出去是因为语音一路,数据一路,我们只有一个sim卡,4路足够了。
七、补充
在freepbx上面发送短信的命令
1asterisk -rx "dongle sms dongle1 +8613000000000 信息测试"