FreeSWITCH關於穿越NAT的那點事兒

2021-07-04 01:36:51 字數 2146 閱讀 6314

nat的種類:full cone nat(全錐型nat)、restricted cone nat(限制錐型nat)、port restricted cone nat(埠限制錐型)、symmetric nat(對稱型nat)。

freeswitch幫助終端穿越nat的解決方案:

1、sip穿越

freeswitch預設使用acl來判斷對方是否處於nat環境中,配置:

nat.auto是乙個acl,包含了rfc1918規定的私網位址,並去掉了本地網路的位址。當sip終端註冊時,通過比較contact位址是否包含在此acl中來判定該終端是否處於

nat背後,如果是那麼它就把contact位址自動替換為sip包的**位址,後邊的呼叫就可以正常抵達。

2、rtp穿越

nat環境的sip終端sdp資訊中的ip位址是私網位址,freeswitch無法直接傳送rtp包,而nat裝置基本都只允許內網主機曾經接觸過的外網主機傳送的udp資料報

進入。freeswitch使用了乙個名為rtp自動調整的特性,在sip協商時給對方乙個可用的公網rtp位址,然後等待客戶端傳送rtp包,一旦freeswitch收到rtp包後,

就可以根據對方發包的位址給它發rtp包了。此類情況發生時,log中可看到類似資訊:

[info] switch_rtp.c:4753 auto changeing port from 192.168.1.100:50496 to 1.2.3.4:50496

注意:此辦法存在安全性問題,如某黑客向隨機的rtp埠發資料報,freeswitch收到後將遠端位址調整到黑客的ip和埠,進而rtp資料全部跑歪了。所以為了防止

這個問題,freeswitch規定這種埠調整只能在**開始的時候進行,且僅支援一次調整。

自動調整的功能預設是開啟的,可在profile中禁用:

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

sip終端自己的解決方案

1、stun服務

stun的原理是:在公網上部署乙個stun伺服器,位於nat後面的客戶端裝置向它傳送一系列的udp包先在nat裝置上「打洞」,stun伺服器取到udp包的**位址後,

回送相關的訊息告訴該客戶端它被對映的外網位址。

大多數的sip話機及軟**均可以選擇是否啟用stun服務。使用stun後,sip訊息的contact頭域中就可以直接填入外網位址。

注意:stun服務對於錐形nat是有效的,但對於對稱型nat就無能為力了。簡單講就是sip終端從stun服務學習到的ip及埠會失效,如果兩個sip終端分別處於兩個

對稱型nat之後,則它們是無法進行通訊的。

2、ice

綜合利用stun和turn(使用**方式進行穿越的nat,主要用來解決對稱型nat的問題,freeswitch不支援該技術,但支援與turn的sip客戶端配合工作)等技術,

使之在最合適的情況下工作。比如,如果兩個sip終端處於相同的nat後面,則他們可以直接用內網位址進行通訊;如果位於不同的nat後面,並且是錐型nat,則選擇從

stun伺服器獲得外網位址進行通訊;如果是對稱型nat,則只能通過turn來通訊。

freeswitch處於nat後面的解決方案

1、upnp

freeswitch支援通過upnp或nat-pmp協議在路由器上「打洞」,打洞完成後就知道自己將要對映的外網位址了,前提是路由器支援upnp功能並開通。freeswitch

檢測到nat以後,設定profile的外網sip和rtp的ip,通過命令 freeswitch@sword>sofia status profile external 可查詢ext-sip-ip和ext-rtp-ip的值。

自動檢測nat的配置在external.xml中:

2、stun服務

如果路由器不支援upnp及nat-pmp協議,那麼可將上述配置改為:

使用命令freeswitch>stun stunserver.org 可檢測該服務是否有效。

3、手動設定

手動找出路由器的外網ip位址後,以下兩種方法都可設定:

或者 4、dns伺服器

部署dns伺服器,如host:sip.sword.com,通過網域名稱解析獲得外網的ip位址。

此方法的好處是,外網和內網的sip終端使用者都可以通過網域名稱註冊,如果有移動辦公的使用者,就不用經常更換內網位址或外網位址註冊了。

關於NAT穿越的那些事兒

將一台閘道器裝置設為內部網路和外部網路的分界線,在這台閘道器裝置上一般會設定nat和防火牆功能。實現內外連線的方式,一般是內部主機發起連線,和外部伺服器或者主機進行連線,如果是部署在公網上的伺服器當然沒有問題,但是如果涉及到同樣部署在nat裝置內部的主機該如何實現主機互聯?這樣的應用有很多,比如當下...

《星際穿越》關於時間與空間的思考

看完了近期比較火的影片星際穿越,重新重新整理了我對世界對宇宙的價值觀,可以說這是一部較為實體化把理論把宇宙呈現在觀眾眼中的影片,讓那些不太明白理論的人同樣可以感受到宇宙的奧秘,穿梭在宇宙之間,領略著超乎自然神奇力量的世界裡,真是乙個心曠神怡。相信每乙個看完影片的觀眾都會為之稱讚,稱讚著自然法則的規律...

關於N 1次查詢

1,什麼是n 1次查詢 在使用hibernate,或者ibatis等工具查詢資料庫的時候,由於快取,或者lazyload 懶載入 等原因,可能會造成要查詢n個結果,但是不得不執行n 1次查詢資料庫操作,造成效率低下。2,使用hibernate,什麼時候會產生n 1次查詢 a,使用iterate查詢的...