基于 Linux 的星号服务器,SIP 软件电话能够听到音频但不能向其他人发送音频

基于 Linux 的星号服务器,SIP 软件电话能够听到音频但不能向其他人发送音频

运行 Ubuntu 14.04 LTS 和 Asterisk 11.7.0。服务器设置为 SIP 电话通过 voip.ms/didlogic 使用我们的 SIP 中继(两种不同的服务,因为我们喜欢 didlogic 上的国际费率,但它不具备 voip.ms 拥有的所有国内功能;但与当前问题无关)。我只想说我对 IP 电话知之甚少。

当在家办公的员工使用 SIP 软件电话拨打固定电话时,SIP 软件电话将接收音频,但不会发送音频。固定电话上的人员不会收到来自 SIP 软件电话的任何音频。这是困扰 SIP 的典型单向音频问题。

我无法重现该问题。100% 的员工软电话在办公室本地工作。我还从家里的连接测试了软电话,我使用 VPN 隧道穿越并连接地球另一端的国家以检查延迟问题,并且我让住在几英里之外的家庭成员进行了测试,他们成功了。我感到很困惑。

还请注意,我已尝试在多种员工系统(包括 Mac 和 PC)上进行操作,并且已打开其防火墙上的端口、完全关闭防火墙等等。

为了测试目的,我在 IPTables 中没有设置规则,并且服务器不在我们本地路由器的 NAT(消费者路由器称之为 DMZ)后面。

Asterisk 配置开箱即用,但有两个例外:SIP 绑定端口为 5070,RTP 端口范围为 20001-30000。这可以避免来自寻求免费服务的外国自动拨号程序的连接垃圾邮件。

以下是 Asterisk 的 sip.conf 的摘录(具体细节已删除,您可能需要滚动此示例)

[general]
register => REDACTED:[email protected]:5060
register => REDACTED:[email protected]:5060

externip=REDACTED
localnet=192.168.0.0/255.255.255.0

bindaddr=0.0.0.0
bindport=5070

allowguest=no
alwaysauthreject=yes
cancallforward=yes
canreinvite=nonat
disallow=all
allow=g722
allow=ulaw
allow=alaw
qualify=yes
nat=force_rport,comedia

[didlogic]
host=sip.didlogic.net
username=REDACTED
authname=REDACTED
secret=REDACTED
insecure=port
type=peer

[vms-incoming]
host=losangeles.voip.ms
user=REDACTED
username=REDACTED
fromuser=REDACTED
authuser=REDACTED
secret=REDACTED
context=vms-incoming
insecure=invite
type=peer
trustrpid=yes
sendrpid=yes

[sip-softphone]
context=Sales
secret=REDACTED
type=friend
host=dynamic
fromuser=sip-softphone
authuser=sip-softphone
insecure=port

服务器端有两个想法:我应该将我的中继服务设置为 type=friend 吗?我的 NAT 相关配置设置是否正确且在正确的位置?特别是 canreinvite=nonat 和 nat=force_rport,comedia

我没有成功更换软件电话。为了进行测试,我们考虑安装开箱即用的 Zoiper。它设置为连接到我们的 IP 地址和非标准 SIP 端口 5070,并设置为使用默认 STUN 服务 stun.zoiper.com。它注册和拨号都很好,所以看起来 SIP 信号传输没问题,只是 RTP 音频有问题。我怀疑我应该选择一个固定的 RTP 端口(首选项 > 高级),范围在 20001-30000 之间,但再次,个人测试似乎证实了开箱即用的设置是有效的。

当我可以与员工一起测试时,我愿意发布 SIP 调试摘录,但你知道为什么它在某些情况下对我和我的亲戚有用,但对我的一般员工却不起作用吗?是不是因为家里有些人的路由器的 NAT 实现非常糟糕,还是我应该切换到带宽低得多的编解码器,如 iLBC?

另一种可能是,我家、亲戚(40 英里外)和办公室都使用时代华纳作为我们的 ISP。也许存在一些 ISP 问题,需要通过巧妙的配置来避免。

编辑: 通过找到一个开放的随机 WiFi 网络,我能够进行一些有趣的测试。在 rtp.conf 中,我设置了 strictrtp=no。在 sip.conf 中,我将 nat 和 canreinvite 设置移至各个用户,因此它不是一个通用设置,如下所示:

[sip-softphone]
context=Sales
secret=REDACTED
type=friend
host=dynamic
fromuser=sip-softphone
authuser=sip-softphone
insecure=port
canreinvite=nonat
nat=force_rport,comedia

在软电话上,我禁用了 Stun(在 Zoiper 中关闭,在 X-Lite 中设置为 ICE),然后我就可以可靠地获得双向音频。我还没有和员工一起测试,但事情看起来很有趣。

答案1

像您一样,我对 voip 世界一无所知,但请在 sip.conf 中尝试执行以下操作:

[general]
  directmedia=no

如果它有效,那就太好了,但我无法提供解释,因为我还没有检查过,开始这里尽管。

相关内容