版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

安装 KVM 虚拟机

代码块
languagebash
#下载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 的,不需要 dhcp,配置静态 IP

代码块
languagebash
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 了

配置 FreePBX 的分机

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

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

然后建立第一个分机 888:

直接在Applications->Extensions->Add new Chan_SIP Extension新建一个分机,在Generaltab页里面填好第一个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 文件:

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

然后挂接上

代码块
languagebash
virsh attach-device freepbx-8-2-60 --file usb_huawei.xml --persistent

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

驱动安装

代码块
languagebash
# 解压包
unzip -x dongle.zip

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

驱动编译

代码块
languagebash
#解压包
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 了

编辑配置文件并加载驱动

代码块
languagebash
#解压
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

重启虚拟机后进入 asterisk 查看

代码块
languagebash
asterisk -rvvv
dongle show devices

看到 dongle 设备的 id,是 dongle1,记下来。

配置 FreePBX 的进出线路

增加 trunk

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

General填写:

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

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

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

配置拨入线路 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配置生效

配置拨出线路 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就满足了。最后仍然是Submit,Apply Config配置生效。

配置手机端 voip 软件

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

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

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

这个软件其实是一家提供 pbx 服务的公司提供的客户端,可以接起来打到 asterisk 手机卡里的手机,而且音频编码g.729等等都是免费的。高级设置里强制和集成就是接起来的保证,不过耗电比较高。

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

域名和出站代理都写 Freepbx 暴露出去的公网 ip 即可。用户名就是 pbx 添加的那个分机 888,密码就是 secret。

路由器设置

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

代码块
languagebash
路由器Port 5060 udp --> FreePBX Port 5060 udp
路由器Port 10000->10004 udp --> FreePBX Port 10000-10004 udp

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

补充

在freepbx上面发送短信的命令

代码块
languagebash
asterisk -rx "dongle sms dongle1 +8613000000000 信息测试"

Voip 的 lsusb 检测华为猫棒 usb 地址来回跳动问题

正常情况下,lsusb的结果

代码块
languagebash
lsusb
Bus 001 Device 017: ID 12d1:1436 Huawei Technologies Co., Ltd. Broadband stick

过一阵子,或者持续几天后,地址就变了

代码块
languagebash
lsusb
Bus 001 Device 017: ID 12d1:1446 Huawei Technologies Co., Ltd. HSPA modem

看上面,vender id从1436 变成了1446,名字也从 stick 变成了 modem

由于这个 usb 设备是直通到 kvm 的 freepbx 虚机里面去的,这直 接导致 voip 系统不能用了,必须把它给固定下来,首先先从1446变回1436

代码块
languagebash
yum -y install epel-release
yum -y install use_modeswitch
usb_modeswitch -v 12d1 -p 1446 -c "/usr/share/usb_modeswitch/12d1:1446"

变回来了不成,还得把它彻底固定下来

代码块
languagebash
vi /lib/udev/rules.d/40-usb_modeswitch.rules
#装了usb_modeswitch后居然已经自带了
# Generic entry for most Huawei devices, excluding Android phones
ATTRS{idVendor}=="12d1", ATTRS{manufacturer}!="Android", ATTR{bInterfaceNumber}=="00", ATTR{bInterfaceClass}=="08", RUN+="usb_modeswitch '%b/%k'"

不管它,再次强行固定

代码块
languagebash
vi /lib/udev/rules.d/40-usb_modeswitch.rules、

# Huawei, newer modems
ATTR{idVendor}=="12d1", ATTR{idProduct}=="1446", RUN+="usb_modeswitch '%b/%k'"

这样就搞定了

目录