我运行我的asterisk服务器坐在亚马逊ec2和我的voip应用程序用android sip sdk编写 . 一切都工作得很好,除了一个,当我的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 回答
使用双nat来解决问题:SIP(注册,通过呼叫音,......)和RTP冲突(语音) .
要解决SIP问题,可以使用(sip.conf):
你还必须在每个路由器中配置DMZ .
要解决RTP,您可以使用(sip.conf):
就这样 .
管理解决了这个问题 .
在Asterisk中创建扩展,只需更改NAT>是 .
Csipsimple不需要这个额外的步骤 .