Android SIP在双NAT环境中

时间:2014-01-09 10:05:25

标签: android sip voip

我在亚马逊ec2上运行我的星号服务器,用android sip sdk编写我的voip应用程序。一切都工作得很好,除了一个,当我的voip应用程序试图连接到双NAT网络的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”,我认为这不是真正的公众,而是来自我的3G服务提供商的私有IP。

我知道很多专业人士必须建议我忘记android sdk sip,去找pjsip。但是由于密切的源许可,我花了很多钱。

任何人都知道如何在不切换到pjsip的情况下解决此问题?我看到有一个选项“出站代理地址”为android sdk sip,不确定这是否有帮助?

2 个答案:

答案 0 :(得分:1)

管理解决了这个问题。

在Asterisk中创建扩展,只需更改NAT>是。

Csipsimple不需要这个额外的步骤。

答案 1 :(得分:0)

使用双nat进行问题:SIP(注册,通过呼叫拨号,......)和RTP冲突(语音)。

要解决SIP问题,可以使用(sip.conf):

nat=yes 

你也必须在每个路由器中配置DMZ。

要解决RTP,您可以使用(sip.conf):

externaddr=public_ip
localnet=privates_ip

就是这样。