在《配置EPON家庭网关接入中国电信电话交换IP网络》一文中我们介绍了如何使用MicroSIP软电话程序接入中国电信的电话IP网络,并提出了实现局域网电话软交换(IP-PBX)的可能性。以下FreePBX 13的中继设置已经通过几周的实际测试,可以放心使用。
在FreePBX 13管理界面上,创建类型为chan_pjsip的SIP中继(Trunk),并在中继编辑页面的“pjsip Settings”选项卡里输入如下参数:
General: Username: +8621XXXXXXXX@sh.ctcims.cn Secret: <SECRET> SIP Server: sh.ctcims.cn SIP Server Port: 5060 Advanced: From Domain: sh.ctcims.cn From User: +8621XXXXXXXX Client URI: sip:+8621XXXXXXXX@sh.ctcims.cn:5060 AOR Contact: sip:+8621XXXXXXXX@sh.ctcims.cn:5060 Match(Permit): 15.192.0.0/16 Codecs: Enable g729
注:Match(Permit)为所有局端SIP服务器可能所在的网段。
由于电信IP电话网络的DNS服务器中没有sh.ctcims.cn这个记录,并且目前FreePBX 13中chan_pjsip的Outbound Proxy设置无效,我们必须在本地DNS服务器中为sh.ctcims.cn设置解析。在常见的DNS代理程序dnsmasq中,设置参数如下:
server=/sh.ctcims.cn/15.192.252.188 address=/sh.ctcims.cn/15.192.60.71
其中,server是EPON网关的VOICE_INTERNET连接(epon0.4)获得的DNS服务器之一,address为sh.ctcims.cn作本地解析(EPON网关中预置的OutboundProxy域名解析出来的两个IP地址之一)。
# cat > /tmp/hosts.addn <<EOF 15.192.60.71 sh.ctcims.cn 15.192.60.77 sh.ctcims.cn EOF
addn-hosts=/tmp/hosts.addn
注:Asterisk 14以后,chan_pjsip应该可以按照DNS SRV记录进行切换(srvlookup),详见【1】。
server=/sh.ctcims.cn/15.192.252.188 server=/sh.ctcims.cn/15.192.251.188 srv-host=_sip._udp.sh.ctcims.cn,BAC04.nq.sh.ctcims.cn,5060,0,0
至于无效的AAAA记录查询问题,目前竟然无法通过系统配置解决,即使通过内核参数禁用IPv6也不行,详见【2】和【3】。
# addn-hosts file for dnsmasq cat > /tmp/hosts.addn <<EOF 15.192.60.71 s1.nq.sh.ctcims.cn 15.192.60.77 s2.nq.sh.ctcims.cn EOF # dnsmasq.conf params for ctcims server=/sh.ctcims.cn/15.192.252.188 server=/sh.ctcims.cn/15.192.251.188 addn-hosts=/tmp/hosts.addn srv-host=_sip._udp.sh.ctcims.cn,s1.nq.sh.ctcims.cn,5060,0,0 srv-host=_sip._udp.sh.ctcims.cn,s2.nq.sh.ctcims.cn,5060,1,0
注:在有如此DNS设置的网络环境下,FreePBX到电信语音网络的pjsip中继可以长期稳定运行。
参考
【1】http://blogs.asterisk.org/2016/04/20/pjsip-dns-support/
【2】https://linux.ioerror.us/2015/07/25/how-to-disable-aaaa-lookups/
【3】https://bugzilla.redhat.com/show_bug.cgi?id=1027452