OpenWRT 通过 3G Modem 加 asterisk 将 GSM 通话转为 SIP

本贴最后更新于 1991 天前,其中的信息可能已经沧海桑田

本文主要实现 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 1

K3765 3G modem 2
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,号码本,不过只有一路的电话就不需要搞这么复杂了。

最后,拨号测试

呼入测试

呼入测试 1

呼入测试 2

呼出测试

呼出测试 1

呼出测试 2

refer: https://www.ppuu.org/2019/12/openwrt-asterisk-dongle-gsm-to-sip/

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 640 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 708 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 737 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 107 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 519 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 271 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 80 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 404 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    125 引用 • 74 回帖
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 554 关注
  • OneDrive
    2 引用 • 3 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 77 回帖
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 75 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    108 引用 • 153 回帖
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 4 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 612 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 2 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 557 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 385 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 795 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9951 引用 • 45204 回帖 • 77 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 93 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖