freeswitch是一款简单好用的VOIP开源软交换平台。
fs的实际应用中,由于网络、配置等问题,经常会产生通话无声的问题。
CentOS 7.9
freeswitch 1.10.7
部署一台新服务器,作为SBC,对接B路,部署简图如下。
A -- fs1 -- fs2(fs3媒体服务器) -- B
其中fs2和fs3是已有的老服务,运行正常。fs1是新部署的SBC,作为AB路通话的中转服务。
fs1部署配置完成后,开始测试,A发起呼叫B,B接听,但是AB都无声。
查看fs1的日志,均正常。
通过sngrep抓包,查看信令也正常,媒体流收发正常。
通过fs1本地录音,录音文件中有A路声音,没有B路声音。
通过fs2抓包,信令正常。
通过fs3抓包,fs3没有收到fs1的媒体流。
fs1上的sngrep中显示,B路的媒体流正常,说明fs1上B路的网卡上有正常的媒体流。
fs1的本地录音中没有B路声音,结合上一条,B路媒体流到达了fs1的网卡,但是没有进入fs1服务。
fs3的抓包显示,fs1的媒体流没有到达fs3的网卡。
初步分析,fs1的B路网卡上的媒体流不正常,网卡配置问题的可能性比较大。
查看fs1的服务器配置,发现fs1到fs3的静态路由没有配置。
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 120.xxx.xxx.xx 0.0.0.0 UG 301 0 0 bond0
10.0.129.0 10.55.55.110 255.255.255.0 UG 0 0 0 bond1
10.0.132.0 10.55.55.110 255.255.255.0 UG 0 0 0 bond1
10.55.55.0 0.0.0.0 255.255.255.0 U 300 0 0 bond1
120.xxx.xxx.xx 0.0.0.0 255.255.255.128 U 301 0 0 bond0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
添加完后,AB路通话正常。
实际生产环境中,网络和各种配置的异常情况特别多,需要根据实际情况一步步分析解决。
fs不能仅仅关注服务本身的问题,服务器,网络的问题也都需要了解一点。
在没有静态路由的场景下,网卡到fs服务的媒体流转发也会失败。
空空如常
求真得真
记录一次开发中遇到的关于 ThreadLocal 问题,场景是数据库表中的操作人总是无缘无故的被更改,排查了几遍代码才发现是 ThreadLocal 没有及时清理导致的。