我在 Raspberry Pi 1(IP 192.168.2.2)上安装了 Asterisk PBX,它可以很好地运行一些本地 IP 电话。我最近购买了 Grandstream HT813 网关(IP 192.168.2.3),用于将模拟电话连接到 IP 并将 IP 连接到 PSTN。
模拟电话工作正常,拨号从PSTN 工作正常。拨出电话则麻烦得多。首先,我的 sip.conf 中有以下内容:(我没有包括其他电话,只包括 FXO 端口)
[general]
context=default
sipdebug=yes
bindaddr=0.0.0.0
[FXO]
type=peer
context=inbound
host=192.168.2.3
insecure=port
dtmfmode=rfc2833
canreinvite=no
secret=secret_was_here
出于显而易见的原因,我删除了上面的秘密。当我通过 IP 电话 (IP 192.168.2.5) 拨打 PSTN 时,我收到以下错误,[myphonenumber]
我拨打以进行测试的手机号码在哪里:
== Setting global variable 'SIPDOMAIN' to '192.168.2.2'
-- Executing [[myphonenumber]@local:1] Goto("PJSIP/104-00000000", "dialout,[myphonenumber],1") in new stack
-- Goto (dialout,[myphonenumber],1)
-- Executing [[myphonenumber]@dialout:1] Dial("PJSIP/104-00000000", "SIP/FXO/[myphonenumber], 30") in new stack
== Using SIP RTP CoS mark 5
Audio is at 13370
Adding codec ulaw to SDP
Adding codec alaw to SDP
Adding codec gsm to SDP
Adding non-codec 0x1 (telephone-event) to SDP
Reliably Transmitting (no NAT) to 192.168.2.3:5060:
INVITE sip:[myphonenumber]@192.168.2.3 SIP/2.0
Via: SIP/2.0/UDP 192.168.2.2:5060;branch=z9hG4bK71b94203
Max-Forwards: 70
From: <sip:[email protected]>;tag=as162b0b68
To: <sip:[myphonenumber]@192.168.2.3>
Contact: <sip:[email protected]:5060>
Call-ID: [email protected]:5060
CSeq: 102 INVITE
User-Agent: Asterisk PBX 16.2.1~dfsg-1
Date: Thu, 15 Aug 2019 19:11:17 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Content-Type: application/sdp
Content-Length: 291
v=0
o=root 1202030057 1202030057 IN IP4 192.168.2.2
s=Asterisk PBX 16.2.1~dfsg-1
c=IN IP4 192.168.2.2
t=0 0
m=audio 13370 RTP/AVP 0 8 3 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:3 GSM/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=maxptime:150
a=sendrecv
---
[Aug 15 20:11:17] ERROR[23679][C-00000001]: chan_sip.c:4321 __sip_reliable_xmit: Serious Network Trouble; __sip_xmit returns error for pkt data
因此,我设置了一个交换机端口来镜像我的 Asterisk 服务器 Pi 的输出。当发生此错误时,它不会向网关发送任何数据,因此问题出在 Asterisk 上。我看过很多帖子说这当然是权限或防火墙错误。首先,我在测试期间禁用了 Asterisk 服务器上的防火墙。(这是一个小型网络)我还运行了nmap -v -sU -p 5060 192.168.2.3
,这证实了我的网关运行正常。如果我以 Asterisk 用户身份运行该命令,当然会出现权限错误。我在系统日志中没有看到其他内容。有什么想法吗?
更新:我又看了一遍,并通过 C 代码跟踪了调用。问题似乎是在确认连接需要 UDP 套接字(第 29503 行)sipsock
时将变量(第 1101 行)设置为 -1 。这返回 -1 并引发错误。我将在我的日志文件中搜索任何其他信息。另外,我的 Asterisk 版本是 v16.2.1。sip_prepare_socket
__sip_xmit