2014-01-09 24 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 

仅此而已。