中国电信SIP账号在FreePBX 13中的中继设置

在《配置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地址之一)。

更新

  • 2017-07-20
    2017年6月底,15.192.60.71发生故障无响应导致中继失效,而OutboundProxy域名解析出来的另一个地址15.192.60.77仍能正常工作。配置dnsmasq使之将sh.ctcims.cn解析为两个IP地址可以解决这个问题,方法如下:
    1. 为sh.ctcims.cn创建hosts映射文件。
# cat > /tmp/hosts.addn <<EOF
15.192.60.71 sh.ctcims.cn
15.192.60.77 sh.ctcims.cn
EOF
    1. 在dnsmasq.conf中添加如下参数:
addn-hosts=/tmp/hosts.addn

注:Asterisk 14以后,chan_pjsip应该可以按照DNS SRV记录进行切换(srvlookup),详见【1】。

  • 2018-05-05
    抓包发现freepbx每几分钟会查询一次SRV记录_sip._udp.sh.ctcims.cn以及sh.ctcims.cn的AAAA记录。在dnsmasq配置中增加指向OutboundProxy域名的SRV记录_sip._udp.sh.ctcims.cn,可减少无效DNS查询,并且不再需要为sh.ctcims.cn设置本地解析;另外,为语音网络的“备选DNS”服务器增加一条server配置,DNS查询会更可靠。改进后的dnsmasq配置如下:
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】。

  • 2018-05-10
    最近发现电话在通话几分钟后会无故断线。经过比较详尽的测试,我发现Asterisk 13根本不会按照SRV记录的priority/weight进行故障切换。它会选择优先级较高的主机,并按照权重进行轮询,但不会进行故障切换。另外,电信提供SIP接入的两台IMS服务器没有组成共享会话或者单一系统映像的集群——如果一个客户端向一个IP地址注册成功后,再向另一个IP地址注册,就会被拒绝,导致通话断线。综上,如果继续使用FreePBX 13,最好回到正文中的DNS设置,将域名sh.ctcims.cn本地解析为OutboundProxy两个IP地址中的一个,或者为指向两个IP地址的SRV记录设置不同的优先级,如下:
# 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

87 thoughts on “中国电信SIP账号在FreePBX 13中的中继设置”

  1. 博主,你好。我坐标在020广州,按照你写的方法,目前卡在FreePBX 13的配置上,或多或少的研究了2个礼拜,依然一无所获。
    我根据你前文的一篇–《配置EPON家庭网关接入中国电信电话交换IP网络》中,尝试用microsip已经可以呼出呼入成功。
    唯独剩下这个freepbx 13做中继的配置,毫无头绪,还望博主能看到我的评论,不吝赐教!!

    1. 祝贺你,如果MicroSIP能调通,FreePBX应该也一定可以的;加油!呵呵
      我核对了一下配置,我可能漏记一个关键参数:Edit Trunk / pjsip Settings / Advanced / Match (Permit),把它设为局端所有SIP服务器可能所在的CIDR网段(/16应该就可以了);还有一个Qualify Frequency参数,现在我不清楚它缺省值是多少秒,建议改到60以下。

  2. 很高兴那么快能看到博主的回复!
    freepbx13要我填呼出的拨号规则,这个我真心不会,还望可以指点一二!

    1. 估计你现在只有一个中继,拨号规则很简单啊,一个点号”.”就可以了。读读freepbx的文档吧

  3. 博主你好,请忽略那条评论,是我错误输入了URI内容。
    我修正后,我按照你的设置指引进行设置,目前日志上提示
    [2017-05-02 01:11:57] VERBOSE[6255] res_pjsip/pjsip_configuration.c: Contact test/sip:+862037612170@gd.ctcims.cn:5060 is now Unreachable. RTT: 0.000 msec
    以上错误,请问如何调通??

      1. 不知道这样是否算搞定了,我这边电信的SIP代理服务器是bac01.gz.gd.ctcims.cn,这个域名可以正常被解析。
        而gd.ctcims.cn则无法解析,我尝试过,无论在公网下,还是在VOIP专网下(用VOIP专网下的DNS为192.168.200.1去进行解析),也无法解析此域名。因此我在openwrt的DNSMASQ里面强制将gd.ctcims.cn的IP解析为bac01.gz.gd.ctcims.cn的IP。
        IP为219.137.176.128,不知道这样是否正确。
        博主,未知是否可以方便留下即时通讯的方式?? 我目前搞不定freepbx13的设定,已经搞得头都大了

        1. 两地电信网络结构未必相同,我们的局域网结构也不一样,问题比较复杂,我自己也是琢磨了好久历时一个多星期搞定的,恕不能提供即时技术支持。不过,根据你已提供的信息,如果你多花时间调试,肯定可以在freepbx里连通的。建议你在freepbx或openwrt路由器中抓包分析一下。这几天有时间我倒是可以重新创建Trunk核对一遍本文里的中继设置信息,以确保至少在上海电信范围内信息完整无误。不过,基本上就这些配置信息了。现在我用两个Cisco 7911话机作为分机,效果很好。

          其他具体设置,如分机设置、拨号规则,你还得多读freepbx文档,或者向freepbx社区咨询。

          1. 对配置作了如下变更:
            1. 去掉Contact User
            2. 增加Match(Permit)网段
            3. 增加g729 codec

            已通过重建trunk确认设置完整无误。

          2. 我也是用Cisco 7911话机作为分机,怎么注册不到asterisk. 你的7911是哪个固件? SIP11.8-5-2S?还是9-?
            我只有用TCP能注册,但接不了电话。能发一个CNF文件给我吗?

          3. 我的是 SIP11.9-4-2SR3-1S 在刷的时候也看到加载9-4-2SR2文件了。您可以把你的XML文件的例子给我一个吗?多谢多谢。
            emincn at gmail com 的这个。麻烦啦。

        2. 上海电信话音网络跟Internet隔离开的,分配的竟然是惠普公司IP地址段15.0.0.0/8。既然MicroSIP已经能注册上219.137.176.128,你只需在freepbx里作个DNS查询,确认gd.ctcims.cn解析到219.137.176.128,DNS解析及网络连通性上应该就没有问题了。

          1. 非常感谢博主的新编辑的指引操作,我已经按照你的指引配置好并成功使用了! 非常感谢博主!

  4. 我粘贴一段microsip的日志,看看是否有助于分析问题

    10:32:44.813 sip_endpoint.c .Module “mod-pjsua-log” registered
    10:32:44.813 sip_endpoint.c .Module “mod-tsx-layer” registered
    10:32:44.813 sip_endpoint.c .Module “mod-stateful-util” registered
    10:32:44.813 sip_endpoint.c .Module “mod-ua” registered
    10:32:44.813 sip_endpoint.c .Module “mod-100rel” registered
    10:32:44.813 sip_endpoint.c .Module “mod-pjsua” registered
    10:32:44.813 sip_endpoint.c .Module “mod-invite” registered
    10:32:44.816 wmme_dev.c ..WMME found 3 devices:
    10:32:44.816 wmme_dev.c .. dev_id 0: Wave mapper (in=2, out=2)
    10:32:44.816 wmme_dev.c .. dev_id 1: 麦克风 (Realtek High Definition (in=2, out=0)
    10:32:44.816 wmme_dev.c .. dev_id 2: Skyworth UHD-4 (2- NVIDIA High (in=0, out=2)
    10:32:44.816 wmme_dev.c ..WMME initialized
    10:32:44.816 pjlib ..select() I/O Queue created (0154E874)
    10:32:44.816 silk.c ..Init silk
    10:32:44.816 silk.c ..Init silk > DONE
    10:32:44.816 silk.c ..silk enum codecs
    10:32:44.816 silk.c ..silk add codecs
    10:32:44.816 silk.c ..Add codec 24000
    10:32:44.816 silk.c ..silk add codecs
    10:32:44.816 silk.c ..Add codec 16000
    10:32:44.816 silk.c ..silk add codecs
    10:32:44.816 silk.c ..Add codec 12000
    10:32:44.816 silk.c ..silk add codecs
    10:32:44.816 silk.c ..Add codec 8000
    10:32:44.816 pj_opus.c ..Init opus
    10:32:44.816 pj_opus.c ..Init opus > DONE
    10:32:44.816 pj_opus.c ..opus enum codecs
    10:32:44.816 sip_endpoint.c ..Module “mod-opus-sdp-rewriter” registered
    10:32:44.816 conference.c ..Creating conference bridge with 254 ports
    10:32:44.816 Master/sound ..Using delay buffer with WSOLA.
    10:32:44.818 pjsua_vid.c ..Initializing video subsystem..
    10:32:44.818 ffmpeg_vid_cod …Cannot find H261 encoder in ffmpeg library
    10:32:44.818 ffmpeg_vid_cod …Cannot find H261 decoder in ffmpeg library
    10:32:44.818 pj_vpx.c …Init vpx codec
    10:32:44.818 pj_vpx.c …Enum codecs…
    10:32:44.822 dshow_dev.c …Windows found no video input devices
    10:32:44.822 dshow_dev.c …DShow has 0 devices:
    10:32:44.827 sdl_dev.c …SDL 1.3 initialized
    10:32:44.827 colorbar_dev.c …Colorbar video src initialized with 2 device(s):
    10:32:44.827 colorbar_dev.c … 0: Colorbar generator
    10:32:44.827 colorbar_dev.c … 1: Colorbar-active
    10:32:44.827 sip_endpoint.c .Module “mod-evsub” registered
    10:32:44.827 sip_endpoint.c .Module “mod-presence” registered
    10:32:44.827 evsub.c .Event pkg “presence” registered by mod-presence
    10:32:44.827 sip_endpoint.c .Module “mod-mwi” registered
    10:32:44.827 evsub.c .Event pkg “message-summary” registered by mod-mwi
    10:32:44.827 sip_endpoint.c .Module “mod-refer” registered
    10:32:44.827 evsub.c .Event pkg “refer” registered by mod-refer
    10:32:44.827 sip_endpoint.c .Module “mod-pjsua-pres” registered
    10:32:44.827 sip_endpoint.c .Module “mod-pjsua-im” registered
    10:32:44.827 sip_endpoint.c .Module “mod-pjsua-options” registered
    10:32:44.827 pjsua_core.c .1 SIP worker threads created
    10:32:44.827 pjsua_core.c .pjsua version 2.6 for win32-6.2/i386/msvc-15.0 initialized
    10:32:44.827 pjsua_core.c .PJSUA state changed: CREATED –> INIT
    10:32:44.827 pjsua_core.c PJSUA state changed: INIT –> STARTING
    10:32:44.827 sip_endpoint.c .Module “mod-unsolicited-mwi” registered
    10:32:44.827 pjsua_core.c .PJSUA state changed: STARTING –> RUNNING
    10:32:44.828 silk.c silk default attr
    10:32:44.828 silk.c silk default attr
    10:32:44.828 silk.c silk default attr
    10:32:44.828 silk.c silk default attr
    10:32:44.830 pjsua_core.c SIP UDP socket reachable at 192.168.50.7:63994
    10:32:44.830 udp01523F68 SIP UDP transport started, published address is 192.168.50.7:63994
    10:32:44.832 tcptp:2505 SIP TCP listener ready for incoming connections at 192.168.50.7:2505
    10:32:44.834 tlstp:2506 SIP TLS listener is ready for incoming connections at 192.168.50.7:2506
    10:32:44.834 pjsua_acc.c Adding account: id=
    10:32:44.835 pjsua_acc.c .Account added with id 0
    10:32:44.835 pjsua_acc.c .Acc 0: setting registration..
    10:32:44.835 endpoint ..Request msg REGISTER/cseq=26747 (tdta0152BBA8) created.
    10:32:44.835 tsx0152CC14 …Transaction created for Request msg REGISTER/cseq=26748 (tdta0152BBA8)
    10:32:44.835 tsx0152CC14 ..Sending Request msg REGISTER/cseq=26748 (tdta0152BBA8) in state Null
    10:32:44.835 sip_resolve.c …Target ‘219.137.176.128:0’ type=Unspecified resolved to ‘219.137.176.128:5060’ type=UDP (UDP transport)
    10:32:44.835 pjsua_core.c …TX 573 bytes Request msg REGISTER/cseq=26748 (tdta0152BBA8) to UDP 219.137.176.128:5060:
    REGISTER sip:gd.ctcims.cn SIP/2.0

    Via: SIP/2.0/UDP 192.168.50.7:63994;rport;branch=z9hG4bKPj1af244a6d82f456da22934bb35288332

    Route:

    Max-Forwards: 70

    From: ;tag=14165e8eae0e491aae36d79d25ab5da9

    To:

    Call-ID: 266faef82a90470c94d7c6b71cbaeb8a

    CSeq: 26748 REGISTER

    User-Agent: MicroSIP/3.15.3

    Contact:

    Expires: 300

    Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS

    Content-Length: 0

    –end msg–
    10:32:44.835 tsx0152CC14 …State changed from Null to Calling, event=TX_MSG
    10:32:44.835 pjsua_acc.c ..Acc 0: Registration sent
    10:32:44.835 pjsua_acc.c Acc 0: setting online status to 1..
    10:32:44.895 sip_endpoint.c !Processing incoming message: Response msg 423/REGISTER/cseq=26748 (rdata01528844)
    10:32:44.895 pjsua_core.c .RX 501 bytes Response msg 423/REGISTER/cseq=26748 (rdata01528844) from UDP 219.137.176.128:5060:
    SIP/2.0 423 Interval Too Brief

    Via: SIP/2.0/UDP 192.168.50.7:63994;received=192.168.50.7;rport=63994;branch=z9hG4bKPj1af244a6d82f456da22934bb35288332

    To: ;tag=ztesipNk5lI0FL6VGC*3-3-16648*daa.3

    From: ;tag=14165e8eae0e491aae36d79d25ab5da9

    Call-ID: 266faef82a90470c94d7c6b71cbaeb8a

    CSeq: 26748 REGISTER

    X-ZTE-Cause: “CSCF-3.3.0xBC00161B-0xBC001505-0xBC0015D3-0xBC00151E@scscf04.gd.ctcims.cn”

    Min-Expires: 1800

    Content-Length: 0

    –end msg–
    10:32:44.895 tsx0152CC14 .Incoming Response msg 423/REGISTER/cseq=26748 (rdata01528844) in state Calling
    10:32:44.895 tsx0152CC14 ..State changed from Calling to Completed, event=RX_MSG
    10:32:44.896 endpoint …Request msg REGISTER/cseq=26748 (tdta0152F300) created.
    10:32:44.896 tsx0153036C ….Transaction created for Request msg REGISTER/cseq=26749 (tdta0152F300)
    10:32:44.896 tsx0153036C …Sending Request msg REGISTER/cseq=26749 (tdta0152F300) in state Null
    10:32:44.896 sip_resolve.c ….Target ‘219.137.176.128:0’ type=Unspecified resolved to ‘219.137.176.128:5060’ type=UDP (UDP transport)
    10:32:44.896 pjsua_core.c ….TX 574 bytes Request msg REGISTER/cseq=26749 (tdta0152F300) to UDP 219.137.176.128:5060:
    REGISTER sip:gd.ctcims.cn SIP/2.0

    Via: SIP/2.0/UDP 192.168.50.7:63994;rport;branch=z9hG4bKPj04c1f323ac1c49ed9d7446092e54177f

    Route:

    Max-Forwards: 70

    From: ;tag=10838b74c81b4b49bc1322f8fe82107f

    To:

    Call-ID: 266faef82a90470c94d7c6b71cbaeb8a

    CSeq: 26749 REGISTER

    User-Agent: MicroSIP/3.15.3

    Contact:

    Expires: 1800

    Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS

    Content-Length: 0

    –end msg–
    10:32:44.896 tsx0153036C ….State changed from Null to Calling, event=TX_MSG
    10:32:44.984 sip_endpoint.c Processing incoming message: Response msg 401/REGISTER/cseq=26749 (rdata01528844)
    10:32:44.984 pjsua_core.c .RX 567 bytes Response msg 401/REGISTER/cseq=26749 (rdata01528844) from UDP 219.137.176.128:5060:
    SIP/2.0 401 Unauthorized

    Via: SIP/2.0/UDP 192.168.50.7:63994;received=192.168.50.7;rport=63994;branch=z9hG4bKPj04c1f323ac1c49ed9d7446092e54177f

    To: ;tag=ztesip27CO6h6o0*3-3-16648*daf.3

    From: ;tag=10838b74c81b4b49bc1322f8fe82107f

    Call-ID: 266faef82a90470c94d7c6b71cbaeb8a

    CSeq: 26749 REGISTER

    Content-Length: 0

    WWW-Authenticate: Digest realm=”gd.ctcims.cn”,domain=”sip:scscf04.gd.ctcims.cn”,nonce=”9bae5d773dbf0957a12e0c97736d666f”,opaque=”aW1zLmNvbS5jbg==”,stale=TRUE,algorithm=MD5,qop=”auth”

    –end msg–
    10:32:44.984 tsx0153036C .Incoming Response msg 401/REGISTER/cseq=26749 (rdata01528844) in state Calling
    10:32:44.984 tsx0153036C ..State changed from Calling to Completed, event=RX_MSG
    10:32:44.985 tsx01532EC4 ….Transaction created for Request msg REGISTER/cseq=26750 (tdta0152F300)
    10:32:44.985 tsx01532EC4 …Sending Request msg REGISTER/cseq=26750 (tdta0152F300) in state Null
    10:32:44.985 endpoint ….Request msg REGISTER/cseq=26750 (tdta0152F300): skipping target resolution because address is already set
    10:32:44.985 pjsua_core.c ….TX 876 bytes Request msg REGISTER/cseq=26750 (tdta0152F300) to UDP 219.137.176.128:5060:
    REGISTER sip:gd.ctcims.cn SIP/2.0

    Via: SIP/2.0/UDP 192.168.50.7:63994;rport;branch=z9hG4bKPj5be701ce71d84352a2afd781693275c6

    Route:

    Max-Forwards: 70

    From: ;tag=10838b74c81b4b49bc1322f8fe82107f

    To:

    Call-ID: 266faef82a90470c94d7c6b71cbaeb8a

    CSeq: 26750 REGISTER

    User-Agent: MicroSIP/3.15.3

    Contact:

    Expires: 1800

    Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS

    Authorization: Digest username=”+862037612170@gd.ctcims.cn”, realm=”gd.ctcims.cn”, nonce=”9bae5d773dbf0957a12e0c97736d666f”, uri=”sip:gd.ctcims.cn”, response=”1359ce93b333c19aace6529b3fc99e64″, algorithm=MD5, cnonce=”b1ad16da92514bcaa72d53a2b52e0a6f”, opaque=”aW1zLmNvbS5jbg==”, qop=auth, nc=00000001

    Content-Length: 0

    –end msg–
    10:32:44.985 tsx01532EC4 ….State changed from Null to Calling, event=TX_MSG
    10:32:45.075 sip_endpoint.c Processing incoming message: Response msg 200/REGISTER/cseq=26750 (rdata01528844)
    10:32:45.075 pjsua_core.c .RX 747 bytes Response msg 200/REGISTER/cseq=26750 (rdata01528844) from UDP 219.137.176.128:5060:
    SIP/2.0 200 OK

    Via: SIP/2.0/UDP 192.168.50.7:63994;received=192.168.50.7;rport=63994;branch=z9hG4bKPj5be701ce71d84352a2afd781693275c6

    To: ;tag=ztesipuBtX2SQqSHu_vE15_O*3-3-16648*dba.3

    From: ;tag=10838b74c81b4b49bc1322f8fe82107f

    Call-ID: 266faef82a90470c94d7c6b71cbaeb8a

    CSeq: 26750 REGISTER

    Contact: ;expires=300

    P-Associated-URI:

    P-Associated-URI:

    Date: Tue, 02 May 2017 02:32:39 GMT

    Authentication-Info: nextnonce=”3d510648940e4c12d7d95bb5d04b2954″,qop=auth,rspauth=”2b296868aae622ed91d44c81d8cfb9b8″,cnonce=”b1ad16da92514bcaa72d53a2b52e0a6f”,nc=00000001

    Content-Length: 0

    –end msg–
    10:32:45.075 tsx01532EC4 .Incoming Response msg 200/REGISTER/cseq=26750 (rdata01528844) in state Calling
    10:32:45.076 tsx01532EC4 ..State changed from Calling to Completed, event=RX_MSG
    10:32:45.076 pjsua_acc.c ….SIP outbound status for acc 0 is not active
    10:32:45.076 pjsua_acc.c ….: registration success, status=200 (OK), will re-register in 300 seconds
    10:32:45.076 pjsua_acc.c ….Keep-alive timer started for acc 0, destination:219.137.176.128:5060, interval:15s
    10:32:49.896 tsx0152CC14 Timeout timer event
    10:32:49.896 tsx0152CC14 .State changed from Completed to Terminated, event=TIMER
    10:32:49.896 tsx0152CC14 Timeout timer event
    10:32:49.896 tsx0152CC14 .State changed from Terminated to Destroyed, event=TIMER
    10:32:49.896 tdta0152BBA8 ..Destroying txdata Request msg REGISTER/cseq=26748 (tdta0152BBA8)
    10:32:49.896 tsx0152CC14 Transaction destroyed!
    10:32:49.986 tsx0153036C Timeout timer event
    10:32:49.986 tsx0153036C .State changed from Completed to Terminated, event=TIMER
    10:32:49.986 tsx0153036C Timeout timer event
    10:32:49.986 tsx0153036C .State changed from Terminated to Destroyed, event=TIMER
    10:32:49.986 tsx0153036C Transaction destroyed!
    10:32:50.076 tsx01532EC4 Timeout timer event
    10:32:50.076 tsx01532EC4 .State changed from Completed to Terminated, event=TIMER
    10:32:50.076 tsx01532EC4 Timeout timer event
    10:32:50.076 tsx01532EC4 .State changed from Terminated to Destroyed, event=TIMER
    10:32:50.076 tdta0152F300 ..Destroying txdata Request msg REGISTER/cseq=26750 (tdta0152F300)
    10:32:50.076 tsx01532EC4 Transaction destroyed!
    10:33:00.076 pjsua_acc.c Sending 2 bytes keep-alive packet for acc 0 to 219.137.176.128:5060
    10:33:00.076 tdta0152BBA8 Destroying txdata raw

  5. 我也是上海电信的,但好像下载不到配置密码,能否留个联系方式请教一下。

    谢谢

        1. 光猫型号/版本不同吧。我听说过上海贝尔生产的有些光猫不允许useradmin下载backupsettings.conf。你试过telecomadmin登录吗?

  6. 请问下我用的raspbx(一个基于树莓派的freepbx)其自带了chan_sip,因为电信的用户名中有@,导致和其规定的register String冲突(user:pwd @ host),想请问博主有没有试过chan_sip,还是必须安装pjsip

    1. chan_sip当初我试过,打普通号码好像没问题,打10000号热线电话没有声音。由于基于pjsip的MicroSIP程序可以完美运行,后来就定下来用pjsip。我记录的chan_sip配置如下:
      Peer Details:

      type=peer
      nat=yes
      host=15.192.60.71
      outboundproxy=15.192.60.71
      fromdomain=sh.ctcims.cn
      fromuser=+8621XXXXXXXX
      username=+8621XXXXXXXX@sh.ctcims.cn
      secret=XXXXXX
      insecure=port,invite
      context=from-trunk
  7. 你好,sh.ctcims.cn这个域名是ping不出来的。我用sip代理服务器地址BAC09.jd.sh.ctcims.cn解析出来的IP地址有2个,15.192.60.86、15.192.60.82。请问你是通过什么办法拿到15.192.60.71这个IP的?我尝试过只有将sh.ctcims.cn强制解析为15.192.60.71才可以正常拨打电话,如果解析为15.192.60.86或者15.192.60.82会报proxy authentication required无法拨打电话。我通过各种手段都没有办法获得正确的IP 15.192.60.71。所以很好奇你是怎么拿到这个IP的

    1. 我家光猫里配置的SIP代理服务器的域名是BAC04.nq.sh.ctcims.cn。它们不对ping报文作出响应的。

      1. 我在光猫子把VLAN46 改成桥接,现在在树莓派上能拿到VOIP DHCP的IP地址,也能拿到网关地址,解析BAC11.DQ.SH.CTCIMS.CN 没问题。
        在树莓派上ASTERISK出现下面报错。

        Unable to find authenticate header in challenge
        不知道怎么搞了

        1. 你试试在树莓派的/etc/hosts里添加一行:

          15.192.60.136 sh.ctcims.cn

          正文提到在freepbx 13中设置outboud proxy不管用,须给sh.ctcims.cn设置本地DNS解析,解析为outbound proxy的IP地址之一。

  8. 语音+上网用的一个口吗?绑定了vlan的吗?我目前从光猫接到路由器,路由器再接的freepbx,这样,freepbx才有外网,如果直接在freepbx插线上到光猫,虽然可以接入语音,但是没有外网了?请问怎么把语音+上网口接入到路由器上?

    1. 我是通过在路由器上设置基于源地址的策略路由实现freepbx同时访问Internet和电信语音网络的。上海电信语音网络配置的是已经分配给其他单位的IPv4公网地址,直接在路由器上设置静态路由不是个好主意。

      1. 是在路由器上设置 VLAN 吗?我也是在raspberry上跑的FREEPBX 和ASTERISK; raspberry无线接入 Asus MERLIN 路由器

          1. 我家的网络是,光猫–> ASUS AC88U (Merlin) (IPTV, 网络从路由器桥接出来,GITHUB上有个脚本,路由上改DNS,OPTION 125什么的,VLAN设置)
            本来普通电话机接在光猫上,但最近我把电话接口估计静电打坏了。
            我也在上海电信的光猫上设置了 VLAN46, 用电脑接光猫LAN口,在MICROSIP上能打电话了。

            但我把RASPBERRY也接在光猫LAN上,
            [2019-02-24 20:11:04] WARNING[2202]: res_pjsip_outbound_registration.c:796 schedule_retry: No response received from ‘sip:sh.ctcims.cn:5060’ on registration attempt to ‘sip:+86216xxxxxx@sh.ctcims.cn:5060′, retrying in ’60’
            .
            如果接在路由器LAN口上,按照你设置的DNS
            sh.ctcims.cn创建hosts映射文件。
            # cat > /tmp/hosts.addn <<EOF
            15.192.60.71 sh.ctcims.cn
            15.192.60.77 sh.ctcims.cn
            EOF
            也会出错
            connected to asterisk 16.2.0 currently running on raspberrypi (pid = 629) [2019-02-24 04:06:33] error[1033]: res_pjsip_outbound_authenticator_digest.c:128 digest_create_request_with_auth: host: '15.192.60.71:5060': unable to find authenticate header in challenge

            请问是不是下面的设置没设置的原因? 我不知道写在哪?
            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

          2. 问题复杂,根据你提供的信息我无法确定原因。两点建议:1.确保路由器有到语音网段的路由;2.关闭路由器SIP ALG功能(若启用)。

            另,我这里Outbound Proxy是nq.bac04,你那儿光猫里的缺省配置的不一样的话,IP地址不能照抄我文章里的。

          3. MicroSip log里的信息显示,解析出来的地址是 15.192.60.136
            但FREEPBX, Asterisk 解不出这个地址出来。(我把raspberry pi 接在同样的网口上,光猫LAN口)
            08:42:54.480 sip_resolve.c …DNS resolver not available, target ‘BAC11.dq.sh.ctcims.cn:0’ type=Unspecified will be resolved with getaddrinfo()
            08:43:02.549 sip_resolve.c …Target ‘BAC11.dq.sh.ctcims.cn:0’ type=Unspecified resolved to ‘15.192.60.136:5060’ type=UDP (UDP transport)
            08:43:02.550 sip_resolve.c …Target ‘BAC11.dq.sh.ctcims.cn:0’ type=Unspecified resolved to ‘15.192.60.132:5060’ type=UDP (UDP transport)

            请问,我要在光猫上设置什么DNSMASQ吗?

  9. 你好,我是北京联通的用户,看过你之前的文章,并且已经成功配置windows的SIP客户端MicroSIP,可以接听和拨打电话。
    已经配置好CentOS6.9(32位)+Asterisk12+FreePBX13,但中继不成功。
    其他参数均核对无误,其实北京联通SIP参数很少,在MicroSIP中,只需要
    SIP服务器:bj.ims.chinaunicom.cn
    SIP代理:10.203.253.225
    账户:+8610xxxxxxxx@bj.ims.chinaunicom.cn
    域:bj.ims.chinaunicom.cn
    密码:xxx
    这些信息。
    其他信息都已经在中继设置中找到,除了SIP代理这一项。请问我的SIP代理是这个IP:10.203.253.225,要填写到中继设置的哪里?
    谢谢

  10. 你好,我是北京联通的用户,看过你之前的文章,并且已经成功配置windows的SIP客户端MicroSIP,可以接听和拨打电话。
    已经配置好CentOS6.9(32位)+Asterisk12+FreePBX13,但中继不成功。
    其他参数均核对无误,其实北京联通SIP参数很少,在MicroSIP中,只需要
    SIP服务器:bj.ims.chinaunicom.cn
    SIP代理:10.203.253.225
    账户:+8610xxxxxxxx@bj.ims.chinaunicom.cn
    域:bj.ims.chinaunicom.cn
    密码:xxx
    这些信息。
    其他信息都已经在中继设置中找到,除了SIP代理这一项。请问我的SIP代理是这个IP:10.203.253.225,要填写到中继设置的哪里?
    谢谢!

    1. FreePBX 13设置Outbound Proxy好像不管用。我是用dnsmasq将SIP域名直接解析为两个电信SIP Proxy地址,来解决这个问题的。

  11. 你好,我之前按照您指导在树莓派上做成功了,但是最近SD卡坏了配置没了,按照以前的印象配,InBound没有问题,Outbound总是不行,想问问看您Outbound Dial Patterns您是怎么设置的?能分享一下嘛?谢谢!

    1. 我的设置比较复杂。如果你只有一路中继,Dial Pattern用一个点号”.”就可以了。

  12. 您好,我在家庭局域网使用microsip 实验成功,在国外l2tp 拨回家庭局域网,sip代理提示407需要认证,请问一下您是否了解sip代理的认证信息

  13. 使用microsip后,注册可以成功,可以拨出电话,但是接通后没有声音,microsip中既然显示拨号中,而且手机无法拨入,请问哪里还需要设置吗?

    1. 我用microsip测试时毫无障碍,不过我现在用freepbx作PBX,很久没试过microsip了。也许局端服务器设置不完全一样。你可以查一下MicroSIP网站的faq,看看调节参数管不管用。

        1. SIP ALG确实常会造成问题,我当时测试过,启用了就无法通话。但是,在我家光猫里这个选项缺省是关闭的。你家光猫缺省启用的?我有必要更新一下上一篇SIP博客。

          1. 我用的是单口纯光猫,光猫里没有关于语音这部分的配置,需要在自己的路由器上建立vlan46的语音接口,所以电脑上的SIP已经处于nat后面了,路由器上要处理SIP NAT的问题,包括SIP ALG,还有一些UDP端口的映射。我买了一个语音网关接在局域网里,看了一下,里面用的是asterisk,现在基本上解决了电话的接打问题,除了来电显示在模拟电话上显示不出来。

  14. 我是联通用户,目前我已经配上chan_sip了,我配pjsip不成功,请求帮助。我留个电话吧13291826224,请大佬联系一下我,有偿帮助

    1. 我没有时间,抱歉!我配置信息都给出了,就这点。dns问题解决后,运行长期稳定。

    2. 我最终确定的dns配置是这样的:

      # 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

  15. 博主您好,我用光猫测试电信的DNS 192.168.200.1是通的,延迟20ms多吧没有丢包,根据traceroute结果,跃点数超过30也没有跳到DNS,跟traceroute某些大型IDS类似,所以我猜测电信的DNS可能是个自治系统,就是Autonomous system, AS,但是把DNS设置在路由上就ping不通了,同样的设置,用一些语音网关没有问题,非常奇怪,在报文里也发现了一些公网IP地址

    1. 上海电信的话音网络跟公网隔离的,而且分配了不属于他们的公网地址。光纤宽带到运营商服务器的RTT通常在几个毫秒。

      1. 今天用笔记本装了MicroSip,DNS:192.168.200.1是通的,从抓取的包看起来,发了一次DNS请求,bac05.st.gd.ctcims.cn,回包2个IP地址,接着是SIP注册,很流畅就注册完了,后面我把2个地址做了SRV,gd.ctcims.cn在后来的包里没发现解析记录,但也做了219.137.176.128解析,microsip注册、呼叫、被叫都测试过,再根据包内容修改路由(思科CUBE)报文格式,线路切到路由之后起初有几次已经200了,但是N秒掉线,还在修改软参就再也注册不上,再切回microsip又正常,现在的问题还是路由ping不通DNS,非常头疼

          1. 优先级调整过了,思科的好像SRV优先级设置一样也会轮询,不过昨天这个问题已经解决了,现在一直200,DNS不通跟目标地址不通的问题出在路由表上,因为是双线,电信移动共3个号码,必须设置路由,ip route interface type tag,问题就在这里,next-hop是DHCP获取的default-gateway,而不是本地获取的IP,原命令加个dhcp参数解决,现在两个路由器分别连接2个电信账号也可以,希望可以帮到有需要的人,也希望懂思科号码转换规则的大佬可以帮到我^*^

  16. 感谢博主,今天测试已经200了,路由重置设置,DNS也ping通了,只是不太稳定,1-4分钟就重新注册,原因未知,还在努力看debug日志,之前ping不通DNS的问题感觉可能是因为启用了loopback口导致发出包源地址变成loopback导致,或许启用NAT会正常,现在开始折腾分机,思科系统IP折腾久了还算熟悉,语音是个陌生领域,再请教博主是否有移动IMS VOIP接入经验,密码从光猫抄出来正确,路由和microsip一样代码403

  17. 再次咨询博主,拨打长途返回487,拆线,找了很多资料都没有提及,或者没有针对性的提出哪个参数问题,invite修改为tel格式也不行,请教博主是否遇到过,另外中移动ims已经可以注册,需要修改register头域,SIP-Req-URI从ims.gd.chinamobile.com:5060修改为ims.gd.chinamobile.com,invite头域也一样不能带端口,否则403

  18. 设置完成后,已经注册成功了,用的chanpjsip,但是打不进来,一打就说(你拨叫的用户暂时无人接听,),拨也拨不出去,拨任何号都说是,(你拟拨打的号码是空号),包括打10000
    已经设置了inbound 和 outbound routes了。

  19. 请教博主
    我之前用的是asterisk 16.09江苏电信(chan_sip) 未使用freepbx 正常注册和通话
    现在换了freepbx后
    pjsip 注册失败,局端返回uri不支持
    chan_sip可以正常注册。
    可以外拨 10000也正常
    拨入也可以振铃,但是接起来就自动挂断
    tcpdump查看包发现rtp链接 freepbx发给局端但是局端未回复
    然后我端发
    SIP/2.0 487 Request Terminated
    然后挂机了。

    在另一台虚拟机(同一网段) 的裸asterisk16.09可以拨出也可以拨入,rtp可以正常连接
    这是为啥。。
    freepbx还有什么设置吗

    1. 上周末我也发现一直能正常工作的chan_pjsip配置出问题,呼出没问题,但呼入忙音或报网络问题。我估计近期电信IMS服务器作过系统升级,导致跟Asterisk 13之间的对称SIP/RTP信令出现兼容性问题,但是最新版的MicroSIP软电话仍能匹配,呼入呼出似乎都无障碍(我只试过半小时左右,拨了几通电话)。

      经过一番抓包分析后,我回退到chan_sip。chan_sip必须设置external address,并在光猫/路由器上设置端口转发。我可以将配置信息另发在一篇笔记上。

      那我建议你升到FreePBX 15,用Asterisk 16设置chan_pjsip中继。

      1. 感谢回复
        我用的就是最新的freepbx15 和asterisk 16
        chan_pjsip我能注册但是在拨打电话的时候局端发来的包,我这里抓包显示uri schema 不能解析不知道为啥,注册都是按照和你一样的方式。注册也是成功的

        另外我之前chan_sip 拨入rtp无法建立连接的问题似乎是找到了,我把from-trunk的里面的 =>include from-pstn注释掉了 然后
        直接 ==>exten s, answer()
        ==>exten s,Dial(pjsip/xx)
        竟然就能接上了 rtp也没有问题了。
        所以不知道是不是 extension 里面哪里设置有点问题。。

        不过我的chan_sip并没有设置external address
        光猫上的那一路我桥接出来到路由器然后自己根据路由表重新路由和拆分dns解析了,和正常公网不冲突,仅路由sip相关的 bac/ims-sip相关协议

        1. 我感觉应该是找到问题了
          关于chan_sip呼叫无法接入的问题
          之前为了测试方便 所以直接在inbound里面直接 route 到了extension(cisco电话/或者microsip上)。
          然后设备振铃接电话,就自动挂掉了查看日志和tcpdump发现并没有启动RTP数据流
          同时查看手机拨打的时候 发现没有接通就直接挂了
          后来在inbound route里面 改先announcement (空) 把电话先answer然后在转到extension上就好了。
          不知道这么设置对不对,用announcement或者queue先把电话接了在转到extension上。
          网上查了下好像有off-hoke的方法 但是没找到明确的
          我这边并没有做ivr 不需要选择转接所以做的都是直接转extension

          另外pjsip经过调试依旧无法访问,局端包本地无法解析(freepbx15 latest/ asterisk 16.6.2)
          期待你的回复

          1. 感谢回复
            我去查一下网络
            因为我用的是没有nat走路由表转发的方案仅出站用了srcnat 光猫设置的是bridge而非route

            方便的话可以提供一下inbound route的设置方案吗?
            都是any? 然后set deatination怎么设置的? 直接到extension么?

          2. 我只有一条Default Inbound Route,目标是个Ring Group。这个Ring Group的Extension List上有两个分机号;如果两个分机都无响应,最后的目标是其中一个分机的Voicemail。

          3. 我根据你的设置使用 ring group(只放一台设备)的时候也可以正常通信 rtp工作正常

            但是我在inbound route 设置到extension->到分机上就没法接起来电话

            我推测不管是announcement 还是ring group
            freepbx 先handle了远端的rtp 然后再拨打分机 最后两个桥接器来
            直接到extension 就不管连接了?

          4. 目标是Ring group或Extension或Voicemail或其他,不影响中继通信的。在目标就绪前,Asterisk不会接起中继上的呼叫。

          5. 上面那条抽风了 麻烦删掉
            —–
            最新研究。
            真的遇到鬼了。 简直是鬼故事
            我尝试了把局端直接桥接倒本地(freepbx 直接获取唯一的局端分配的地址然后用vga 操作ssh)还是不行会挂断
            然后把所有from-pstn 注释了 只留下一条exten => s, 1, Dial(PJSIP/xx)
            还是不行。
            后来搞到半夜手机没电了 就换个手机继续研究原因
            结果???
            换了个手机继续搞结果竟然可以了? 不管是直接 exten => dial
            还是走inbound route 然后直接转到extensions也可以了?
            我满脸? ???
            这两个号码区别是
            一个是 189xxxxxxx
            一个是 133xxxxxxx 均为电信号 均为本地电信号
            189xxxxx的手机是 iphone SE 2
            133xxxxx的手机是 iphone XR
            下面开始研究是手机号的问题还是手机的问题
            无语

          6. 最最最最最最最新研究
            无法接听以及自动会挂断和手机号码并没有关系

            经过排查会自动挂断的手机号 开通了 4G VOLTE
            把VOLTE关了就能正常接听了
            数据日志表现是 本地端无法与远端RTP建立链接。
            被远端踢掉,也就是 推测局端RTP也是中继最后和4G VOLTE 端建立连接的
            4G VOLTE里面的通信有可能和现在的SIP协议不兼容 或者说我这里sip的设置还有待完善 又或者是从光猫来看 局端并不是普通SIP 而是IMS-SIP,里面肯定包含有IMS协议。
            具体研究就是这么多。 这也可能是那次升级后你不能用PJSIP的原因
            建议你如果有条件也可以试试你那边的chan_sip和volte是否能正常通信建立连接
            有条件可以加个微信什么的回头可以讨论讨论
            我对pbx/asterisk不太熟悉,比较熟悉linux以及linux驱动/开发/少量内核部分/网络层c c++等

          7. 我是看得一头雾水。你碰到的应该是网络问题或Asterisk与电信局端服务器的适配问题,跟呼入设备是啥毫无关系的,4G VOLTE智能手机、GSM老人机、固定电话、SIP软电话……都必须能建立会话。再说一个呼叫建立不知道经过几个交换机了。

            我的Default Inbound Route的目标换成一个Extension,一点问题也没有。我感觉我碰到的chan_pjsip呼入呼叫遇忙音或网络问题可能是Register时间间隔问题,MicroSIP间隔较短,chan_pjsip间隔较长,另外重启asterisk以后一小段时间呼入是可以的。不过,我改用chan_sip问题已解决,快一周了呼入呼出没再碰到问题,计划以后升级freepbx后再调试pjsip。

            我的常用E-mail地址用户名就是我博客用户名,域名跟你的一样。


          8. 这两天又密集测试了下
            发现还是volte无法呼入直接到extension
            如果说是网络问题,我已经把光猫的那个ip桥接到asterisk上了。。
            也就是asterisk 直接dhcp获取到了局端的内部地址,而且仅有一张网卡,也就是说所有dns用的是电信的分配的地址,通信也不存在任何NAT,traceroute直接到bacserver没有任何nat存在,路由表也全为电信的路由表,freepbx都无法连接,我只能通过vga 敲命令连到freepbx了,还是解决不了电信volte呼入自动挂断问题
            而且仅有volte出现这个问题。。。

            而且仅有 电信的 4GVOLTE号码不行
            联通volte /非volte 可以
            移动volte /非volte 可以
            电信 volte不行 非volte可以
            换个号码
            电信 volte 不行 非volte可以
            但是到ring group/announcement(asterisk先建立rtp的)都可以
            只能测是到这个层面了
            我把所有的呼入都挂到ring group了
            pjsip本地不支持远端(江苏电信)的uri scheme
            具体就是那个 tags=zet*(&*(&*(这种的
            江苏这边用的不标准,所以也没法支持了可能上海没有则会个问题

            这个问题。。哭笑不得

          9. 你试过在Windows上用microsip软话机注册电信服务器然后呼入呼出吗?

            目前我的freepbx虚拟机双网卡,一个连无线路由器内部网,另一个作为WAN接口通过VLAN桥接到EPON网关的LAN,并通过DHCP获取EPON网关的LAN地址,网关作NAT。

            如果你microsip直接注册能呼入呼出,那很可能是你freepbx防火墙配置问题。

          10. 如果说是网络问题,我已经把光猫的那个ip桥接到asterisk上了。。
            也就是asterisk 直接dhcp获取到了局端的内部地址,而且仅有一张网卡,也就是说所有dns用的是电信的分配的地址,通信也不存在任何NAT,traceroute直接到bacserver没有任何nat存在,路由表也全为电信的路由表,freepbx都无法连接,我只能通过vga 敲命令连到freepbx了,还是解决不了电信volte呼入自动挂断问题

            我很好奇你怎么让freepbx直接获得电信语音网络的IP地址的。如果可以做到,我肯定也会让freepbx获取电信语音网络的IP地址,避免NAT。在我家epon网关的“网络/宽带设置”页面上,如果把连接电信语音网络的WAN连接(VOICE_INTERNET)的模式改成Bridge,“服务模式”下拉菜单上就没有带VOICE的选项了。查了一下中国电信E8-C家庭网关的技术指标要求,它是中国电信总公司发布的;按道理各地分公司供应商可能不同,但设备的技术指标应该是一样的。

          11. 这两天比较忙 还没试volte直接在microsip注册时候是不是会有同样问题
            你刚问的如何桥接这一块我之前倒是研究过
            这里没法贴图。。
            和你的思路基本没差就是把局端的光口VLAN brige 出来
            首先我这边在brige的时候会有voice 选项,但是这个选项并不重要
            这个选项是给光猫 内部的sip作为tag识别的(猜测)
            主要区分光端数据的是 VLAN id
            比如我这边vlan上网id是43,voice是42
            你可以试一下
            在brige的时候要和route的vlan id相同 802.1p优先级也和之前route的相同。
            如果需要详细配置,我这边后续就把配置图发到你邮箱

            如果你用虚拟机类似exsi 可以直接把这个口桥接到esxi的虚拟vswitch(后续稳定了可以pcie-passthrough直接到freepbx)
            这样你可以分配到任意一个机器(win/linux)到局端的ip地址
            我那时候就是把他桥到好几台机器,包括中间截断拆包 监听数据流等都是这么做的,比如windows桥一个开wireshare, 还有测试nat的时候就用windows那个地址ping freepbx的地址,测试nat访问是否通等等。。。。

            不过要提醒你这套方案也会有一些问题
            首先 用于语音的这一组vlan,他的dns/上网的路由表都是只用于语音,换句话说你的这台freepbx 并无法上网(外网)。
            如果要让freepbx能上网 你需要把默认路由挂在你的另一个网卡上 (可以在路由表设置网卡metric优先级) 然后把局端的ip组 比如你那边的53.xx.xx.xx/16 路由到你局端这块网卡。
            这是第一个问题
            第二个问题在于dns
            用于电话的这条方案 他的dns查不了外边的地址
            也就是说,查不了百度,google,所以外边dns要走外面,*.ctcims.cn要走内部的ip
            第三个问题在于
            江苏的电话这一组的网址是 172.76-79.xx.xx 这一段网址并不是内网网址 有一段是外网的,比如一些国外网站,我之前因为在路由器做了防火墙filter rule 和mangle 确实屏蔽了一部分外网的地址,所以建议用dhcp client出来的精确的cidr(掩码)来判别

            不过如果你的freepbx并不需要外网访问只需要内网访问的话最简单就是桥接到freepbx的网卡优先级最高 ,然后局域网可访问的优先级最低,就可以,默认路由和dns都会走高优先级的电话内网。

            所以我这边最终的方案是 把电话这一组的dhcp client 直接引到了主路由上,因为我主路由本身就有光纤宽带,还有电信专线,还有一些链路多路接入,所以设置了完善的规则和nat来路由相应的语音数据(当然也有可能遗漏),后期需要测试的时候就直接关闭内网访问接口直挂桥接到光猫的路由桥测试

          12. 首先我这边在brige的时候会有voice 选项,但是这个选项并不重要
            这个选项是给光猫 内部的sip作为tag识别的(猜测)
            主要区分光端数据的是 VLAN id
            比如我这边vlan上网id是43,voice是42

            新建一个WAN连接,见如下截图,把EPON网关端口3“绑定”到VLAN 46,电脑确实可以从这个端口通过DHCP获取语音网络的地址。

            配置EPON网关端口3为VLAN 46 untagged端口

            EPON网关把二层、三层网络配置混在一起,让人摸不着头脑。那我下一步修改一下网络配置,让freepbx虚拟机的eth1直接获取电信语音网络的IP地址。这算是今天的一个小收获!

          13. epon本来就是个物理协议
            pon主要是无源光部署的一套协议 主要是olt 到onu 一套无源分光复用的物理层协议
            主要是上传分时复用 下行广播
            所以电信光上传小因为上行有明确的时序控制不能超售 下行因为广播 可以超售 用qos控制就行
            本质传递的还是二层的协议

          14. 所以我这边最终的方案是 把电话这一组的dhcp client 直接引到了主路由上,因为我主路由本身就有光纤宽带,还有电信专线,还有一些链路多路接入,所以设置了完善的规则和nat来路由相应的语音数据(当然也有可能遗漏),后期需要测试的时候就直接关闭内网访问接口直挂桥接到光猫的路由桥测试

            正解是配置802.1Q VLAN。

          15. 不过即使开了volte 依然可以使用freepbx/asterisk 利用ringgroup/announcement/ivr等handle brige连接
            从数据抓包上来看 就是 freebpx/asterisk 再呼叫的时候就开始和远端rtp通信。(可以不answer(), ringgroup也并不是在anser后再等待的,也是等对方摘机后才answer 但是数据先行然后转发到agi://里面了)
            然后 再本地摘机后再brige到一起

            推测是volte的rtp建立链接有延迟或者有bug? asterisk在远端没有建立链接的时候自动踢掉了(当本地摘机后)

  20. 补充一下
    我的freepbx基本上是透明的 没有做任何dns的相关解析和操作
    dns相关操作我都在路由器里面做掉了。。

    1. 局端呼入invite freepbx 15并无法解析
      这是抓包信息
      SIP/2.0 416 Unsupported URI Scheme
      chan_pjsip

      13:19:21.924433 IP (tos 0x88, ttl 250, id 45187, offset 0, flags [none], proto UDP (17), length 1154)
      xxx.xx.xxx.xx.sip > 10.130.1.8.sip: [udp sum ok] SIP, length: 1126
      INVITE sip:s@10.130.1.8:5060;line=bvgtzkk SIP/2.0
      Via: SIP/2.0/UDP xxx.xx.xxx.xx:5060;branch=z9hG4bK95f65e389a56a171742e-E2PtaN1
      To:
      From: ;tag=ztesipIk5Atw-B*8-3-20481*figd.8
      Call-ID: 1kTDX4c-ThCLEKXCt0M9P0D-axoJRQz7S8A7Fl8T_rwTK6QWDlqh9X3fhhb@zteims
      CSeq: 1000 INVITE
      Max-Forwards: 59
      Contact:
      P-Called-Party-ID:
      Supported: 100rel,histinfo,timer
      P-Asserted-Identity:
      X-ZTE-Cookie: 7zs4rm3;id=3t4yyxvkrt2tzv4x3k4yk6t4z3y32jtv@CGPV1R002SIPCOM
      Allow: INVITE,ACK,BYE,CANCEL,UPDATE,INFO,PRACK,NOTIFY,REFER,SUBSCRIBE,OPTIONS,MESSAGE
      Min-SE: 90
      Session-Expires: 1800;refresher=uac
      Content-Type: application/sdp
      Content-Length: 229
      Content-Disposition: session

      v=0
      o=HuaweiUgc3200 1095449229 312105942 IN IP4 172.XX.XXX.XXX
      s=SipCall
      c=IN IP4 172.XX.XXX.XXX
      t=0 0
      m=audio 27608 RTP/AVP 8 100
      a=rtpmap:100 telephone-event/8000
      a=fmtp:100 0-15
      a=ptime:20
      a=maxptime:240
      a=sendrecv
      13:19:21.925167 IP (tos 0x60, ttl 64, id 37446, offset 0, flags [DF], proto UDP (17), length 448)
      10.130.1.8.sip > xxx.xx.xxx.xx.sip: [bad udp cksum 0xb6f9 -> 0x965c!] SIP, length: 420
      SIP/2.0 416 Unsupported URI Scheme
      Via: SIP/2.0/UDP xxx.xx.xxx.xx:5060;received=xxx.xx.xxx.xx;branch=z9hG4bK95f65e389a56a171742e-E2PtaN1
      Call-ID: 1kTDX4c-ThCLEKXCt0M9P0D-axoJRQz7S8A7Fl8T_rwTK6QWDlqh9X3fhhb@zteims
      From: ;tag=ztesipIk5Atw-B*8-3-20481*figd.8
      To: ;tag=z9hG4bK95f65e389a56a171742e-E2PtaN1
      CSeq: 1000 INVITE
      Server: FPBX-15.0.16.42(16.6.2)
      Content-Length: 0

  21. 目标是Ring group或Extension或Voicemail或其他,不影响中继通信的。在目标就绪前,Asterisk不会接起中继上的呼叫。

    —–
    确实是这个道理。。但是我实在找不到问题了。。
    我现在用ring group确实asterisk不会接起中继上的呼叫,
    但是通过抓包软件发现,中继与局端RTP已经先建立起来了链接,然后在与话机建立链接 然后brige
    不管我怎么做nat 或者设置,或者填写external address也无法改变这个情况

    我这边的正确链路应该是这样
    首先局呼叫本机,本机响应,然后发送RTP ip和port
    asterisk 学习 (并且与局先建立链路)然后 等话机人工接听后 与话机建立RTP 然后通过brige 链接局RTP和话机RTP。。

    我这边直接倒extension错误的链路应该是
    首先局呼叫本机,本机响应,然后发送RTP ip和port
    asterisk 学习 (并不建立链路)然后话机接通后 局与我接通链路失败退出bridge 挂断

    我现在的配置非常魔幻 , 我其实也在路由做了nat
    但是我在freepbx并没有设置nat ,nat设置成no也没有映射5060 5160 和10000-20000的端口 但是因为能通过中继优先与局建立连接从而打通链路,但是局与我无法建立连接。
    推测就是这样。。
    但是问题是。。我不管怎么设置nat,我从路由抓包 局都不会主动与我建立连接, 5160 5060 10000-20000都映射了dstnat 但是压根没有包进来

Leave a Reply to 然然然然然然然 Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.