NAT 背后的星号和 SIP

use*_*700 2 nat asterisk sip

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

我已经在客户端上激活了 STUN,但我仍然无法听到双方的声音。一段时间后,呼叫结束并在 Asterisk 上记录一条关于达到重传超时的消息,并且出现没有对收到的临界数据包的答复。

qua*_*cky 5

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

SIP 和 NAT 的常见问题是:

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

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

在 sip.conf 的一般部分:

  • 确保设置了 externip (externip=)
  • 设置 nat=yes (这经常被过度使用/误解,但试试看)
  • 确保 localnet=/subnet mask (eg 192.168.1.23/255.255.255.0) 已设置(这将导致星号将其私有 IP 写入发送到该网络上的电话的 SIP 标头,但在其他地方使用 externip)

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

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

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

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