最新版出国旅行安装一个FreePBX的voip电话自用

新的一年依始,开始定好了旅行计划,但是有个东西却依然心神不宁。

那就是万一在国外有什么变动,如何往国内打电话呢?!

说到这里,不得不提个东西,那就是旅顺的App,这个东西已经消失了,但是绝对值得被记住啊。

这个东西在塞班岛旅游的时候曾经救了自己两次

首先是它的第一代产品:

image-20240105135104823

第一代的原理似乎是把手机的信号直接通过网络转移到了国内,随身携带然后配合app使用,这点非常牛吧!国内的窜出点会随机,忽而天津,忽而别的地方,所以呼出电话搞不好是长途计费。第一次呢八戒是在塞班岛中部那个麦当劳附近,用这个接到了国内的电话,说是出大事了,有人把公司数据库的数据给改了,当时约定下午6:00再打,然后下午在台湾牛肉面的店里,又用这个往国内通了电话,打了半个多小时,领导告知了具体的情况,要是接不起来那可真就麻烦大了。

这个是它第二代的产品:

image-20240105135031364

这个是升级版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了

image-20240105141241964

二、配置FreePBX的分机

打开网址 http://10.8.2.60 , 登录 FreePBX Administration

image-20240105144025926

登上去后是这个样子

image-20240105144212316

上面我没有开System Firewall,这个看个人需求,绝对不要像公网开放80端口,只开5060的udp和1000-10004的UDP。

开了公网80的话,那就是另外一个悲伤的故事了!!!

然后建立第一个分机888:

直接在Applications->Extensions->Add new Chan_SIP Extension新建一个分机,在Generaltab页里面填好第一个SIP账户的信息

image-20240105144407020.png

image-20240105144454864.png

General填写:

  • User Extension 分机号为888
  • Display Name 为 ba jie,最好自己名字,好区分
  • Secret 是密码,要填写个非常复杂的,绝对不能简单。

image-20240105144750579.png

然后最底下,Submit 提交一下

最后点击右上角的Apply Config应用刚才的配置。

三、配置dongle无线卡

内部分机有了,我们需要配置外部线路

去淘宝上买个dongle卡,插到服务器上

image-20240105150152946

登录服务器,lsusb 查看一下usb的地址

image-20240105150501476

得到 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查看一下,同样能看到就对了

image-20240105151249664

然后就是大工程了,编译驱动程序,非常的复杂

不想编译的办法:

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了

image-20240105151955008

没完呢啊,还需要把配置文件都弄进去

 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

image-20240105153128272

看到自己dongle设备的id,是dongle1,记下来,就ok

四、配置FreePBX的进出线路

1、增加trunk

回到 FreePBX 的配置界面,先配一下 Trunk 线路,增加一个trunk:connectivity->Trunks

image-20240105153644786.png

增加一个 Custom Trunk:

image-20240105154010116.png

General填写:

  • Trunk Name : china_unicom
  • Outbound CallerID: 空 (联通手机号,最好空,后面有提示忽略,这个接打的时候会自动替你填上的)
  • Maximum Channels: 1 (只有一个联通sim卡,就是1,2个就是2)

image-20240105154828153.png

然后点到custom Settings,填入如下内容,注意,我的设备是dongle1,按查出来的设备填写啊。

1dongle/dongle1/$OUTNUM$

image-20240105154152522.png

然后同样 Submit, 然后 Apply config. 会提示CallerID,ok忽略即可。

image-20240105155518868.png

2、配置拨入线路Inbound route

connectivity->Inbound Routes

image-20240105155754237.png

增加一个新的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

image-20240105155956512.png

最后同样 Submit , Apply Config配置生效

3、配置拨出线路Outbound Routes

connectivity->Outbound Routes

image-20240105160416719.png

增加一条新的拨出线路,名字叫gsm_out好了,可以随便改,Trunk选咱们建立的 china_unicom

Route Name : gsm_out

Trunk Sequence for Matched Routes: china_unicom

image-20240105160604531.png

注意,点到拨号盘,还需要配一下 Dail Patterns

image-20240105160845252.png

  • Match Pattern: ZX.

ZX. 的意思是拨出去的号码最少有3个数字那么长,且第一位不是0,那手机11位,起始是1就满足了。很多教程教配个1和9什么的,有毛病啊,拨出去还要加拨1和9

最后仍然是Submit,Apply Config配置生效。

这样基本上就完工了

五、配置手机端voip软件

网上大多数的教程都是用zoiper,这里强烈指出,这个软件根本不行!!!

一是zoiper必须运行在前台才能接起来打到dongle里的电话,二是zoiper里gsm好的音频编码居然是收费的。

网上搜了半天,终于找到了个好的,PortSIP,iphone下也是必须用外区id才能搜到并下载安装。

image-20240227144454366

这个软件其实是一家提供pbx服务的公司提供的客户端,可以接起来打到asterisk手机卡里的手机,而且音频编码g.729等等都是免费的。

那必须赞一个。高级设置里强制和集成就是接起来的保证,不过会大面积耗电。

image-20240227144805603

音频编码器中g.729也是免费的。比zoiper还收你钱厚道多了。

image-20240227144835248

设置也及其简单:

image-20240227145005885

域名和出站代理都写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 信息测试"

配置Minio+nginx的代理来开放桶内内容
Cisco ASA5520 VPN线路的监控和自动重启
comments powered by Disqus