且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

解决Lync联盟用户之间只能IM聊天不能进行A/V呼叫问题

更新时间:2021-11-17 16:50:37

 

一、 问题现象

      某公司的本地Lync 2013与国外SFB Server 2015配置联盟后,本地Lync用户和联盟用户能够进行IM文字沟通,但视频和语音始终建立不起来,A/V视频语音连接振铃后10s自动中断。

环境架构图如下:

解决Lync联盟用户之间只能IM聊天不能进行A/V呼叫问题

 

二、问题分析

1、首先我确定了两个组织之间的Lync联盟和A/V发布使用的端口是没有问题的。

2、 在进行A/V呼叫时使用Lync Debug Tool,抓取数据包。

首先我们要了解一个完整的SIP协议会话建立的过程。一个完整的SIP协议会话建立过程如下:

解决Lync联盟用户之间只能IM聊天不能进行A/V呼叫问题

终端A首先发送一个INVITE(邀请)给终端B,INVITE中会包含连接到终端A需要经过的IP路径列表信息(Lync服务器收到INVITE信息后会根据cadidate列表中的IP地址信息逐一尝试去连接)。当终端B收到INVITE后会给终端A回复一个100 Trying告诉终端A回话正在尝试建立,并且尝试在终端B上振铃。接下来终端B会给终端A恢复一个180 Ringing振铃请求。接下来终端B会给终端A回复一个200 OK确认信息回复INVITE邀请,该数据包中包含终端A连接到终端B需要包含的IP路径地址信息。

信息确认完毕后终端A会回复一个ACK,然后开始建立媒体(A/V)会话直到会话结束。

3、 根据抓取的数据包分析:

   我们能够看到在08:29:13时间点北京Lync服务器给南非Lync服务器发送了一个INVITE邀请,将连接到北京的Lync服务器需要经过的IP列表包含在cadidate列表中,但是该列表中使用的均是内部服务器IP(南非Lync服务器收到INVITE信息后会根据cadidate列表中的IP地址信息逐一尝试去连接,而cadidate列表中的IP均为内部私网IP,是无法连接成功的)。接下来南非Lync服务器给北京Lync服务器回复了100 Tring、180 Ringing和183 Session Progress。

解决Lync联盟用户之间只能IM聊天不能进行A/V呼叫问题

 

一个正常的INVITE邀请数据包中的candidate如下:

解决Lync联盟用户之间只能IM聊天不能进行A/V呼叫问题

 

在时间点08:29:19,南非Lync服务器回复了北京Lync服务器的 1 INVITE,将连接到南非Lync服务器需要经过的IP路径列表信息包含在candidate列表中。其中包含公网IP x.x.x.x。如图。

解决Lync联盟用户之间只能IM聊天不能进行A/V呼叫问题

在时间点08:29:30,A/V连接自动中断了。(是由于南非Lync服务器尝试了所有candidate列表中的IP地址均无法成功连接北京Lync服务器)产生了错误提示:ms-client-diagnostics: 25; reason="A federated call failed to establish due to a media connectivity failure where both endpoints are internal";UserType="Callee";MediaType="audio" 通过错误提示判断Lync服务器无法判断当前连接为外部连接,无认为是一个内部连接(由于candidate列表中均为内部IP)。这种情况通常是Lync边缘服务器未配置“A/V边缘服务器已启用NAT”设置导致。

解决Lync联盟用户之间只能IM聊天不能进行A/V呼叫问题

 

三、解决方法

1、基于上述分析,我们需要调整当前Lync边缘服务器的设置,具体操作如下:

1)、启用Lync边缘服务器的“A/V边缘服务器已启用NAT”设置。

解决Lync联盟用户之间只能IM聊天不能进行A/V呼叫问题

2)、配置每台边缘服务器的NAT后的公网地址

解决Lync联盟用户之间只能IM聊天不能进行A/V呼叫问题

3)、发布Lync拓扑。

4)、重启每台边缘服务器上的A/V服务。(***在每台边缘服务器上重新运行一下Lync部署向导)

解决Lync联盟用户之间只能IM聊天不能进行A/V呼叫问题



本文转自 jialt 51CTO博客,原文链接:http://blog.51cto.com/jialt/1794136