①深信服虚拟机内使用平安虚拟机客户端登录平安虚拟机
②在平安虚拟机内进行业务办公,web界面可以选择外呼对端的电话号码,点击“呼叫”后,web界面会发送数据包给信令服务器,告知服务器要拨打的电话号码
③信令服务器收到包后,主动连接深信服虚拟机上的平安外呼软件“Esphone”,并将加密后的电话号码输入到客户端软件中并开始拨打
④开始拨打后,深信服虚拟机将接收到的麦克风声音发给语音服务器
⑤语音服务器将坐席语音发给被呼叫客户
⑥被呼叫客户的声音发送给语音服务器
⑦语音服务器将被呼叫客户的声音发给深信服虚拟机
问题分析:
1、问题现象并不是必现,而是偶发性问题,因此排除外设兼容性问题;
2、虚拟机内部抓取数据包,比对正常和异常情况的数据包,发现问题在虚拟机没有收到服务器的回包;
异常的数据包里,语音RTP流里只有虚拟机往语音服务器发的包
正常的数据包里,语音RTP流里是有双向数据流的
3、通过物理电脑直接装平安外呼软件测试,可以复现问题,因此排除深信服虚拟机本身导致的问题,可以将问题锁定在网络上
4、通过在职场出口路由器抓包,同时抓lan口和wan口数据包,发现出现问题时服务器回包到了路由器,但是出口路由器并没有再转发到内网,没有转发的原因是语音服务器回包时的源端口与路由器发包到语音服务器的目的端口不一致;
根因:下图是出问题时的数据包,可以发现2个源端口为20008的流是虚拟机发送给语音服务器,语音服务器回包时却以8760端口作为源端口,此时数据包到了出口路由器时,发现与之前发包的五元组不符,因此路由器会直接丢包,不会做DNAT转发到内网虚拟机。(注:源端口相同有两条数据流的原因是lan和wan口同时抓的原因,即一条是初始数据包,一条是NAT之后的数据包)
正常的数据包,可以看到源目端口在发包和收包两个方向是对应的,没有发生改变