测试环境由 CSipSimple 客户端、Asterisk 服务器和带 NAT 的路由器组成。以前设备使用 UDP 端口 5060,一切正常。然后我在 Asterisk、路由器的转发规则和客户端应用程序中将端口号更改为 15000。现在,当从外部访问网络时,客户端可以注册,但当它呼叫某个分机时,Asterisk 会抱怨无法创建 DAHDI 通道。当客户端在 LAN 中时,呼叫正常。
出了什么问题?我只更改了控制端口号。
更新
首先需要说明的是,当我拨打分机号码 100 时,Asterisk 总是抱怨无法创建 DAHDI 通道,无论语音是否正常。因此,可以忽略此错误消息。
现在,详细呼叫日志的不同结尾部分:
移动客户端通过3G注册,无声音(呼叫、接听、超时):
-- SIP/103-00000001 answered SIP/101-00000000
> 0x7fda800295a0 -- Probation passed - setting RTP source address to 192.168.1.100:5062
就这样。没有其他消息。
移动客户端通过 WiFi 注册,声音正常(呼叫、接听、通话、挂断):
-- SIP/103-00000003 answered SIP/101-00000002
> 0x7fda88026620 -- Probation passed - setting RTP source address to 192.168.1.100:5062
> 0x7fda78013fb0 -- Probation passed - setting RTP source address to 192.168.1.112:4000
> 0x7fda78013fb0 -- Probation passed - setting RTP source address to 192.168.1.112:4000
-- Executing [h@macro-dial-one:1] Macro("SIP/101-00000002", "hangupcall,") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("SIP/101-00000002", "1?theend") in new stack
-- Goto (macro-hangupcall,s,3)
-- Executing [s@macro-hangupcall:3] ExecIf("SIP/101-00000002", "0?Set(CDR(recordingfile)=)") in new stack
-- Executing [s@macro-hangupcall:4] Hangup("SIP/101-00000002", "") in new stack
== Spawn extension (macro-hangupcall, s, 4) exited non-zero on 'SIP/101-00000002' in macro 'hangupcall'
== Spawn extension (macro-dial-one, h, 1) exited non-zero on 'SIP/101-00000002'
== Spawn extension (macro-dial-one, s, 43) exited non-zero on 'SIP/101-00000002' in macro 'dial-one'
== Spawn extension (macro-exten-vm, s, 9) exited non-zero on 'SIP/101-00000002' in macro 'exten-vm'
== Spawn extension (from-internal, 103, 2) exited non-zero on 'SIP/101-00000002'
答案1
我怀疑您的 SIP 端口现在在 RTP 范围内,因此 Asterisk 无法识别这是一个 SIP 连接。请移动 SIP 端口或移动 RTP 端口范围,以使它们不重叠。
请捕获失败呼叫(LAN 外)和成功呼叫(LAN 内)的 CLI 输出,并在此处发布结果。
要捕获 CLI 输出,请从 bash 提示符开始:
asterisk -r
core set verbose 10
然后从您的 LAN 拨打电话,成功,然后从 LAN 外部拨打电话,失败。发布上述完整输出(我假设您有一个简单的拨号方案)。如果您使用的是 Elastix 或 FreePBX 等预装 PBX,则输出可能太长,无法在此处发布...