我已经启动并运行了 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 配置对我来说是可行的。