Voip

星號 - 來自 SIP DID 中繼的入站呼叫“由於找不到分機而被拒絕”

  • October 12, 2011

我有一個帶有 DIDforSale 的 DID,它指向我的 Asterisk 伺服器。當我用我的固定電話撥打它時,我得到了 AT&T 斷開的線路錄音。Asterisk CLI 顯示錯誤消息:

[Oct  6 17:03:00] NOTICE[10563]: chan_sip.c:20163 handle_request_invite: Call from 'didforsale_1' to extension '###########' rejected because extension not found.

“來自”部分錶示它正確匹配對sip.conf等條目。“to”部分顯示對等方正在正確發送 DID 號碼作為目標分機。DID 號碼是對等方傳入上下文中的有效擴展(詳情如下),因此我只能假設 Asterisk 正在查看錯誤的上下文。

配置

我正在使用通過 Apt 在執行 Ubuntu Server 10.04 (lucid) 的物理伺服器上安裝的 Asterisk 1.6.2.5-0ubuntu1.4。我將中繼配置為sip.conf每個原始 IP 一個對等點(有兩個)。這些是相關的節:

[didforsale_base](!)
   type=peer
   context=from-did
   nat=no
   insecure=port,invite

   ; configure codecs
   disallow=all
   allow=ulaw
   allow=alaw
   allow=g729
   dtmfmode=rfc2833

[didforsale_1](didforsale_base)
   host=AAA.AAA.AAA.AAA

[didforsale_2](didforsale_base)
   host=BBB.BBB.BBB.BBB

對等體被配置為向上下文發送呼叫,該from-did上下文包含每個 DID 號碼的擴展。上下文配置extensions.ael如下:

// starting context for calls originating from DID trunks
// the call is matched on the DID number and routed appropriately
context from-did {
   // test DID from DIDforSale
   ########### => jump s@inbound;
}

調試輸出

除了 SIP 數據包轉儲之外,使用core set verbose 5core set debug 5sip set debug on唯一的附加 CLI 輸出是:

 == Using SIP RTP CoS mark 5
Sending to AAA.AAA.AAA.AAA : 5060 (no NAT)
Using INVITE request as basis request - 1510862529_23265@CCC.CCC.CCC.CCC
Found peer 'didforsale_1' for '+###########' from AAA.AAA.AAA.AAA:5060
Found RTP audio format 18
Found RTP audio format 0
Found RTP audio format 101
Found audio description format G729 for ID 18
Found audio description format PCMU for ID 0
Found audio description format telephone-event for ID 101
Capabilities: us - 0x10c (ulaw|alaw|g729), peer - audio=0x104 (ulaw|g729)/video=0x0 (nothing)/text=0x0 (nothing), combined - 0x104 (ulaw|g729)
Non-codec capabilities (dtmf): us - 0x1 (telephone-event), peer - 0x1 (telephone-event), combined - 0x1 (telephone-event)
Peer audio RTP is at port CCC.CCC.CCC.CCC:5432

事先故障排除

我已經驗證sip show peer didforsale_1了同行正在使用正確的上下文。dialplan show from-did表示上下文解析正確。如果我將它包含在我的桌面電話的預設上下文中,呼叫 DID 號碼會按預期為我提供 IVR 菜單。

我閱讀了Google搜尋結果的前幾頁,查找了圍繞錯誤消息的幾組搜尋詞,但沒有發現任何有用的資訊。大多數使用 FreePBX 或類似產品的人需要幫助設置我from-did在 GUI 中的上下文。一些文章看起來可能與我遇到的問題相同,但沒有一個有答案。我會發布連結,但我的聲譽太低了。一旦它足夠高,我將編輯以添加它們。

我最終閱讀了錯誤消息中提到的handle_request_invite函式的原始碼。chan_sip.c該函式呼叫get_destination(在同一個文件中)來解析目標地址。如果get_destination返回錯誤,它會產生我看到的錯誤消息。

來自 DID 提供商的傳入 SIP 請求中的 URI 域INVITE設置為我的 PBX 的 IP 地址,而不是其域。我已allowexternaldomains禁用sip.conf並且我的 IP 不在域列表中,因此目標地址被拒絕。查看原始碼get_destination似乎應該在返回錯誤之前在調試級別 1 產生錯誤消息,但由於某種原因我沒有看到它。

將我的 IP 地址添加到域列表似乎已經解決了這個問題。

引用自:https://serverfault.com/questions/319316