OpenWRT通过3G Modem加asterisk将GSM通话转为SIP By HKL,
时间:2022-07-22
本文章向大家介绍OpenWRT通过3G Modem加asterisk将GSM通话转为SIP
By HKL,
,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文主要实现OpenWRT系统通过Huawei 3G Modem加asterisk套件将GSM通话转为SIP通话
安装openwrt下的asterisk16套件
opkg update
opkg install asterisk16-app-system asterisk16-chan-dongle asterisk16-pjsip asterisk16-codec-ulaw asterisk16-codec-alaw asterisk16-res-rtp-asterisk asterisk16-bridge-simple
调整PJSIP作为默认服务,并且新增几个PJSIP账户,用以测试内线通
/etc/asterisk/pjsip.conf
[transport-udp]
type=transport
protocol=udp ;udp,tcp,tls,ws,wss
bind=0.0.0.0
[6003]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw
auth=6003-auth
aors=6003
[6003-auth]
type=auth
auth_type=userpass
password=6003
username=6003
[6003]
type=aor
max_contacts=1
[6004]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw
auth=6004-auth
aors=6004
[6004-auth]
type=auth
auth_type=userpass
password=6004
username=6004
[6004]
type=aor
max_contacts=1
新增分机拨打模板,
/etc/asterisk/extension.conf
[from-internal]
exten => _Z.,1,Dial(PJSIP/${EXTEN},60,Trg)
same => n,Hangup()
用asterisk查看分机状态,拨打过程中pjsip show endpoints
中显示的状态会从Not in use
转换为In use
asterisk -rvvvv
OpenWrt*CLI> pjsip show contacts
Contact: <Aor/ContactUri..............................> <Hash....> <Status> <RTT(ms)..>
==========================================================================================
Contact: 6001/sip:6001@192.168.234.127:53117;transport= 378e2db08b NonQual nan
Contact: 6001/sip:6001@192.168.234.127:53117;transport= 378e2db08b NonQual nan
Contact: 6003/sip:6003@192.168.234.158:49989;transport= 2ec100f865 NonQual nan
Contact: 6003/sip:6003@192.168.234.158:49989;transport= 2ec100f865 NonQual nan
Contact: 6004/sip:6004@192.168.104.11:5060 586381001a NonQual nan
Contact: 6004/sip:6004@192.168.104.11:5060 586381001a NonQual nan
Objects found: 6
-- PJSIP/6001-00000005 is ringing
-- PJSIP/6001-00000005 is ringing
> 0x2262b00 -- Strict RTP learning after remote address set to: 192.168.234.127:52518
-- PJSIP/6001-00000005 answered PJSIP/6004-00000004
> 0x2270c60 -- Strict RTP learning after remote address set to: 192.168.104.11:11866
-- Channel PJSIP/6001-00000005 joined 'simple_bridge' basic-bridge <ee120657-8627-4868-b677-cb0d896a2b5a>
-- Channel PJSIP/6004-00000004 joined 'simple_bridge' basic-bridge <ee120657-8627-4868-b677-cb0d896a2b5a>
> 0x2262b00 -- Strict RTP switching to RTP target address 192.168.234.127:52518 as source
> 0x2270c60 -- Strict RTP switching to RTP target address 192.168.104.11:11866 as source
OpenWrt*CLI> pjsip show endpoints
Endpoint: <Endpoint/CID.....................................> <State.....> <Channels.>
I/OAuth: <AuthId/UserName...........................................................>
Aor: <Aor............................................> <MaxContact>
Contact: <Aor/ContactUri..........................> <Hash....> <Status> <RTT(ms)..>
Transport: <TransportId........> <Type> <cos> <tos> <BindAddress..................>
Identify: <Identify/Endpoint.........................................................>
Match: <criteria.........................>
Channel: <ChannelId......................................> <State.....> <Time.....>
Exten: <DialedExten...........> CLCID: <ConnectedLineCID.......>
==========================================================================================
Endpoint: 6001 In use 1 of inf
InAuth: 6001-auth/6001
Aor: 6001 1
Contact: 6001/sip:6001@192.168.234.127:53117;transp 378e2db08b NonQual nan
Transport: transport-udp udp 0 0 0.0.0.0:5060
Channel: PJSIP/6001-00000005/AppDial Up 00:00:04
Exten: CLCID: "6004" <6004>
Endpoint: 6002 Unavailable 0 of inf
InAuth: 6002-auth/6002
Aor: 6002 1
Transport: transport-udp udp 0 0 0.0.0.0:5060
Endpoint: 6003 Not in use 0 of inf
InAuth: 6003-auth/6003
Aor: 6003 1
Contact: 6003/sip:6003@192.168.234.158:49989;transp 2ec100f865 NonQual nan
Transport: transport-udp udp 0 0 0.0.0.0:5060
Endpoint: 6004 In use 1 of inf
InAuth: 6004-auth/6004
Aor: 6004 1
Contact: 6004/sip:6004@192.168.104.11:5060 586381001a NonQual nan
Transport: transport-udp udp 0 0 0.0.0.0:5060
Channel: PJSIP/6004-00000004/Dial Up 00:00:04
Exten: 6001 CLCID: "" <6001>
Objects found: 4
> 0x2270c60 -- Strict RTP learning complete - Locking on source address 192.168.104.11:11866
> 0x2262b00 -- Strict RTP learning complete - Locking on source address 192.168.234.127:52518
有条件的情况下建议可以考虑使用IAX分机替代SIP分机,这样只需要NAT打通一个UDP端口就能通话,而不用像SIP那样要考虑ALG,ICE,STUN等方案
下面是新增一个IAX分机的用例
opkg update
opkg install asterisk16-chan-iax2
/etc/asterisk/iax.conf
[general]
bindport=4569
bindaddr=0.0.0.0
iaxcompat=yes
nochecksums=yes
disallow=all
allow=ulaw
[6010]
type=friend
username=6010
secret=6010
context=from-internal
host=dynamic
callerid=6010<6010>
/etc/asterisk/extensions.conf
[from-internal]
exten => 6010,1,Dial(IAX2/6010,60,Trg)
由于3G modem还没到货,所以目前先更新到这里,等到货后继续配置。
12月27号收货,继续更,用到的型号是Huawei K3765.
K3765 3G modem
在openwrt下配置dongle设备,请结合实际数据配置
/etc/asterisk/dongle.conf
[general]
interval=20
[defaults]
context=dongle-in
group=0
exten=+862022221234
[dongle0]
imei=123451234512345
通过asterisk控制台查一下设备状态,
asterisk -rvvvv
RiWifi*CLI> dongle show devices
ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
dongle0 0 Free 16 3 3 FFFFFFFFFFFFFF K3765 11.126.03.04.521 123451234512345 123451234512345 Unknown
接下来新增呼出、呼入的分机配置
/etc/asterisk/extensions.conf
[from-internal]
exten => _1.,1,Dial(Dongle/g0/${EXTEN:1}) ;呼出设置,结合实际,我这边是加了"1"这个前缀,例如我的SIP分机要拨打10011,那么拨号就是110011
[dongle-in]
exten => +862022221234,1,Dial(IAX2/6010,60,Trg) ;呼入设置,我这边就是配置成所有呼叫直接转到IAX-6010分机,复杂点的可以做IVR,号码本,不过只有一路的电话就不需要搞这么复杂了。
最后,拨号测试
呼入测试
呼出测试
- 关于activitygroup过时,用frament替换操作
- Rafy 框架 - 为数据库生成注释
- CNN预测股票走势基于Tensorflow(思路+程序)
- 路径查找器AI
- android推荐使用dialogFrament而不是alertDialog
- 自定义圆角和园边的实现
- Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
- 应用潜在语义分析技术将文档进行3D可视化
- 利用神经网络算法的C#手写数字识别
- fastText、TextCNN、TextRNN…这套NLP文本分类深度学习方法库供你选择
- nfc开发
- N-CryptoAsset投资组合 | 使用PCA识别高度相关的加密货币(最近听说某币很疯狂哦!)
- 仿刮刮乐刮奖效果
- Spacebuilder在Mono上运行修改备忘
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Laravel模糊查询区分大小写的实例
- laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
- Laravel中validation验证 返回中文提示 全局设置的方法
- laravel5表单唯一验证的实例代码
- 实现laravel 插入操作日志到数据库的方法
- laravel validate 设置为中文的例子(验证提示为中文)
- Laravel 使用查询构造器配合原生sql语句查询的例子
- php面试实现反射注入的详细方法
- laravel框架 api自定义全局异常处理方法
- laravel实现于语言包的完美切换方法
- PHP校验15位和18位身份证号的类封装
- 用Echarts打造一个轮播图!
- Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
- PHP 获取客户端 IP 地址的办法实例代码
- laravel http 自定义公共验证和响应的方法