在2021年的时候,曾经试过用chan_sip和asterisk拨号电信固话具体可以参考这篇。
当时基本跑通,只是挂一段时间后,电话会无法拨入。当时认为是电信VOIP局端需要一些特殊的协议没有继续折腾下去。刚好上周开始有点时间,又想慢慢折腾,顺便把方案升级了一下。chan_sip在asterisk21就会被抛弃,因此转去pjsip是大势所趋。但是全网的固话教程都是按照chan_sip配的。
作为对SIP完全没了解又不想浪费时间一点点啃文档,有什么办法呢?还好官方有一个chan_sip配置转pjsip的脚本,在这里。可以用网上配置转成pjsip,有一个大概的配置,然后再按需修改。
张大妈有一篇文章[^1],也是广州电信的,同样是广州电信的同学可以抄一下作业。总结起来有一下几点:
-
要保证跟局端的网络层面是通畅的。如果你是有其他网络在这个设备上,要单独为VOIP的网络指定路由。通常来说需要静态路由的DNS服务器(可选,可以在本地DNS写死,只要用来解析outbound_proxy的地址,如bacxxxx.ctcims.cn),还有bac对应地址的网络段。
-
sip转成pjsip的配置,大体上问题不大,主要是outbound_proxy,需要按照1这里提示的重新修改。电信的bacxxx就是outbound_proxy。
-
也可以参考2,里面也有一些关于pjsip的配置可以参考。
以下是我本地配置,仅供参考:
碰到的问题:
-
刚重启asterisk能正常拨入,过一段时间就无法打入电话。其实就是要在aor的section上,加上qualify_frequency。间隔一段时间发送心跳,以保证局端的NAT有效。
-
没有声音,要保证allow里面的codec安装,并且跟你的客户端编码对应
-
安装simple_bridge,否则sip往外线打电话可能无法转发。
由于每个地方的SIP局端设备都不一致,因此最重要还是要掌握调试方法。这几个命令相当有用:
Update(20240110):
VOIP接口DHCP返回的IP地址,居然会变。而且还是整个网段的变,网关地址也变了,导致静态路由不正确。解决方案有两个:
-
用SMZDM的方案,用multiwan+策略路由。这方案最方便,但是引入了mwan3,对我来说有点重度了。
-
增加DHCP脚本,每次分配的时候重新设一下网关。参考下面脚本,放到/etc/udhcpc.user.d
[[^1]: [openwrt上运行asterisk搭建电话语音网关,对接电信ims-sip配置上遇到的一些坑]https://post.smzdm.com/p/ao9250nm/)