FS NAT穿越、單通及呼入30秒自動掛斷解決


網絡拓撲

  SIP客戶端->外網->防火牆->FS
可以明顯的看出,sip客戶端是在一個網絡環境,FS在另外一個網絡環境,主要靠“外網”聯系起來(FS所在網絡有固定IP)!
網絡拓撲.png

配置之路

internal.xml

  • 設置sip和rtp的外網地址
    填上你的stun服務器,如:stun.ideasip.com、stun:stun.freeswitch.org,也可以設置成你的外網IP,具體操作你可以試試,我這里填的是FS所在的外網固定IP。
  <param name="ext-rtp-ip" value="你FS外網固定IP"/>
  <param name="ext-sip-ip" value="你FS外網固定IP"/>

external.xml

  <param name="ext-rtp-ip" value="你FS外網固定IP"/>
  <param name="ext-sip-ip" value="你FS外網固定IP"/>

switch.conf.xml

設置RTP端口開放從10000到20000,你也可以使用默認(從16384到32768)的,但是有的防火牆最多只支持一次設置間隔200,多了要設置到你哭,比如華為的usg6550防火牆……這里我們設置10000個夠了,如下:

	<param name="rtp-start-port" value="10000"/>
	<param name="rtp-end-port" value="20000"/>

在防火牆上映射fs的sip端口和rtp端口

注意 * 端口號10000-20000對應的是switch.conf.xml預先修改的 rtp-start-portrtp-end-port

端口號 協議
1719 UDP
1720 TCP
3478 UDP
3479 UDP
5002 TCP
5003 UDP
5060 UDP&TCP
5070 UDP&TCP
5080 UDP&TCP
8021 TCP
10000-20000 UDP
5066 TCP
7443 TCP

--
如果你沒有改動switch.conf.xml文件的默認端口,那么上面的10000-20000 UDP應該是16384-32768

映射好后在外網使用一個軟電話注冊登陸FS並撥9664,正常情況下可以聽到一段回鈴音樂,如果你沒有聽到,請參考下面我碰到的問題及解決思路。

碰到的問題

這里記錄的是本人實際碰到的問題和解決方法,對你不一定有用,請只做參考!

撥9664或者軟電話之間對打單通

按上面的配置撥9664,聽不到聲音;使用兩個軟電話互打只聽到一邊有聲音。抓包分析沒發現什么異常。

修改映射的外網5060,改成其它沒有被占用的端口,比如7898。也可以一同把var.xml文件里面的5060一同改掉。把默認的5060改掉后撥打9664和使用兩個軟電話互打神奇的解決了單通問題(可能是5060被運營商和諧掉了,這里本人並不清楚具體原因)。

使用外網的軟電話通過FS撥打手機號,單通

使用外網的軟電話通過FS撥打手機號,單通,經檢查發現使用的網關有NAT功能。

本人使用的網關在SIP設置菜單中有“自動Nat”、“開啟STUN”“開啟Rport 自動探測NAT IP”“開啟RTP自適應”經過多次測試,發現“開啟RTP自適應”選項鈎選后可解決“使用外網的軟電話通過FS撥打手機號,單通”的問題。

呼入30秒后自動掛斷

通過以止配置步驟,使用外網注冊上來的的軟電話之間互打、使用外網注冊上來的軟電話直接通過網關撥打電話號碼,均正常。但是,如果使用手機通過“網關”->“FS”進行呼入聲音一切正常,發現每次都准確的在30秒自動掛斷!
本人嘗試添加:

<variable name='sip-force-contact' value='NDLB-connectile-dysfunction-2.0'/>   
<action application="set" data="sip_sticky_contact=true" />

然后並不起效!

抓包分析

呼出單通包.png

  • 先看INVITE SDP包
    主要看Message Header消息的Contact
    呼出單通INVITE包.jpg

發現INVITE SDP包的Contact使用的正是網關所在內網IP及端口,這里並沒有問題!

  • 再看fs回的200 OK消息
    FS回200OK消息.jpg

發現200 OK包的Contact使用的是FS所在外網IP及端口
200OK回外網IP及端口.jpg

這樣就導致了FS收不到發回來的ACK消息,超時30S后就自動掛斷了,這里應該是FS所在的內網地址(不改成內網也可以,要保證外網的映射端口是通的就不存在這個問題)!

修改配置文件

打開internal.xml,external.xml分別找到
<param name="ext-sip-ip" value="你FS外網固定IP"/>
把它注釋掉或者改成:
<param name="ext-sip-ip" value="$${local_ip_v4}"/>
本人是直接改成<param name="ext-sip-ip" value="$${local_ip_v4}"/>沒有注釋。
呼入、呼出測試,一切正常!至此,呼入30秒后自動掛斷的問題順利解決,非常感謝@noname大佬的頂力相助!本人特地記錄此文,方便后來人進行參考!謝謝!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM