经常有客户向我们咨询:为什么我听不到对方的声音?甚至为什么双方都听不到声音?这个问题的根本原因可能是防火墙过滤了语音流,或者NAT(网络地址转换)屏蔽或者丢失了语音流。在大多数场景中,我们发现SIP设备,包括SIP电话、软终端以及网关等,总是部署在私网内部,配置私网地址,路由器采用NAT进行公网与私网地址的转换。
请参考以下方法解决类似语音单通或者双不通问题。
如果您的 SIP 电话或者 SIP 终端设备部署在私网内部,大多数情况下,您需要设置STUN(Simple Traversal of UDP through NATs)服务器帮助SIP终端进行私网穿越。大多数SIP设备(以及SIP终端软件)都支持 STUN 协议。
下图是 microSIP 软终端中配置 STUN 服务器。我们采用公网上的 STUN 服务器: stun.minisipserver.com 。
如果您的 miniSIPServer 部署在公共网络、采用公共IP地址,您可以采用 miniSIPServer 作为您的STUN服务器,因为 miniSIPServer 内嵌了 STUN 服务器。
我们推荐以下公网的 STUN 服务器:
我们可以配置 miniSIPServer 转发媒体流。在分机的配置窗体中,请点击“媒体类业务”页面,并配置“转发媒体流”项。
需要强调的是:如果配置 miniSIPServer 转发媒体流,SIP电话(设备)的媒体流都将全部转发给 miniSIPServer,这会严重增加服务器的负荷。 您需要综合考虑网络带宽、系统负荷等综合因素的影响。
如果 miniSIPServer 部署在路由器后面,默认配置私网地址,则需要做更多的配置来解决问题。
请参考下图。 miniSIPServer 可以配置两个 SIP 地址。 我们将"首选地址"设置为外部公网地址(可以是域名,也可以是IP地址),将“次选地址”设置为本机的私网地址。
在这个场景中, 外部公网的 SIP 分机用户与 miniSIPServer 的公网地址通信, 而本地私网的 SIP 分机用户与 miniSIPServer 的私网地址通信。
路由器需要转发相应的端口给 miniSIPServer, 否则 miniSIPServer 仍然无法接收外部的数据包。 默认情况下, 路由器应当转发以下 UDP 端口:
如果部署了 SIP over TCP/TLS, 则还需要转发相应的 TCP 端口:5060 以及 5061。
上述端口转发需要手工配置路由器。 如果路由器具备 UPnP 能力并且已经打开了这项功能, 就可以配置 miniSIPServer 自动向路由器请求端口映射。 在 miniSIPServer 的系统配置中,请确保选择了“采用 UPnP 向路由器请求映射端口”。
某些地区运营商会干扰、拦截SIP信令,遇到这种情况时,可以试试修改标准的SIP端口或者采用“基于TCP/TLS的SIP”,请参考以下文档的说明: