我在亚马逊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,不确定这是否有帮助?
答案 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
就是这样。