SIP協議十一(NAT穿透)

瞭解穿透原理,STUN,keep-alive,VPN穿透

STUN穿透,keep-alive

STUN穿透:是處於NAT後方的客戶端向STUN發送一個UDP數據包,當UDP報文穿過NAT後達到STUN時,STUN獲得其數據經過NAT後最終使用的IP地址和端口,並將獲得的IP和端口寫入到響應數據包中,然後返回給客戶端,客戶端通過對比自身和STUN返回的IP和端口,從而確定自身是否處於NAT後方,當客戶端處於NAT後時,客戶端在需要穿透的數據中攜帶NAT最外層IP、端口,方便NAT外的設備能通過這個IP、端口向內發送數據,從而實現穿透。

話機啓用STUN穿透後,SIP通訊過程中,SIP註冊和SDP媒體協商前,均以即將使用的端口爲源端口,並與STUN進行交互,從而獲得對應的NAT外網端口和IP,然後再將獲得的外網IP和Port攜帶到註冊包(Via、Contact)或SDP中,以便註冊服務器能找到話機,從而實現UDP穿透,實際上穿透是一個臨時端口映射過程,NAT發現一個連接超過一段時間後沒有活動,它會關閉這個映射,因此話機必須每隔一段時間發送一個UDP包,源端口爲話機自身需要監聽的端口,從而保持NAT上的指定端口不被關閉,即Keep alive機制

NAT類型檢測

環境搭建
根據NAT的工作原理,NAT類型檢測時,STUN Server必須綁定有兩個不同Server IP地址,如局域網中的STUN Server(192.168.83.243/244),因STUN僅能檢測最外層NAT類型的特點,建議使用局域網內部構建實驗環境,在辦公網絡中連接一臺Router,WAN口連接公司網絡,LAN口開啓DHCP,並連接Phone
話機配置
1)WEB→電話設置→基本設置→STUN服務器(192.168.83.243)。
2)註冊爲分機號1105,設置NAT檢測爲STUN
3)重啓話機,抓取數據並過濾"classicstun"。
在這裏插入圖片描述

NAT類型檢測案例分析

使用局域中的STUN Server 192.168.83.243
以Port Restricted Cone NAT/Full Cone檢測分析具體數據交互過程:
Port Restricted Cone NAT(端口限制圓錐形NAT)
1)參考下圖,話機IP106使用源端口14863向STUN243發起UDP請求,由STUN243響應Response,攜帶MAPPED-ADDRESS(包含話機經過NAT後的IP、Port)、CHANGED-ADDRESS(包含另一個STUN地址244)字段,話機源地址與MAPPED-ADDRESS中的地址不同,說明話機處於NAT後方,繼續檢測,反之停止檢測。
在這裏插入圖片描述
(2)話機源端口不變,繼續使用14863端口向STUN243發送UDP請求,要求STUN243 Change IP和Port(即以STUN244)響應請求,連續三次嘗試均未收到來自STUN244響應的數據包,說明NAT屬於受限型,繼續檢測,反之爲Full Cone,停止檢測(受限型,繼續檢測)。
在這裏插入圖片描述
(3)話機源端口不變,繼續使用14863端口向STUN244發送UDP請求,要求STUN244返回話機IP、Port,此時將STUN244返回的Port與(1)步驟中STUN243返回的Port進行對比,Port相同,說明NAT不屬於對稱型,需繼續檢測,反之屬於對稱型,停止檢測(port改變,不對稱型,繼續檢測)。
在這裏插入圖片描述
(4)話機源端口不變,繼續使用14863端口向STUN243發送UDP請求,要求STUN243 IP不變,換一個端口響應話機,出現三次連續無響應,說明IP不變,Port變更後無法向NAT後方的話機發送數據,即Port Restricted Cone NAT,反之Restricted Cone NAT(IP受限)。
在這裏插入圖片描述
(5)話機NAT類型顯示(warning頭域顯示:port Restricted Cone NAT)
在這裏插入圖片描述
以SIP註冊過程分析數據穿透過程

(1)使用話機位於NAT後方,且需要使用5060進行SIP註冊,在SIP註冊前,應先以5060爲源端口,向STUN發送UDP請求,要求返回該UDP經過NAT後的外網IP和Port。
在這裏插入圖片描述
(2)由STUN響應請求,在MAPPED-ADDRESS中攜帶話機外網IP、Port,該外網IP、Port與話機產生對應的臨時映射關係。
在這裏插入圖片描述
(3)話機使用STUN返回的外網IP、Port,替代至Register中的VIA、Contact頭域,例如,話機(192.168.1.106)Register中使用STUN返回的IP(192.168.79.9)、Port(5060)。
在這裏插入圖片描述

SIP SDP
話機啓用STUN穿透後,在呼叫發起或接收前,均以即將使用的媒體端口爲源端口,並與STUN進行交互,從而將獲得對應的外網Port、IP攜帶到SDP中,通常涉及到媒體端口有Audio、Video、RTCP、BFCP、FEC、FECC等
以音頻呼叫爲例分析數據穿透過程。
(1)例如,GXP2200發起通話,默認情況下會使用Audio RTP端口5004和RTCP端口5005,在發送INVITE前,話機應分別使用5004、5005爲源端口,與STUN進行交互,從而獲得對應的外網IP、Port。
(實際操作裏使用的不是5004,5005,而是38371)
在這裏插入圖片描述
(2)發起INVITE時,將獲得的外網IP、Port分別攜帶到SDP對應媒體屬性中,例如,話機(192.168.1.60)SDP中使用的外網IP(192.168.79.9)、Port
在這裏插入圖片描述

VPN

OpenVPN 是一個基於 OpenSSL 庫的應用層 VPN 實現。和傳統 VPN 相比,它的優點是簡單易用。
OpenVPN允許參與建立VPN的單點使用共享金鑰,電子證書,或者用戶名/密碼來進行身份驗證。它大量使用了OpenSSL加密庫中的SSLv3/TLSv1 協議函式庫。OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X與Windows 2000/XP/Vista上運行,幷包含了許多安全性的功能。它並不是一個基於Web的VPN軟件,也不與IPsec及其他VPN軟件包兼容。
原理
OpenVpn的技術核心是虛擬網卡,其次是SSL協議實現,由於SSL協議在其它的詞條中介紹的比較清楚了,這裏重點對虛擬網卡及其在OpenVpn的中的工作機理進行介紹:
虛擬網卡是使用網絡底層編程技術實現的一個驅動軟件,安裝後在主機上多出現一個網卡,可以像其它網卡一樣進行配置。服務程序可以在應用層打開虛擬網卡,如果應用軟件(如IE)向虛擬網卡發送數據,則服務程序可以讀取到該數據,如果服務程序寫合適的數據到虛擬網卡,應用軟件也可以接收得到。虛擬網卡在很多的操作系統下都有相應的實現,這也是OpenVpn能夠跨平臺一個很重要的理由。
在OpenVpn中,如果用戶訪問一個遠程的虛擬地址(屬於虛擬網卡配用的地址系列,區別於真實地址),則操作系統會通過路由機制將數據包(TUN模式)或數據幀(TAP模式)發送到虛擬網卡上,服務程序接收該數據並進行相應的處理後,通過SOCKET從外網上發送出去,遠程服務程序通過SOCKET從外網上接收數據,並進行相應的處理後,發送給虛擬網卡,則應用軟件可以接收到,完成了一個單向傳輸的過程,反之亦然。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章