張炳
山西大同同煤集團通信有限責(zé)任公司數(shù)據(jù)網(wǎng)絡(luò)中心
STUN技術(shù)及在VOIP中的應(yīng)用
張炳
山西大同同煤集團通信有限責(zé)任公司數(shù)據(jù)網(wǎng)絡(luò)中心
STUN ;VOIP ;公私網(wǎng)穿越
隨著互聯(lián)網(wǎng)的迅速發(fā)展,以IP技術(shù)為基礎(chǔ)的新一代通信系統(tǒng)逐漸發(fā)展成熟,其中以VOIP技術(shù)為代表的通信技術(shù)已逐漸得到廣泛的應(yīng)用。SIP、H.323、MGCP等網(wǎng)絡(luò)通信協(xié)議的開發(fā)為VOIP技術(shù)提供了技術(shù)保障,目前在國內(nèi)正在大規(guī)模實施的NGN技術(shù)的核心即應(yīng)用了VOIP技術(shù)。
盡管VOIP技術(shù)已經(jīng)得到了廣泛的應(yīng)用,但在具體實施的過程中,仍普遍面臨很多實際問題,大多數(shù)企業(yè)在部署VOIP應(yīng)用時,大多采用了以下方案:
1、從安全的角度進行考慮,一般將VOIP網(wǎng)絡(luò)放在公司防火墻后面,由防火墻實施保護。因此必須考慮如何讓VOIP流可以穿越防火墻。特別是VOIP的客戶端和服務(wù)端均位于防火墻之后。
2、部分企業(yè)在實施VOIP項目時,由于沒有充足的IP地址,不得不采用私網(wǎng)地址,為了保證公網(wǎng)用戶可以注冊到VOIP系統(tǒng)中,需要在公司路由器或者邊界會話器等設(shè)備中進行NAT轉(zhuǎn)換。
在上述兩種方案中,均面臨如何解決NGN用戶公私網(wǎng)穿越這一難題,在VOIP技術(shù)的發(fā)展過程中,先后出現(xiàn)了多種針對以上問題的解決方案,可以讓基于VoIP呼叫穿透防火墻,但不同的NAT設(shè)備要求使用不同的NAT技術(shù)。因此在實施的過程中仍存在諸多不便。本文即討論一種新的解決方案:利用STUN服務(wù)器技術(shù)解決VOIP應(yīng)用中的NAT問題。
STUN技術(shù)是一種輕量級協(xié)議,它允許位于NAT之后的VOIP客戶獲取所分配的公網(wǎng)IP及端口號,同時還能夠獲取NAT及防火墻類型。利用所獲取的公網(wǎng)IP信息可以以VOIP服務(wù)器端進行交互,從而實現(xiàn)NAT穿越。由于該技術(shù)實現(xiàn)簡單,因此它可以廣泛地應(yīng)用于有NAT設(shè)備的VOIP網(wǎng)絡(luò)中。
STUN分為CLIENT和SERVER兩部分,其中CLIENT位于私網(wǎng)內(nèi)部,可以集成到終端設(shè)備中,用于產(chǎn)生和發(fā)送STUN請求報文,而SERVER部分位于公網(wǎng)之中,用來接收并響應(yīng)CLIENT發(fā)送的請求報文。所有的STUN報文均有20個字節(jié)長的報頭組成,如圖一所示:
圖一
其中消息類型分為Binding Request、BindingResponse、Binding ErrorResponse、SharedSecret Request、SharedSecretResponse、SharedSecretErrorResponse六類。事務(wù)ID是一個16個字長的標(biāo)識符,在同一個事務(wù)中使用相同的事務(wù)ID。
在消息頭之后是消息屬性部分,如圖二所示屬性部分由三部分組成,屬性類型、屬性長度、屬性值:
圖二
其中屬性類型部分可分為MAPPEDADDRESS等共11種消息。
在FRC3489中將STUN協(xié)議中的NAT4種類型,分別為:FullCone、RestrictedCone、PortRestrictedCone和Symmetric。
FullCone:即一對一(one-toone)NAT,此類NAT中,同一個內(nèi)部IP及端口均被映射到同一個公網(wǎng)的IP及端口上,公網(wǎng)的其他IP均可以通過所映射的公網(wǎng)IP及端口訪問該內(nèi)部IP。
RestrictedCone:此類NAT中,一個內(nèi)部IP及端口(IP1)映射到公網(wǎng)中的同一個IP及端口(IP2),IP1的數(shù)據(jù)包都需要通過IP2進行發(fā)送。公網(wǎng)其他IP3只有在IP1首先給IP3發(fā)送報文之后,才可以通過IP2訪問IP1。
PortRestrictedCone:該類NAT類似于RestrictedCone,但比Restricted Cone多了對端口的限制,在此類NAT中,一個內(nèi)部IP及端口(IP1)映射到公網(wǎng)中的一個IP及端口(IP2),IP1的數(shù)據(jù)包都需要通過IP2進行發(fā)送。公網(wǎng)其他IP3只有在IP1首先給IP3發(fā)送包含IP及端口的報文之后,才可以通過IP2訪問IP1。
Symmetric:該類NAT中,一個內(nèi)網(wǎng)的IP及端口發(fā)送請求到一個公網(wǎng)的IP地址和端口,均被映射到一個特殊的公網(wǎng)IP地址和端口。同一個內(nèi)網(wǎng)IP訪問不同的公網(wǎng)IP,將使用不同的映射關(guān)系,該NAT的安全級別較高。
如圖三所示:STUN客戶端如:IP電話、IP語音網(wǎng)關(guān)等設(shè)備位于各自的私網(wǎng)內(nèi),通過防火墻(FireWall)或邊界會話器(SBC)公網(wǎng)互聯(lián),與STUN技術(shù)在具體應(yīng)用中,Stun客戶端會通過三種測試方式與公網(wǎng)上的Stun服務(wù)器的兩個IP和port進行交互,根據(jù)返回的結(jié)果可以判斷出NAT的類型。
圖三STUN技術(shù)示意圖
測試一:STUN客戶端給STUN服務(wù)器通過UDP協(xié)議發(fā)送一個STUN BindingRequest,如果STUN服務(wù)器沒有返回響應(yīng),則表明此類鏈接并非UDP鏈接。如果服務(wù)端接收到該請求,該服務(wù)器將檢查源IP地址和端口,并將該地址與端口號放入一個BindingResponse中發(fā)送會客戶端中。當(dāng)客戶端收到該BindingResponse消息后,將其中由服務(wù)器端寫入的地址與端口號與客戶端地址及端口號進行對比,如果一致,則表明該客戶端位于公網(wǎng)之中,否則表明該客戶端位于一個或多個NAT之后。
測試二:經(jīng)過測試一后,如果該客戶端位于NAT之后,則客戶端將進行測試二,該測試中將利用同一源IP地址和端口向服務(wù)器端的另一個IP地址及端口發(fā)送一個BindingRequest,服務(wù)器收到該請求后,將返回客戶端一個Binding Response。如果客戶端可以收到該BindingResponse,則表明客戶端位于一個FullCone類型的NAT之后。如果客戶端沒有收到BindingResponse,接著客戶端將利用該IP地址和端口再進行一次測試一,如果兩次測試中的IP地址和端口號一樣,則表明該客戶端位于RestrictedCone或PortRestrictedCone類型的NAT之后,否則該客戶端位于Symmetric類型NAT之后。
測試三:在測試中客戶端將向服務(wù)器端B向C的第二個IP的一個端口發(fā)送一個BindingRequest,并服務(wù)器端的第二個IP使用不同的端口號給客戶端返回一個BindingResponse。如果客戶端收到該BindingResponse,則表明該NAT類型為RestrictedCone,如果沒有收到該消息則表明該NAT對端口進行了限制,及客戶端位于PortRestrictedCone類型NAT之后。
通過上述測試流程,STUN客戶端即可獲取到NAT的公網(wǎng)IP端口號,利用該IP地址和端口即可替換VOIP注冊時的IP地址和端口號并進行注冊,即可實現(xiàn)NAT穿越進行VOIP注冊。而現(xiàn)在市場上大多數(shù)的VOIP設(shè)備均內(nèi)置了STUN客戶端,因此使用該方法可以非常方便地實現(xiàn)VOIP功能。
10.3969/j.issn.1001-8972.2010.24.034