第一步、配置光猫。
注意事项:登录光猫用超级管理员的账号密码,光猫后面的那个是普通用户的,创建不了网络连接。
1.进入光猫提取voip【就是座机的配置信息】
上图的主服务器地址、主用端口、outbound地址、outbound端口、电话号码,用户名,密码,这些选项必须知道,后面在配置asterisk会用到。
2.在网络/网络设置/网络连接 这个地方 连接名称选择含有voice的,比如我这个地方 【见下图】名称为“2_VOICE_R_VID_45”,记录 封装类型,连接模式,IP模式,MTU,启用VLAN,VLAN ID,802.1p,地址获取方式。
3.新建一个连接,并配置相关信息,最后点击保存
4.这个时候我们就配置好了一个非语音专属的语音通道了(如果业务类型是语音的话,后面我们端口映射的时候是无法选择的,如果是其他就可以选择。),创建完了以后等个两三分钟,在进行下面的操作,如果是能ping通,就是time=后面是有xx ms的就是通的。【注意目的地址是填入之前记录的outbound地址哦!!!!】。能ping通以后,我们就可以继续往下走了。
5.配置客户机上的路由,让nas或者是搭建asterisk的机器能够ping通outbound的服务器地址。【如果是桥接光猫出来拨号的话,这种需要再插根网线之类的,来获取到光猫分配的ip地址,然后使用route命令来让outbound 的ip走光猫。比如我的outbound是172.28.128.249,由于这个地址到时候解析出来的可能不是固定的,可以使用前16位网络号走光猫,比如我的光猫IP是192.168.201.1/24,那么我的电脑接光猫的那张网卡就是192.168.201.0/24这个网段的,我的linux下的命令就是ip route add 172.28.0.0/16 via 192.168.201.1,如果是windows那就是route add 172.28.0.0/16 192.168.201.1】。
下图是我linux下ping outbound地址成功的截图。
6.到第五步的时候,我们去配置asterisk的时候就能拨通了,但是会发现没有声音,因为还少配置了一个
RTP端口,因为每建立一个通信就需要一个端口作为语音传输,我这由于是通过光猫新建连接来获取的语音IP地址,并不是桥接的,所以光猫其实还做了个语音服务的一个路由。所以我们还需要添加端口映射,因为我们打电话到座机的时候,是光纤进来,所以就是我们对外提供服务。
第二步,配置asterisk
1.我使用的是ubuntu18.04,搭建的话就是用命令apt install asterisk,就可以进行安装了。
2.安装完成后,备份以下文件后,删除原本文件
/etc/asterisk/sip.conf
/etc/asterisk/extensions.conf
使用nano 编辑器或者其他编辑器编辑sip.conf文件如下
[general]
bindport=5060
bindaddr=0.0.0.0
;context=default
allowguest=yes
nat=yes
allowoverlap=dtmf
dtmfmode = rfc2833
;videosupport=yes
;allow=h263
;allow=h263p
;allow=h264
register=+863116906XXXX@ims.he.chinamobile.com:abcdefgh:863116906XXXX@ims.he.chinamobile.com@10.255.1.5:5060
;这是路由器向移动SIP服务器进行话机注册要用到的信息,用颜色对应IMS配置的相关参数,在这里我被坑得很惨,试了很多次才能登录成功。【此处我搬运的可以响应对照前面提取的信息进行修改。】
;abcdefgh指的是sip密码,是前面让收集的。10.255.1.5是outbound地址,5060是outbound端口,号码和域名就不说了。
;复制配置文件的时候最好把中文注释去掉,不然有可能会出现配置文件解析失败,导致asterisk一直都配置不上。
;这个配置文件里英文分号是注释的意思,不要用#号!
[trunk_ims]
host=10.255.1.5
username=863116906XXXX@ims.he.chinamobile.com
secret=abcdefgh
type=friend
insecure=port,invite
fromdomain=ims.he.chinamobile.com
;fromuser这个地方自己改成自己的座机号。
fromuser=+863116906XXXX
dtmfmode=inband
context=external
trustrpid=no
sendrpid=no
canreinvite=no
;下面的以上是建立1001和1002两个用户,secret是密码选项的意思,也就是说1001账户的密码是1001,1002账户密码就是1002
[1001]
type=friend
secret=1001
host=dynamic
context=internal
dtmfmode=rfc2833
[1002]
type=friend
secret=1002
host=dynamic
context=internal
dtmfmode=rfc2833
使用nano 编辑器或者其他编辑器编辑extensions.conf文件如下
[general]
[internal] # to out
exten => _1XXX!,1,Dial(SIP/${EXTEN})
exten => _1XXXXXXXXXX!,1,Dial(SIP/${EXTEN}@trunk_ims,60,r)
; X - any digit from 0-9
; Z - any digit from 1-9
; N - any digit from 2-9
; _表示从头匹配,!是表示匹配到末尾,
;我这里的两条播出去的规则是如果是4位的号码,则认为是我们自己的号码,进行内网拨号【不消耗宽带语音通话时长的】,如果是11位的号码,则认为就是外部号码,则从宽带电话拨出去,这个时候是会消耗宽带的语音的。
[external] # out to in
exten => s,1,Answer
exten => s,n,Dial(SIP/1001)
;这个是别人打我们的座机号打进来的,这个地方打进来后,默认转接到1001这个账号上面,也就是说如果1001这个账号在线,别人打进来就可以直接转接到1001,如果1001不在线,则会提示用户正忙之类的语音。
使用nano 编辑器或者其他编辑器编辑extensions.conf,添加rtpstart=50001和rtpend=50025两句。
最后重启asterisk服务。
service asterisk restart
我的系统是ubuntu18.04,有service这个命令,其他的系统请自行百度。
第三步 配置手机端。
随便百度个voip的客户端软件,填入搭建asterisk机器的ip,填入在sip.conf里定义的账户和密码,就能进行电话拨打了。【据我了解原生安卓电话自带voip的功能可以直接去设置,miui9以前的android系统也支持。】
有条件的可以在电脑上配置也行,windows下使用esaySip,软件自行百度。
最后附上我的网络拓扑图【画的不好,大神勿喷,仅供参考。】
参考来源:
1.extension语法:
asterisk/extensions.conf.sample at master · asterisk/asterisk · GitHub2
2.asterisk sip.conf和extensions.conf 配置:
PandoraBox+asterisk对接河北移动IMS固话+自制彩铃-恩山无线论坛3
3.华为光猫超级密码解密:
4.光猫语音鉴权密码提取:
破解光猫,获取超级管理员密码和语音鉴权密码,自己动手换光猫 - 腾讯云开发者社区-腾讯云
5. 外呼无声音?配置rtp:
https://www.iteye.com/blog/hwzyyx-764005
6.想要自己制作彩铃?【高级教程!】
如何将语音文件转换为Asterisk可以播放的音频格式文件(.wav)_weixin_33739646的博客-CSDN博客