为什么通过我的服务器进行的 SIP 呼叫没有声音?

为什么通过我的服务器进行的 SIP 呼叫没有声音?

我已经启动并运行了 FreeSWITCH SIP 服务器。它有公共 IP 并且位于 1 对 1 NAT 之后(实际上是 Amazon EC2 实例)。

我可以连接到它,拨打其他终端(即我的 Android 设备拨打我的 PC 或反之),信号发送没有任何问题(呼叫、应答、挂断等)。不幸的是,让我抓狂的是,就是这样:没有音频通过,也没有视频。

服务器没有抛出错误,但它报告了许多重传,如下所示:

switch_rtp.c:915 [ zrtp 引擎]: 警告!HELLO 已达到最大重传次数(重试 20 次)。ID=15

编解码器设置正确(相同的配置在我的 LAN 上本地工作)。客户端的 NAT/防火墙可能存在问题,信号确实可以通过(可能是由于固定端口,数据流在随机端口上运行,这是我目前最好的选择)。客户端上的 STUN/TURN/ICE 设置似乎没有效果。端点位于对称 NAT 后面。服务器上没有 iptables 规则,安全组设置如下:http://wiki.freeswitch.org/wiki/防火墙

请帮忙。如何让它工作或者至少诊断出什么问题?

答案1

静默意味着没有 RTP,请仔细检查您的防火墙设置

还要检查 SIP 响应的 SDP 部分中是否有正确的公共 IP 地址,EC2 实例位于 NAT 后面

tcpdump 和 wireshark 是你的好朋友

答案2

研究部分:(感谢 Matthias,tcpdump 日志分析很有帮助)在客户端与服务器信号通信时,部分会话被路由到正确的 IP(我第一次检查时就是这样的),而媒体则没有(我没有注意到,啊)。RTP 流被导向 10。.* 网络(服务器的私有 IP)和 192.168.net(我的电脑私有 IP)。一旦你知道你在寻找什么,就很容易发现。

解决方案包括两个部分。首先,我必须禁用家用路由器上的 ALG 支持,因为它会干扰客户端用来突破 NAT 的 STUN。基本上,STUN 能够发现什么,ALG 就会逆转什么。经过这一简单的更改后,来自服务器的 RTP 被定向到正确的地址。

其次,在设置第二台服务器后,我突然意识到我忘记在 FreeSWITCH 配置中为内部配置文件配置外部 IP。手册在这里:http://wiki.freeswitch.org/wiki/Amazon_ec2是正确的,我只是设法在建议的配置中省略了两行。基本上,引用链接中描述的更改后的 vanilla 配置对我来说是可行的。

相关内容