FreeSWITCH NAT


一、FreeSWITCH幫助終端穿越NAT

1、SIP穿越

FreeSWITCH默認使用acl來判斷對方是否處於NAT環境中,配置如下:

// internal.xml
<param name="apply-nat-acl" value="nat.auto"/>

nat.auto是ACL,包含了RFC1918規定的私網地址,並去掉了本地網絡地址。當SIP終端注冊時,通過比較contact地址是否包含在此ACL中來判斷該終端是否處於NAT背后,如果是那么它就把contact地址自動替換為SIP包的來源地址,后邊的呼叫就可以正常抵達。

在實際工作當中,當局域網內架設另一個無法直接互通的子網時,信令無法正常抵達子網終端,那么就需要改為無論何種情況下都要使用的SIP包的來源地址作為用戶的contact地址。

2、RTP穿越

NAT環境下SIP終端SDP信息中的IP地址是私網地址,因此freeSWITCH無法直接發送RTP包,而NAT設備基本只允許內網主機曾經接觸過的外網主機發送的UDP數據包進入。FreeSWITCH使用了一個名為RTP自動調整的特性,SIP協商時給對方一個可用的公網RTP地址,然后等待客戶端發送RTP包,一旦FreeSWITCH收到RTP包后,就可以根據對方發包的地址給它發RTP包了。此類情況發生時,log中可以看到類似的信息:

[INFO] switch_rtp.c:7268 Auto Changing audio port from 192.168.1.198:44978 to 61.51.110.204:44978
[DEBUG] switch_rtp.c:4137 Starting timer [soft] 160 bytes per 20ms
[INFO] switch_rtp.c:7268 Auto Changing audio port from 192.168.1.101:8074 to 61.51.110.204:8074

 注意:

      此辦法存在安全性能問題,如某黑客向隨機的RTP端口發送數據包,FreeSWITCH收到后將遠端地址調整到黑客的IP和端口,進而RTP數據包全部發往新的IP地址。所以為了防止這個問題,FreeSWITCH規定這種端口調整只能在電話開始的時候進行,且僅支持一次調整。自動調整的功能默認時開啟的。配置如下:

<param name="disable-rtp-auto-adjust" value="false"/>

或者針對個別的呼叫來禁用自動調整,在呼叫時設置通道變量rtp_auto_adjust=false來禁止。

二、FreeSWITCH處於NAT后面的解決方案

1、如果路由支持uPnP或者NAT-PMP協議

FreeSWITCH支持通過uPnP或NAT-PMP協議在路由器上“打洞”,打洞完成后就知道自己將要映射的外網地址了。前提是路由器支持uPnP功能並開通。FreeSWITCH配置如下:

//internal.xml external.xml 
<param name="ext-rtp-ip" value="auto-nat"/>
<param name="ext-sip-ip" value="auto-nat"/>

FreeSWITCH檢測到NAT以后,設置Profile的外網SIP和RTPIP,通過命令可以查詢Ext-SIP-IP和Ext-RTP-IP值,如下:

freeswitch@internal> sofia status profile internal  
========================================== Name internal Domain Name N/A Auto-NAT false DBName sofia_reg_internal Pres Hosts 172.16.5.40,172.16.5.40 Dialplan XML Context public Challenge Realm auto_from RTP-IP 172.116.5.40 Ext-RTP-IP 116.171.1.158 SIP-IP 172.116.5.40 Ext-SIP-IP 116.171.1.158

2、當路由不支持uPnP和NAT-PMP協議

需要手動設置,配置如下:

//internal.xml external.xml 假設116.171.1.158為外網映射地址
<param name="ext-rtp-ip" value="auto-nat"/>
<param name="ext-sip-ip" value="auto-nat"/>
修改為
<param name="ext-rtp-ip" value="116.171.1.158"/>
<param name="ext-sip-ip" value="116.171.1.158"/>

3、其他NAT穿透相關設置

開啟rport功能

//internal.xml
<param name="NDLB-force-rport" value="true"/>

三、檢查ACL參數,確定沒有阻擋

此處做ACL控制,目前是全部放開,一旦發現可疑的攻擊服務器的IP地址就需要加入到deny中阻止。

//autoload_configs/acl.conf.xml
<param name="acl.conf" description="Network Lists">

檢查路由器上的IP端口映射,檢查FreeSWITCH機器的安全策略,確認下面端口:

  • 1719  UDP H.323 Gatekeeper RAS port
  • 1720  TCP H.323 Call Signaling
  • 3478  UDP STUN service
  • 3479  UDP STUN service
  • 5002  TCP  MLP protocol server
  • 5003  UDP Neighborhood service
  • 5060  UDP & TCP SIP UAS  Used for SIP signaling (Standard SIP Port, for default Internal Profile)
  • 5070  UDP & TCP SIP UAS  Used for SIP signaling (For default "NAT" Profile)
  • 5080  UDP & TCP SIP UAS   Used for SIP signaling (For default "External" Profile)
  • 16384-32768  UDP RTP/ RTCP multimedia streaming  Used for audio/video data in SIP and other protocols
  • 5066  TCP Websocket Used for WebRTC
  • 7443 TCP  Websocket Used for WebRTC


免責聲明!

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



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