- 创建者: 虚拟的现实,上次更新时间:6月 29, 2024 需要 4 分钟阅读时间
安装 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 的,不需要 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 了
配置 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 文件:
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 查看一下,同样能看到就对了
驱动安装
# 解压包 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 了
编辑配置文件并加载驱动
#解压 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 查看
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。
路由器设置
有公网设置,需要做端口映射
路由器Port 5060 udp --> FreePBX Port 5060 udp 路由器Port 10000->10004 udp --> FreePBX Port 10000-10004 udp
0000到10004的端口映射出去是因为语音一路,数据一路,我们只有一个sim卡,4路足够了。
补充
在freepbx上面发送短信的命令
asterisk -rx "dongle sms dongle1 +8613000000000 信息测试"
Voip 的 lsusb 检测华为猫棒 usb 地址来回跳动问题
正常情况下,lsusb的结果
lsusb Bus 001 Device 017: ID 12d1:1436 Huawei Technologies Co., Ltd. Broadband stick
过一阵子,或者持续几天后,地址就变了
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
yum -y install epel-release yum -y install use_modeswitch usb_modeswitch -v 12d1 -p 1446 -c "/usr/share/usb_modeswitch/12d1:1446"
变回来了不成,还得把它彻底固定下来
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'"
不管它,再次强行固定
vi /lib/udev/rules.d/40-usb_modeswitch.rules、 # Huawei, newer modems ATTR{idVendor}=="12d1", ATTR{idProduct}=="1446", RUN+="usb_modeswitch '%b/%k'"
这样就搞定了
- 无标签
添加评论