openwrt上运行asterisk搭建电话语音网关,对接电信ims-sip配置上遇到的一些坑
前言
本文是在路由器上运行一个asterisk以取代光猫的固话功能,作用是可以在一个固话号码下面分出多个分机号(PBX网关), 以达到分机互打的目的。当然有好多人会说现在都是都是手机时代了,联系都可以通过微信,手机拨号等方式和别人取得联系,固话用得实在是少。但是现在其实还是有部分老人不懂使用智能手机,只会用固话,还有一些值友购买了低价的静卡(无语音功能),出国留学需要用电话联系,但是国际漫游费用高等等场景是可以用到的。我的主要原因是喜欢折腾,就实现一下,本身也不用花什么钱。网上这方面的教程比较少,在实现过程中也走了许多弯路,写下本文给有这个需求的朋友避个坑
我用到的设备(仅供参考)
运行openwrt的路由:红米AX6000,固件为自编译的ImmortalWrt 此项目为加了闭源驱动的openwrt,理论上软路由和其他刷了openwrt的路由器都可以兼容本教程
光猫用的是华为的HS8145V5(需要破解超管密码,导出配置文件解密电信的sip账号密码)
导出电信sip密码(仅适用于华为光猫)
因为我用的光猫是默认密码,而且已经能通过telnet连上后台,华为telnet连接账号密码为 root 密码 adminHW 然后输入su进入特权模式,再输入display current-configuration 就能输出包括密码在内的所有信息。如下图所示
在输出的信息中找到自己的电话,因为我已经改成了自己的分机号了,所以是8003,把authpassword后面的密文复制出来,拿到一个叫华为配置文件解密的工具里面解密出真实密码(此工具可以在搜索引擎搜到)
其他型号可以在搜索引擎查找破解的方法,一般也同样适用于查找电信的sip密码,找到密码之后,用超级管理员登录光猫,把主服务器信息 sip用户信息(密码是刚刚找到那个)都记下来,并且顺便把启用按钮给关掉,因为电信sip账号同时只能登录一个,如果光猫登录了,其他地方就不能登录了
搭建电信sip专用连接
电信这个固话服务器在公网是连不上的,必须要用它专门的vlan才能访问,打开光猫,网络--网络设置页面,找到名称为tr069--voice字样的连接,记下它的vlan id和802.1p的值
然后在点左下方的新建按钮,填入封装类型IPOE,业务类型选其他,连接模式 桥接,vlan id填46 802.1p填7 绑定端口,看你想通过哪个端口来连接asterisk服务器,如果想要跟主路由的wan复用同一个,则需要在用户侧vlan填入对应的vlan id,使能DHCP也勾上
点击保存之后,在该绑定端口插入电脑应该就能自动获取到对应的ip地址和dns信息,然后用该电脑的nslookup解析一下电话设置里面 Outbound服务器地址是什么ip 记下来
路由器配置多wan (使用mwan3,openwrt网上这方面教程很多)其中一个wan插入到刚刚绑定端口,wan设置为DHCP,然后配置策略,仅上面解析到的Outbound服务器通过该wan访问(如果大家有需要的话,我出一篇关于mwan3多口设置的文章)
因为我解析到的2个ip属于同一个网段,所以只写了一条,192.168.200.1是电信那边的dns
asterisk需要安装的软件包
asterisk在openwrt上精简得非常厉害,默认情况基本不能用的(可以理解,毕竟主打嵌入式),如果是普通的debian或者ubuntu只需要apt install asterisk即可安装好,openwrt是
opkg install asterisk-codec-gsm,asterisk-codec-ulaw,asterisk-format-g723,asterisk-format-g729,asterisk-format-gsm,asterisk-format-wav,asterisk-format-wav-gsm,asterisk-func-dialplan,asterisk-func-shell,asterisk-func-uri,asterisk-pjsip,asterisk-res-http-websocket,asterisk-res-pjproject,asterisk-res-rtp-asterisk,asterisk-res-rtp-multicast,asterisk-res-sorcery,asterisk-sounds
大家也可以在编译阶段就编译好,安装好之后默认是运行不了,需要在路由器ssh运行
uci set asterisk.general.enabled='1' && uci commit
然后编辑 /etc/asterisk/modules.conf 这个文件 把里面的 noload = chan_sip.so 改成noload = chan_pjsip.so
vi /etc/asterisk/modules.conf
要这么做的原因是chan_sip属于比较老旧的实现方式 17年后就不再维护了,后面都改成pjsip,但是我在网上搜到的资料大多数是chan_sip,所以只好启用该模块,大家要是会的话也可以改用pjsip来连接
然后编辑 /etc/asterisk/sip.conf 用以下内容替换,需要根据自己的实际情况按注释内容修改
[general]
context=default
bindport=5060
bindaddr=0.0.0.0
allowguest=yes
nat=no ;视情况而定,如果asterisk服务器是放在路由器后面应该填force_rport,comedia,如果是路由器充当服务器 就填no
minexpiry=1800
registertimeout=30
usereqphone = yes
useragent=HUAWEI-EchoLife HS8145V5 ;访问sip服务器的UA 按需要修改
register=+86XXXXXXXXXX@gd.ctcims.cn:yourpassword:+86XXXXXXXXXX@gd.ctcims.cn@bac03.gz.gd.ctcims.cn:5060 ;电话号码改成你的电话 yourpassword改成你的密码 gd.ctcims.cn是宽带电话设置里的主服务器地址,bac03.gz.gd.ctcims.cn:5060是Outbound服务器地址和它的端口号,要按当地情况修改
realm=gd.ctcims.cn ;改成宽带电话设置里的主服务器地址
srvlookup=yes
udpbindaddr=0.0.0.0
transport=udp
dtmfmode = rfc2833
tcpenable=no ; Enable server for incoming TCP connections (default is no)
tcpbindaddr=0.0.0.0 ; IP address for TCP server to bind to (0.0.0.0 binds to all interfaces)
allowoverlap=dtmf ; Enable overlap dialing support using DTMF delivery
localnet=192.168.1.0/255.255.255.0 ;你的内网地址网段
[authentication]
[trunk_ims]
host=bac03.gz.gd.ctcims.cn ;改成自己的Outbound服务器地址
username=+86XXXXXXXXXX@gd.ctcims.cn ;复制宽带电话设置里面的用户名
secret=youpassword ;改成你的密码
type=friend
insecure=port,invite
fromdomain=gd.ctcims.cn ;改成主服务器地址
fromuser=+86XXXXXXXXXX ;改成你的电话
dtmfmode=inband
context=external
trustrpid=no
sendrpid=no
canreinvite=no
[8001] ;后面的都是分机号 想配多少都可以
type=friend
secret=8001
host=dynamic
context=internal
dtmfmode=rfc2833
[8002]
type=friend
secret=8002
host=dynamic
context=internal
dtmfmode=rfc2833
[8003]
type=friend
secret=8003
host=dynamic
context=internal
dtmfmode=rfc2833
[8004]
type=friend
secret=8004
host=dynamic
context=internal
dtmfmode=rfc2833
[8005]
type=friend
secret=8005
host=dynamic
context=internal
dtmfmode=rfc2833
[8006]
type=friend
secret=8006
host=dynamic
context=internal
[8007]
type=friend
secret=8007
host=dynamic
context=internal
[basic-options](!) ; a template
dtmfmode=rfc2833
context=from-office
type=friend
[natted-phone](!,basic-options) ; another template inheriting basic-options
directmedia=no
host=dynamic
[public-phone](!,basic-options) ; another template inheriting basic-options
directmedia=yes
[my-codecs](!) ; a template for my preferred codecs
disallow=all
allow=ilbc
allow=g729
allow=gsm
allow=g723
allow=ulaw
; Or, more simply:
;allow=!all,ilbc,g729,gsm,g723,ulaw
[ulaw-phone](!) ; and another one for ulaw-only
disallow=all
allow=ulaw
; Again, more simply:
;allow=!all,ulaw
然后修改hosts文件或者配置dnsmasq 让Outbound服务器地址只能指向解析出来的其中一个ip,我之前碰到过连接不稳定的情况就是因为电信的dns可能是为了负载均衡配置了2个ip地址,导致asterisk连接的时候一时可以呼出一时不可以,固定好一个之后就没问题
红框的设置,为服务器强制指定一个ip,如果电信换了ip改一下也能用
然后再到ssh启动
配置RTP端口及对应的端口转发
ssh编辑 文件 /etc/asterisk/rtp.conf 把rtpstart 和rtpend改成跟光猫里面的电话高级设置端口一致
配置分机呼入呼出规则
编辑文件 /etc/asterisk/extensions.conf 在文件最后面按照自身需要添加以下代码(不要覆盖全部)
[internal] # 呼出设置
exten => _8XXX!,1,Dial(SIP/${EXTEN}) ;实现8开头 4位数的分机号互打
exten => _1XXXXXXXXXX!,1,Dial(SIP/${EXTEN}@trunk_ims,60,r) ;1开头的11位数的电话就拨外线
exten => _0XXXXXXXXXX!,1,Dial(SIP/${EXTEN}@trunk_ims,60,r)
exten => _XXXXXXXX!,1,Dial(SIP/${EXTEN}@trunk_ims,60,r) ;8位数的固话就拨外线
exten => _1XX!,1,Dial(SIP/${EXTEN}@trunk_ims,60,r) ;110 120这种紧急呼叫的电话拨外线
exten => _10000!,1,Dial(SIP/${EXTEN}@trunk_ims,60,r) ;电信客服热线拨外线
[external] # 呼入设置,意思是呼入之后转发到8003
exten => s,1,Answer
exten => s,n,Dial(SIP/8001)
配置完后就可以启动asterisk
/etc/init.d/asterisk start
然后运行 asterisk -r可以进入到asterisk的cli界面查看运行情况
常用命令
sip show peers 查看分机号情况
sip show registry 查看外线注册情况
sip reload 重新加载sip.conf
dialplan reload 重新加载拨号规则
配置客户端
sip的客户端就比较简单了,市面上也有好多 基本上大同小异,我一般用zoiper,全平台都有客户端,基本功能免费,界面比较美观
大家也可以利用好光猫自带的电话端口作为分机之一,只要在这个信令端口绑定br0,然后路由器也桥接一个网段/端口过去 在原来用户名密码服务器等信息填入原来分机的信息就行了
祝大家折腾得开心
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~












老刘在忙
校验提示文案
饺饺饺
校验提示文案
easy113
校验提示文案
无怨无悔心
校验提示文案
卡卡阿德宝啊
校验提示文案
纸城优空
校验提示文案
雨大
校验提示文案
yhl5555
校验提示文案
一切随缘zh
校验提示文案
清远楓葉
校验提示文案
请叫我狼先生
校验提示文案
SuperMax_Z
校验提示文案
kingboy82
校验提示文案
Love36D
校验提示文案
你们都骗我花钱
校验提示文案
人见人爱
校验提示文案
值友8792969881
校验提示文案
氯雷她定
校验提示文案
卡卡阿德宝啊
校验提示文案
值友2614853621
校验提示文案
__sKy__
校验提示文案
maxbbs
校验提示文案
Ho---
校验提示文案
值友2614853621
校验提示文案
卡卡阿德宝啊
校验提示文案
卡卡阿德宝啊
校验提示文案
氯雷她定
校验提示文案
值友8792969881
校验提示文案
人见人爱
校验提示文案
你们都骗我花钱
校验提示文案
无怨无悔心
校验提示文案
easy113
校验提示文案
Love36D
校验提示文案
kingboy82
校验提示文案
SuperMax_Z
校验提示文案
老刘在忙
校验提示文案
饺饺饺
校验提示文案
请叫我狼先生
校验提示文案
清远楓葉
校验提示文案
纸城优空
校验提示文案