2014-01-09 45 views
0

我運行坐在亞馬遜ec2上的星號服務器,並使用android sip sdk編寫我的voip應用程序。一切正常,除了一個,當我的voip應用程序嘗試連接到具有雙NAT網絡的SIP服務器時。我無法接聽電話。在雙NAT環境中的Android SIP

從星號控制檯,我可以清楚地看到與錯誤的IP地址的SIP註冊。

我的3G服務提供商使用雙NAT,所謂的公共IP分配給我的實際上是一個NAT私有IP。

當我做谷歌什麼是我的IP,我有不同的IP。這清楚地表明我在雙NAT網絡中。

如果我用csipsimple嘗試相同的場景,它使用正確的IP註冊。沒有STUN的幫助。

ip-10-236-xxx-xxx*CLI> sip show peers 
Name/username    Host         Dyn Forcerport ACL Port  Status  
5000/5000     10.120.1.242        D    A 42964 UNREACHABLE 

在看「10.120.1.242」,這不是真正的公共我想有,但私有IP從我的3G服務提供商。

我知道許多親這裏必須建議我忘掉android sdk sip,去pjsip。但由於密切的源代碼授權,它花費了我不少。

任何人都知道如何解決這個問題,而無需切換到pjsip?我看到有一個選項「出站代理地址」爲android sdk sip,不知道這是否有幫助?

回答

1

管理解決了這個問題。

在星號創建擴展,只需更改NAT>是。

Csipsimple不需要這個額外的步驟。

0

使用double nat來解決問題:SIP(註冊,通過呼叫撥號,...)和RTP衝突(語音)。

爲了解決SIP的問題,你可以使用(sip.conf):

nat=yes 

你也必須配置DMZ中的每個路由器。

爲了解決RTP可以使用(sip.conf):

externaddr=public_ip 
localnet=privates_ip 

僅此而已。