Asterisk和SIP在NAT之后

我正在尝试安装一个Asterisk-Server接受来自其他networking客户端的呼叫。 服务器和客户端位于NAT之后。

我已经在客户端启动了STUN,但是我仍然在听到对方的问题。 一段时间后,呼叫结束,Asterisklogging一条关于重传超时的消息,并且没有收到对于关键数据包的回复。

最简单,懒散的方法是把你的星号框设置成1:1的natconfiguration(通常称为家庭路由器上的DMZ主机),并确保在sip.conf中设置了externip =。

SIP和NAT常见的麻烦是:

  • SIP头包含呼叫源和目的地信息(IP地址),这些信息可能无法到达/来自nat后面的客户端和服务器
  • RTPstream(audio和其他)需要转发大量的端口,
  • 许多NAT设备(例如Ciscos James Sneeringer提到的)试图“帮助”,通常做的不好
  • 一些SIP设备将尝试“重新启动”,这基本上意味着build立与主叫设备的直接连接,而不是通过PBX路由它。 NAT彻底打破了这一点。

假设你不能1:1 NAT星号,试试这些:

在sip.conf的一般部分中:

  • 确保设置了externip(externip =)
  • 设置nat = yes(这经常被滥用/误解,但尝试它)
  • 确保设置了localnet = / subnet mask(例如192.168.1.23/255.255.255.0)(这会导致星号将其私有IP写入发送到该networking上的电话的SIP报头,但在其他地方使用externip)

在问题手机的设备部分: – qualify = 5000(这将导致星号每5秒检查分机号码,根据需要调整,只要它比你的NAT超时短,它应该保持映射)

在您的NAT /防火墙上 – 确保rtp.conf中列出的所有UDP端口都有转发条目到您的星号服务器。 通常情况下,这可能是10000-12000(每个呼叫最多可以使用4个RTP频道,所以设置至less可以处理500个同时呼叫)。 当然,5060(SIP信令)

我发现这个网页在过去很有帮助: http : //asteriskguru.com/tutorials/sip_nat_oneway_or_no_audio_asterisk.html

如果你使用一个带有networking界面(FreePBX,Elastix,Trixbox,PBX-in-a-flash等等)的星号发行版让我知道,我可以build议一些GUI设置,而不是直接编辑conf文件。 我有大部分的debugging问题的不满…

值得注意的是,一旦你设置了外部IP地址,你不可能(也可能不应该)设置本地networking地址。 根据詹姆斯的评论:如果你的防火墙正在为你处理这个问题,它可能会造成令人难以置信的隐藏的回环情况。