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

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

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

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    498 引用 • 1395 回帖 • 251 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 27 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 221 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 2 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖 • 1 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    95 引用 • 901 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 761 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 4 关注
  • Firefox

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

    7 引用 • 30 回帖 • 393 关注
  • Follow
    4 引用 • 12 回帖 • 10 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    952 引用 • 944 回帖
  • sts
    2 引用 • 2 回帖 • 226 关注
  • 叶归
    5 引用 • 16 回帖 • 8 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • Laravel

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

    20 引用 • 23 回帖 • 739 关注
  • Anytype
    3 引用 • 31 回帖 • 14 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    432 引用 • 1250 回帖 • 597 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 644 关注
  • Q&A

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

    9571 引用 • 43560 回帖 • 97 关注
  • RESTful

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

    30 引用 • 114 回帖 • 10 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 10 关注