NAT 后面的 Asterisk 和 SIP

NAT 后面的 Asterisk 和 SIP

我正在尝试设置一个 Asterisk 服务器来接受来自其他网络中的客户端的呼叫。服务器和客户端位于 NAT 后面。

我已经在客户端上激活了 STUN,但我仍然无法在两个设备上听到对方的声音。一段时间后,通话结束,Asterisk 日志中出现一条消息,提示“已达到重传超时”和“未收到关键数据包的回复”。

答案1

解决此问题的最简单、最懒惰的方法是将您的星号框设置为 1:1 nat 配置(在家庭路由器上通常称为 DMZ 主机),并确保在 sip.conf 中设置了 externip=。

SIP 和 NAT 的常见问题是:

  • SIP 标头包含呼叫源和目标信息(IP 地址),这些信息可能无法到达/来自 nat 后面的客户端和服务器
  • 通常需要转发大量端口以传输 RTP 流(音频和其他内容)
  • 许多 NAT 设备(例如 James Sneeringer 提到的 Ciscos)试图“提供帮助”,但通常无法很好地处理报头
  • 一些 SIP 设备会尝试“重新邀请”,这基本上意味着与呼叫设备建立直接连接,而不是通过 PBX 进行路由。NAT 完全破坏了这一点。

假设您无法进行 1:1 NAT 星号,请尝试以下操作:

在 sip.conf 的常规部分中:

  • 确保已设置 externip (externip=)
  • 设置 nat=yes(这经常被过度使用/误解,但请尝试一下)
  • 确保设置了 localnet=/子网掩码(例如 192.168.1.23/255.255.255.0)(这将导致 asterisk 将其私有 IP 写入发送到该网络上的电话的 SIP 标头,但在其他地方使用 externip)

在问题电话的设备部分:-qualify = 5000(这将导致星号每 5 秒检查一次分机。根据需要进行调整,只要它短于 NAT 超时,它就应该保持映射保留)

在您的 NAT/防火墙上 - 确保 rtp.conf 中列出的整个 UDP 端口范围都有转发到您的 asterisk 服务器的条目。通常,这个范围应该是 10000-12000(每个呼叫最多可以使用 4 个 RTP 通道,因此该设置至少可以处理 500 个同时呼叫)。当然还有 5060(SIP 信令)

我以前发现这个页面很有帮助: http://asteriskguru.com/tutorials/sip_nat_oneway_or_no_audio_asterisk.html

如果您使用的是带有 Web 界面的 Asterisk 发行版之一(FreePBX、Elastix、Trixbox、PBX-in-a-flash 等),请告诉我,我可以建议一些 GUI 设置,而不是直接编辑配置文件。我对大多数问题都感到很不满意...

答案2

值得注意的是,一旦您设置了外部 IP 地址,您可能不需要(也可能不需要)设置本地网络地址。根据 James 的评论:如果您的防火墙为您处理此问题,则可能会产生令人难以置信的神秘环回情况。

相关内容