5

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

 8 months ago
source link: https://bajie.dev/posts/20240105-voip_iphone/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

2024-01-05 6 分钟阅读

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

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

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

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

首先是它的第一代产品:

image-20240105135104823

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

这个是它第二代的产品:

image-20240105135031364

这个是升级版pro,就更厉害了,直接放家里,手机上下个app,有网络就能用了,不用像第一代一样随身携带了。

这个更是救命了,话说第二回在塞班的时候正是疫情刚发作的时候,塞班直接封岛了,然后好多航班都延期或终止了,就是用这个旅顺打国内电话改签了回国的机票,足足打了两个小时啊,到处占线等待,如果打国际长途的话费用不堪设想,另外打塞班大韩航空的电话改签两程机票也是不可想像的,所以,关键时刻是真的救命啊。

这么好的软件却直接倒闭消失了,真是万分可惜啊。

哎,现在没有这个了,只能自己搭一个voip电话自用了。

刚开始是考虑RasPBX,其实自己用树莓派搭过,费事不说,主要树莓派容易死机,务必要稳定,所以干脆用FreePBX搭建在kvm服务器虚拟机上的方式,来保持绝对稳定。

以下教程只适用于 FreePBX 16 的官方ISO,具体做法如下:

一、安装KVM虚机:

#下载FreePBX16的iso光盘
wget https://downloads.freepbxdistro.org/ISO/SNG7-PBX16-64bit-2302-1.iso

#创建qcow2虚机文件
qemu-img create -f qcow2 freepbx-8-2-60/freepbx-8-2-60.qcow2 20G

virt-install \
--name=freepbx-8-2-60 \
--vcpu=4 \
--ram=8096 \
--disk path=/export/kvm/freepbx-8-2-60/freepbs-8-2-60.qcow2,format=qcow2,size=20 \
--cdrom=/export/kvm/SNG7-PBX16-64bit-2302-1.iso \
--network bridge=br0 \
--os-type=linux \
--vnc --vnclisten=0.0.0.0 --vncport=5916

用vnc连接5916端口安装,设置一下root的密码安装。

这样安装好后,系统其实是dhcp动态获得ip的,进入看了看,是Centos,我们不需要dhcp,把IP给固定死

vi /etc/sysconfig/network-scripts/ifcfg-eth0 

TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=10.8.2.60
NETMASK=255.255.255.0
GATEWAY=10.8.2.1
DNS1=114.114.114.114
DEFROUTE="yes"
NAME="eth0"
DEVICE="eth0"
ONBOOT="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 文件:

vi usb-attach.xml
<hostdev mode='subsystem' type='usb'>
  <source>
    <vendor id='0x12d1'/>  
    <product id='0x1436'/>
  </source>
</hostdev>

然后挂接上

virsh attach-device freepbx-8-2-60 --file usb_huawei.xml --persistent

ssh登录进入freepbx,lsusb查看一下,同样能看到就对了

image-20240105151249664

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

不想编译的办法:

# 解压包
unzip -x dongle.zip

cp chan_dongle.so /usr/lib64/asterisk/modules
chmod 644 /usr/lib64/asterisk/modules/chan_dongle.so

完整的编译的方法:

#解压包
unzip asterisk-chan-dongle-master*

#安装准备包编译
yum install automake autotools-dev autoconf
yum -y install tcl asterisk18-devel make automake binutils

#编译安装
cd asterisk-chan-dongle-master/
autoupdate
aclocal
autoconf
automake -a
./bootstrap
./configure --with-astversion=18.19.0
make clean
make
make install

cd /usr/lib64/asterisk/modules
ls -lcat|more

看到有dongle字样就ok了

image-20240105151955008

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

#解压
unzip -x dongle.zip

#install dongles driver
cd
echo 'KERNEL=="ttyUSB*", MODE="0666", OWNER="asterisk", GROUP="uucp"'>/etc/udev/rules.d/92-dongle.rules
echo 'rungroup = dialout'>>/etc/asterisk/asterisk.conf
mv dongle.conf /etc/asterisk/dongle.conf
chown asterisk.asterisk /etc/asterisk/dongle.conf
chmod 664 /etc/asterisk/dongle.conf
mv extensions_custom.conf /etc/asterisk/extensions_custom.conf
chown asterisk.asterisk /etc/asterisk/extensions_custom.conf
chmod 664 /etc/asterisk/extensions_custom.conf

下载地址:dongle.zip

然后把虚机reboot一下,进入asterisk查看

asterisk -rvvv
dongle 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,按查出来的设备填写啊。

dongle/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软件

我只有iphone手机,首先要翻墙,下载zoiper软件,这个就不多说了

image-20240105161747497

打开后添加一个SIP账号:

  • Account name: zhang ranrui 可以随便填
  • Domain: freepbx的ip地址,这个不能胡填
  • User name: 888 分机号码
  • Password: 密码,就是FreePBX分机的Secret值,一定要设置的够复杂
  • Enable video FMTP: disable不选
image-20240105161934350.png

然后在Account的netwok settings中,STUN一定要禁掉,直通。

image-20240105162240509.png

ok,这样就拨打那个sim的电话就会转到这个888的分机上了。

六、路由器设置

有公网设置,需要做端口映射

路由器Port 5060 udp --> FreePBX Port 5060 udp

路由器Port 10000->10004 udp --> FreePBX Port 10000-10004 udp

10000到10004的端口映射出去是因为语音一路,数据一路,我们只有一个sim卡,4路足够了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK