記錄一次fs配置導致串線的問題

求真得真發表於2024-09-20

概述

freeswitch是一款簡單好用的VOIP開源軟交換平臺。

fs在實際的使用過程中也會經常碰到莫名其妙的問題,大部分都是配置問題。

環境

CentOS 7.9

freeswitch 1.10.7

docker 26.1.1

問題描述

組網方案如下。其中的fs-reg是註冊伺服器,fs1和fs2是業務媒體伺服器,B1B2是倆個B路中繼。

比較特殊的地方是,fs1和fs2是透過docker部署在同一臺實體伺服器上的2個docker例項。

eyebean --> fs-reg --> fs1 --> B1

--> fs2 --> B2

問題現象。

當fs1和fs2的併發比較大的時候,會出現語音串線的情況。

本來a通話是打到B1的,看信令也是送到了B1,但是語音裡是B2的聲音,錄音也是。

問題分析

分析fs1日誌,B1協商的本端埠為“10.32.255.26 port 25692”。

[DEBUG] switch_core_media.c:8777 AUDIO RTP [sofia/external5060/13712345678] 10.32.255.26 port 25692 -> 10.0.129.14 port 11612 codec: 8 ms: 20

再從fs2的日誌中發現,B2呼叫在B1呼叫12秒後協商了一個相同的本端埠“10.32.255.26 port 25692”。

這樣,fs1和fs2會同時監聽port 25692,結果就是莫名其妙的語音串線問題。

fs1和fs2會使用相同的媒體埠,則是因為各自的配置中使用了相同的媒體埠範圍,在大併發的場景下,會有小機率發生該問題。

cat switch.conf.xml

<!-- RTP port range -->

<param name="rtp-start-port" value="16384"/>

<param name="rtp-end-port" value="32768"/>

解決方案

修改fs1和fs2的媒體埠範圍。

fs1的switch.conf.xml。

<!-- RTP port range -->

<param name="rtp-start-port" value="16000"/>

<param name="rtp-end-port" value="32000"/>

fs2的switch.conf.xml。

<!-- RTP port range -->

<param name="rtp-start-port" value="32001"/>

<param name="rtp-end-port" value="48000"/>

總結

fs的docker模式挺好用的,但是有不少要注意的坑。

空空如常

求真得真

相關文章