我有两个基于星号的 PBX,每个都在不同的 LAN 上,两个 LAN 都通过路由器连接。
第一个 pbx 是 10.0.0.1/24,第二个是 10.0.2.1/24。两个 pbx 都有自己的分机,分机之间的通话正常。
PBX1 有一个与 VoIP 提供商的 SIP 中继,位于不同网络上的不同网络接口中。PBX2 除了连接到 PBX1 的中继外,没有任何其他中继。
我面临的问题是,当 PBX2 中的用户拨打外部电话号码时,根据拨号规则,呼叫将通过中继路由到 PBX1,后者又将呼叫路由到 VoIP 提供商,PSTN 上的另一端接听电话并且...什么也听不到。
我调试了这个问题,发现 VoIP 提供商直接将 RTP 流量(tcpdump 上的 udp 数据包)发送到 PBX2 上的设备。由于 VoIP 网络和 PBX2 之间没有路由,因此流量很大。
我的问题是:这是应该的工作方式吗?我是否必须确保两端都可以路由?
是否有任何方法可以使 PBX1 作为代理工作,以便只有 PBX1 可以访问 VoIP 提供商?
我正在使用星号 1.4。
感谢您的帮助。
答案1
使用 SIP,信号通过 SIP 完成,数字化音频通过不同的协议 RTP 发送。SIP 和 RTP 可以并且经常发送到不同的 IP 地址。这通常不是问题,只要 IP 地址都可以访问。
你的情况是这样的:
PBX2 向 PBX1 发送 SIP INVITE。该 INVITE 中包含有关音频发送位置的信息。PBX2 指定了自己的 IP 地址。由于其 IP 地址可从 PBX1 访问,因此两者之间的通话正常进行。
现在,当被叫方是外线时,PBX1 会向您的提供商发送自己的 INVITE,并在该 INVITE 中传递有关音频发送位置的信息(即 PBX2 的 IP 地址)如果两个 PBX 都使用公共 IP,那么这样做就没问题了。由于它们无法从外部访问,因此您需要修改 PBX1 的行为
在 PBX1 上,在您的sip.conf
文件中,应该有一个针对 PBX2 的对等配置。在该对等配置中,您需要添加以下行:
canreinvite=no
(在较新版本的 Asterisk 中,您可以使用directmedia=no
反而。)
这将导致 PBX1 在与 PBX2 通话时始终处于媒体路径中。换句话说,当您呼叫外部世界时,PBX1 将向您的提供商提供其自己的 IP 地址,以便将音频发送到该地址,然后它将代理该音频,并将其发送到 PBX2。
希望这可以帮助!
答案2
您所描述的情况完全有可能。毕竟,这是相当多 VoIP 提供商本身的工作方式:我的一个 VoIP 提供商在 Asterisk 上运行他们的后端系统。他们可以通过我设置的中继将呼叫路由到他们系统上的我的帐户。
对于 Asterisk 之间的设置,使用 IAX2 中继可能更简单。它们只需要在两个网络之间打开一个端口。
有几份指南可以准确描述您的场景。
这个看起来就像医生要求的: http://www.minded.ca/default/2010-03-05/multi-server-asterisk-network-with-sip-trunks/
我目前没有两个*系统可以尝试...但它看起来像一个完整的安装指南。