1

我在 CentOS 6.4 x64 上配置了 Asterisk 11.7.0,配置如下sip.conf

[general]
register =>mynumber:mypass@xxx.xxx.xxx.xxx
registertimeout=20
context=incoming
allowoverlap=no
bindport=5060
bindaddr=192.168.0.3
srvlookup=no
subscribecontext=from-sip

; The SIP provider
[VoIPProvider]
canreinvite=no
username=mynumber
fromuser=mynumber
secret=mypass
context=incoming
type=friend
fromdomain=xxx.xxx.xxx.xxx
host=xxx.xxx.xxx.xxx
dtmfmode=rfc2833
disallow=all
allow=alaw
allow=ulaw
nat=yes
insecure=very

; ext 100
[100]
type=friend
host=dynamic
secret=MyPass123
context=internal
mailbox=100@default
callgroup=1
pickupgroup=1
dtmfmode=rfc2833
canreinvite=no

; ext 200
[200]
type=friend
host=dynamic
secret=MyPass123
context=internal
callgroup=1
pickupgroup=1
dtmfmode=rfc2833
canreinvite=no

和以下extensions.conf

[incoming]
; Ring on extension 100, 200 and the mobile phone.
exten => s,1,Answer()
exten => s,n,Dial(SIP/100&SIP/200&SIP/VoIPProvider/*320423456789,150,r,t,)

; Pass unanswered call to a mobile phone
exten => s,n,Dial(SIP/VoIPProvider/*320423456789,150,r)

; Still not answered? Pass unanswered calls to voicemail
exten => s,n,Voicemail(100,u)
exten => s,n,Hangup

[outgoing]
exten => _XXXXXXXXXXXXXXX,1,Dial(SIP/VoIPProvider/${EXTEN})
exten => _XXXXXXXXXX,1,Dial(SIP/VoIPProvider/${EXTEN})
exten => _XXXXXX,1,Dial(SIP/VoIPProvider/${EXTEN})

[internal]
exten => _XXX,1,Dial(SIP/${EXTEN})

; Calls to ext 100
exten => 100,1,Dial(SIP/100,20)
exten => 100,n,VoiceMail(100,u)
exten => 100,n,Hangup

; Calls to ext 200
exten => 200,1,Dial(SIP/100,20)
exten => 200,n,Hangup

每当我从手机拨打我的号码时,我都会收到拒绝信号。当我检查 wireshark 日志时,我看到三个 SIP 数据包:

MySipProvider -> 我:邀请 sip:s@192.168.0.3:5060 我 -> MySipProvider:401 未经授权的 MySipProvider -> 我:ACK sip:s@192.168.0.3:5060

这就是全部。会发生什么?谢谢你。

4

3 回答 3

1

看起来您的 Asterisk 服务器正在请求对来自您的提供商的来电进行身份验证。我猜为什么是因为 sip.conf 中“VoIPProvider”条目上的“主机”值与呼叫来源的 IP 地址相匹配。您可以通过临时注释掉“主机”值并查看来电是否有效来检查这是否是问题所在。如果是这样,您将需要对“VoIPProvider”条目进行调整,以便仅匹配拨出电话而不是拨入和拨出电话(您曾经通过设置“类型”来做到这一点,但我在路上不是最新的现在完成了)。

于 2014-01-02T22:32:23.337 回答
1

要解决传出问题,您的内部和传出用户上下文不包含在其中,请在 extension.conf 的 context internal 下添加以下行

[内部] 包括 = 传出

以便您的用户可以拨打 SIP 中继。:)

于 2014-05-27T09:10:53.427 回答
0

像这样使用注册字符串: register => urusername:urpassword@IPaddress/providername

就像你的情况一样:

注册 => mynumber:mypassword@XXXX/VoIPProvider

试一试,我认为这将解决问题:)

于 2014-05-27T09:06:57.727 回答