介紹
會遇到這個問題的通常是那些客戶端網路互動應用程式的開發人員,尤其是在
對等網路和VoIP領域中。IPsec VPN客戶普遍使用NAT-T來達到使ESP包通過NAT的目的。
儘管有許多穿越NAT的技術,但沒有一項是完美的,這是因為NAT的行為是非標準化的。這些技術中的大多數都要求有一個公共伺服器,而且這個伺服器 使用的是一個眾所周知的、從全球任何地方都能訪問得到的IP位址。一些方法僅在建立連線時需要使用這個伺服器,而其它的方法則通過這個伺服器中繼所有的數據——這就引入了
頻寬開銷的問題。
方法
NATALG
普通NAT是通過修改UDP或TCP
報文頭部地址信息實現地址的轉換,但對於VOIP套用,在TCP/UDP淨載中也需帶地址信息,ALG方式是指在私網中的VOIP終端在淨載中填寫的是其私網地址,此地址信息在通過NAT時被修改為NAT上對外的地址。
語音和視頻協定(H323、SIP、MGCP/H248)的識別和對NAT/Firewall的控制,同時每增加一種新的套用都將需要對 NAT/Firewall進行升級。
在安全要求上還需要作一些折衷,因為ALG 不能識別加密後的報文內容,所以必須保證報文採用明文傳送,這使得報文在公網中傳送時有很大的安全隱患。
NAT/ALG是支持VOIP NAT穿透的一種最簡單的方式,但由於網路實際情況是已部署了大量的不支持此種特性的NAT/FW設備,因此,實際套用中,很難採用這種方式。
MIDCOM
與NAT/ALG不同的是,MIDCOM的基本框架是採用可信的第三方(MIDCOM Agent)對Middlebox (NAT/FW)進行控制,
VOIP協定的識別不由Middlebox完成,而是由外部的MIDCOM Agent完成,因此VOIP使用的協定對Middlebox是透明的 .
由於識別套用協定的功能從Middlebox移到外部的MIDCOM Agent上,根據MIDCOM 的構,在不需要更改Middlebox基本特性的基礎上,通過對MIDCOM Agent的升級就可以支持更多的新業務,這是相對NAT/ALG方式的一個很大的優勢。
在VOIP實際套用中,Middlebox功能可駐留在NAT/Firewall,通過
軟交換設備(即MIDCOM Agent)對IP語音和視頻協定(H323、SIP、MGCP/H248)的識別和對NAT/Firewall的控制,來完成VOIP套用穿越 NAT/Firewall .在安全性上,MIDCOM方式可支持控制
報文的加密,可支持媒體流的加密,因此安全性比較高。
如果在軟交換設備上實現對SIP/H323/MGCP/H248協定的識別,就只需在軟交換和NAT/FW設備上增加MIDCOM協定即可,而且以後新的套用業務識別隨著軟交換的支持而支持,此方案是一種比較有前途的解決方案,但要求現有的NAT/FW設備需升級支持MIDCOM協定,從這一點上來說,對已大量部署的NAT/FW設備來說,也是很困難的,同NAT/ALG方式有相同的問題。
STUN
解決穿透NAT問題的另一思路是,私網中的VOIP終端通過某種機制預先得到出口NAT上的對外地址,然後在淨載中所填寫的地址信息直接填寫出口NAT上的對外地址,而不是私網內終端的私有IP位址,這樣淨載中的內容在經過NAT時就無需被修改了,只需按普通NAT流程轉換
報文頭的IP位址即可,淨載中的 IP位址信息和報文頭地址信息是一致的。STUN協定就是基於此思路來解決
套用層地址的轉換問題。
STUN的全稱是Simple Traversal of UDP Through Network Address Translators,即UDP對NAT的簡單穿越方式。 應用程式(即STUN CLIENT)向NAT外的STUN SERVER通過UDP傳送請求STUN 訊息,STUN SERVER收到請求訊息,產生回響訊息,回響訊息中攜帶請求訊息的
源連線埠,即STUN CLIENT在NAT上對應的
外部連線埠。然後回響訊息通過NAT傳送給STUN CLIENT,STUN CLIENT通過回響訊息體中的內容得知其NAT上的外部地址,並將其填入以後呼叫協定的UDP負載中,告知對端,本端的RTP接收地址和
連線埠號為NAT 外部的地址和連線埠號。由於通過STUN協定已在NAT上預先建立媒體流的NAT映射表項,故媒體流可順利穿越NAT.
STUN協定最大的優點是無需現有NAT/FW設備做任何改動。由於實際套用中,已有大量的NAT/FW,並且這些NAT/FW並不支持VoIP的套用,如果用MIDCOM或NAT/ALG方式來解決此問題,需要替換現有的NAT/FW,這是不太容易的。而採用STUN方式無需改動NAT/FW,這是其最大優勢,同時STUN方式可在多個NAT串聯的網路環境中使用,但MIDCOM方式則無法實現對多級NAT的有效控制。
STUN的局限性在於需要VOIP終端支持STUN CLIENT的功能,同時STUN並不適合支持TCP連線的穿越,因此不支持H323.另外STUN方式不支持對
防火牆的穿越,不支持對稱NAT (Symmetric NAT)類型(在安全性要求較高的
企業網中,出口NAT通常是這種類型)穿越。
TURN
TURN方式解決NAT問題的思路與STUN相似,也是私網中的VOIP終端通過某種機制預先得公網上的服務地址(STUN方式得到的地址為出口NAT上外部地址,TURN方式得到地址為TURN Server上的公網地址),然後在
報文淨載中所要求的地址信息就直接填寫該公網地址。[Page]
TURN的全稱為Traversal Using Relay NAT,即通過Relay方式穿越NAT.TURN套用模型通過分配TURN Server的地址和連線埠作為私網中VOIP終端對外的接受地址和連線埠,即私網終端發出的報文都要經過TURN Server進行Relay轉發,這種方式除了具有STUN方式的優點外,還解決了STUN套用無法穿透對稱NAT(Symmetric NAT)以及類似的Firewall設備的缺陷,同時TURN支持基於TCP的套用,如H323協定。此外TURN Server控制分配地址和連線埠,能分配RTP/RTCP地址對(RTCP
連線埠號為RTP連線埠號加1)作為私網終端用戶的接受地址,避免了STUN方式中出口NAT對RTP/RTCP地址連線埠號的任意分配,使得客戶端無法收到對端發來的RTCP
報文(對端發RTCP報文時,目的連線埠號預設按RTP連線埠號加 1傳送)。
TURN的局限性在於需要VOIP終端支持TURN Client,這一點同STUN一樣對
網路終端有要求。此外,所有報文都必須經過TURN Server轉發,增大了包的延遲和
丟包的可能性。
ICE方式
應該說ICE是目前在NAT穿透中最常用的方式。ICE
(互動式連線建立)- Interactive Connectivity Establishment 是一種綜合性的NAT穿越的技術。互動式連線建立是由IETF的MMUSIC
工作組開發出來的一種framework,可整合各種NAT
穿透技術,如STUN、TURN(Traversal Using Relay NAT)、RSIP(Realm Specific IP,特定域IP)等。該framework可以讓SIP的客戶端利用各種NAT穿透方式打穿遠程的防火牆。