NAT技术研究
目錄
1 按照NAT端口映射方式分類
1.1全錐形NAT
1.2限制錐形NAT
1.3端口限制錐形NAT
1.4對稱型NAT
2 NAT穿越技術
2.1應用層網關
2.2探針技術STUN和TURN
2.3中間件技術
2.4中繼代理技術
2.5特定協議的自穿越技術
參考文章
1 按照NAT端口映射方式分類
在一對多模型中,按照端口轉換的工作方式不同,又可以進行更進一步的劃分。為描述方便,以下將IP和端口標記為(nAddr:nPort),其中n代表主機或NAT網關的不同角色。
?
▲ 圖3 按照端口轉換映射方式分類
?
1.1全錐形NAT
其特點為:一旦內部主機端口對(iAddr:iPort)被NAT網關映射到(eAddr:ePort),所有后續的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);任何一個外部主機發送到(eAddr:ePort)的報文將會被轉換后發到(iAddr:iPort)。
?
1.2限制錐形NAT
其特點為:一旦內部主機端口對(iAddr:iPort)被映射到(eAddr:ePort),所有后續的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);只有 (iAddr:iPort)向特定的外部主機hAddr發送過數據,主機hAddr從任意端口發送到(eAddr:ePort)的報文將會被轉發到(iAddr:iPort)。
?
1.3端口限制錐形NAT
其特點為:一旦內部主機端口對(iAddr:iPort)被映射到(eAddr:ePort),所有后續的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);只有(iAddr:iPort)向特定的外部主機端口對(hAddr:hPort)發送過數據,由 (hAddr:hPort)發送到(eAddr:ePort)的報文將會被轉發到(iAddr:iPort)。
?
1.4對稱型NAT
其特點為:NAT網關會把內部主機“地址端口對”和外部主機“地址端口對”完全相同的報文看作一個連接,在網關上創建一個公網“地址端口對”映射進行轉換,只有收到報文的外部主機從對應的端口對發送回應的報文,才能被轉換。即使內部主機使用之前用過的地址端口對去連接不同外部主機(或端口)時,NAT網關也會建立新的映射關系。
事實上,這些術語的引入是很多混淆的起源。現實中的很多NAT設備是將這些轉換方式混合在一起工作的,而不單單使用一種,所以這些術語只適合描述一種工作方式,而不是一個設備。比如,很多NAT設備對內部發出的連接使用對稱型NAT方式,而同時支持靜態的端口映射,后者可以被看作是全錐型NAT方式。而有些情況下,NAT設備的一個公網地址和端口可以同時映射到內部幾個服務器上以實現負載分擔,比如一個對外提供WEB服務器的站點可能是有成百上千個服務器在提供HTTP服務,但是對外卻表現為一個或少數幾個IP地址
2 NAT穿越技術
前面解釋了NAT的弊端,為了解決IP端到端應用在NAT環境下遇到的問題,網絡協議的設計者們創造了各種武器來進行應對。但遺憾的是,這里每一種方法都不完美,還需要在內部主機、應用程序或者NAT網關上增加額外的處理。
?
2.1應用層網關
應用層網關(ALG)是解決NAT對應用層協議無感知的一個最常用方法,已經被NAT設備廠商廣泛采用,成為NAT設備的一個必需功能。因為NAT不感知應用協議,所以有必要額外為每個應用協議定制協議分析功能,這樣NAT網關就能理解并支持特定的協議。
ALG與NAT形成互動關系,在一個NAT網關檢測到新的連接請求時,需要判斷是否為已知的應用類型,這通常是基于連接的傳輸層端口信息來識別的。
在識別為已知應用時,再調用相應功能對報文的深層內容進行檢查,當發現任何形式表達的IP地址和端口時,將會把這些信息同步轉換,并且為這個新連接創建一個附加的轉換表項。這樣,當報文到達公網側的目的主機時,應用層協議中攜帶的信息就是NAT網關提供的地址和端口。一旦公網側主機開始發送數據或建立連接到此端口,NAT網關就可以根據關聯表信息進行轉換,再把數據轉發到私網側的主機。
很多應用層協議實現不限于一個初始連接(通常為信令或控制通道)加一個數據連接,可能是一個初始連接對應很多后續的新連接。比較特別的協議,在一次協商中會產生一組相關連接,比如RTP/RTCP協議規定,一個RTP通道建立后占用連續的兩個端口,一個服務于數據,另一個服務于控制消息。此時,就需要ALG分配連續的端口為應用服務。
ALG能成功解決大部分協議的NAT穿越需求,但是這個方法也有很大的限制。因為應用協議的數量非常多而且在不斷發展變化之中,添加到設備中的ALG功能都是為特定協議的特定規范版本而開發的,協議的創新和演進要求NAT設備制造商必須跟蹤這些協議的最近標準,同時兼容舊標準。
盡管有如Linux這種開放平臺允許動態加載新的ALG特性,但是管理成本仍然很高,網絡維護人員也不能隨時了解用戶都需要什么應用。因此為每個應用協議開發ALG代碼并跟蹤最新標準是不可行的,ALG只能解決用戶最常用的需求。
此外,出于安全性需要,有些應用類型報文從源端發出就已經加密,這種報文在網絡中間無法進行分析,所以ALG無能為力。
?
2.2探針技術STUN和TURN
所謂探針技術,是通過在所有參與通信的實體上安裝探測插件,以檢測網絡中是否存在NAT網關,并對不同NAT模型實施不同穿越方法的一種技術。
STUN服務器被部署在公網上,用于接收來自通信實體的探測請求,服務器會記錄收到請求的報文地址和端口,并填寫到回送的響應報文中。客戶端根據接收到的響應消息中記錄的地址和端口與本地選擇的地址和端口進行比較,就能識別出是否存在NAT網關。如果存在NAT網關,客戶端會使用之前的地址和端口向服務器的另外一個IP發起請求,重復前面的探測。然后再比較兩次響應返回的結果判斷出NAT工作的模式。
由前述的一對多轉換模型得知,除對稱型NAT以外的模型,NAT網關對內部主機地址端口的映射都是相對固定的,所以比較容易實現NAT穿越。
而對稱型NAT為每個連接提供一個映射,使得轉換后的公網地址和端口對不可預測。此時TURN可以與STUN綁定提供穿越NAT的服務,即在公網服務器上提供一個“地址端口對”,所有此“地址端口對”接收到的數據會經由探測建立的連接轉發到內網主機上。TURN分配的這個映射“地址端口對”會通過STUN響應發給內部主機,后者將此信息放入建立連接的信令中通知通信的對端。
這種探針技術是一種通用方法,不用在NAT設備上為每種應用協議開發功能,相對于ALG方式有一定普遍性。但是TURN中繼服務會成為通信瓶頸。而且在客戶端中增加探針功能要求每個應用都要增加代碼才能支持。
?
2.3中間件技術
這也是一種通過開發通用方法解決NAT穿越問題的努力。
與前者不同之處是,NAT網關是這一解決方案的參與者。
與ALG的不同在于,客戶端會參與網關公網映射信息的維護,此時NAT網關只要理解客戶端的請求并按照要求去分配轉換表,不需要自己去分析客戶端的應用層數據。其中UPnP就是這樣一種方法。
UPnP中文全稱為通用即插即用,是一個通用的網絡終端與網關的通信協議,具備信息發布和管理控制的能力。
其中,網關映射請求可以為客戶動態添加映射表項。此時,NAT不再需要理解應用層攜帶的信息,只轉換IP地址和端口信息。而客戶端通過控制消息或信令發到公網側的信息中,直接攜帶公網映射的IP地址和端口,接收端可以按照此信息建立數據連接。NAT網關在收到數據或連接請求時,按照UPnP建立的表項只轉換地址和端口信息,不關心內容,再將數據轉發到內網。這種方案需要網關、內部主機和應用程序都支持UPnP技術,且組網允許內部主機和NAT網關之間可以直接交換UPnP信令才能實施。
?
2.4中繼代理技術
準確說它不是NAT穿越技術,而是NAT旁路技術。簡單說,就是在NAT網關所在的位置旁邊放置一個應用服務器,這個服務器在內部網絡和外部公網分別有自己的網絡連接。客戶端特定的應用產生網絡請求時,將定向發送到應用代理服務器。應用代理服務器根據代理協議解析客戶端的請求,再從服務器的公網側發起一個新的請求,把客戶端請求的內容中繼到外部網絡上,返回的相應反方向中繼。這項技術和ALG有很大的相似性,它要求為每個應用類型部署中繼代理業務,中間服務器要理解這些請求。
?
2.5特定協議的自穿越技術
在所有方法中最復雜也最可靠的就是自己解決自己的問題。比如IKE和IPsec技術,在設計時就考慮了到如何穿越NAT的問題。因為這個協議是一個自加密的協議并且具有報文防修改的鑒別能力,其他通用方法愛莫能助。因為實際應用的NAT網關基本都是NAPT方式,所有通過傳輸層協議承載的報文可以順利通過NAT。IKE和IPsec采用的方案就是用UDP在報文外面再加一層封裝,而內部的報文就不再受到影響。IKE中還專門增加了NAT網關是否存在的檢查能力以及繞開NAT網關檢測IKE協議的方法。
candidate?字段類型與解釋
?在學習 webrtc 的過程中,我們在學習 ?SDP 的過程中,發現有個字段 candidate,網上很多資料都一筆帶過,或者解釋含糊,或者解釋錯誤。主要是 udp 下的 host, srflx, prflx, relay 四種 candidate 類型的解釋不清,會導致很多疑惑。下面我就分享一下我的研究結果。最為權威的解釋參見官方 RFC ,這個里面解釋的最有權威。
?
參考文章
P2P技術詳解(一):NAT詳解——詳細原理、P2P簡介-網絡編程/專項技術區 - 即時通訊開發者社區!?有關 SDP 中 UDP candidate 類型說明 ( host, srflx, prflx, relay )_freeabc的博客-CSDN博客_srflx
總結
- 上一篇: CentOS 7.6 zabbix5.0
- 下一篇: 解决Surface Pro 系列 TF卡