NAT技术总结
一.NAT工作模型及特點
1.1NAT的概念模型
NAT名字很準確,網絡地址轉換,就是替換IP報文頭部的地址信息。NAT通常部署在一個組織的網絡出口位置,通過將內部網絡IP地址替換為出口的IP地址提供公網可達性和上層協議的連接能力。那么,什么是內部網絡IP地址?
RFC1918規定了三個保留地址段落:10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255。這三個范圍分別處于A,B,C類的地址段,不向特定的用戶分配,被IANA作為私有地址保留。這些地址可以在任何組織或企業內部使用,和其他Internet地址的區別就是,僅能在內部使用,不能作為全球路由地址。這就是說,出了組織的管理范圍這些地址就不再有意義,無論是作為源地址,還是目的地址。對于一個封閉的組織,如果其網絡不連接到Internet,就可以使用這些地址而不用向IANA提出申請,而在內部的路由管理和報文傳遞方式與其他網絡沒有差異。
 私有IP地址:
 A類:10.0.0.0-10.255.255.255即10.0.0.0/8
 B類:172.16.0.0-172.31.255.255
 C類:192.168.0.0-192.168.255.255
對于有Internet訪問需求而內部又使用私有地址的網絡,就要在組織的出口位置部署NAT網關,在報文離開私網進入Internet時,將源IP替換為公網地址,通常是出口設備的接口地址。一個對外的訪問請求在到達目標以后,表現為由本組織出口設備發起,因此被請求的服務端可將響應由Internet發回出口網關。出口網關再將目的地址替換為私網的源主機地址,發回內部。這樣一次由私網主機向公網服務端的請求和響應就在通信兩端均無感知的情況下完成了。依據這種模型,數量龐大的內網主機就不再需要公有IP地址了。
 NAT作用:
 數據包在內網與外網間互通時,對數據包的IP地址進行轉換;由內部到外部時修改源IP地址,由外部到內部時修改目的IP地址。
 
 上面的描述概括了NAT處理報文的幾個關鍵特點:
 1.網絡被分為私網和公網兩個部分,NAT網關設置在私網到公網的路由出口位置,雙向流量必須都要經過NAT網關;
 2. 網絡訪問只能先由私網側發起,公網無法主動訪問私網主機;
 3. NAT網關在兩個訪問方向上完成兩次地址的轉換或翻譯,出方向做源信息替換,入方向做目的信息替換;
 4. NAT網關的存在對通信雙方是保持透明的;
 5. NAT網關為了實現雙向翻譯的功能,需要維護一張關聯表,把會話的信息保存下來。
1.2一對一NAT(靜態)
如果一個內部主機唯一占用一個公網IP,這種方式被稱為一對一模型。此種方式下,轉換上層協議就是不必要的,因為一個公網IP就能唯一對應一個內部主機。顯然,這種方式對節約公網IP沒有太大意義,主要是為了實現一些特殊的組網需求。比如用戶希望隱藏內部主機的真實IP,或者實現兩個IP地址重疊網絡的通信。
1.3一對多NAT(動態)
NAT最典型的應用場景就如同圖2描述的,一個組織網絡,在出口位置部署NAT網關,所有對公網的訪問表現為一臺主機。這就是所謂的一對多模型。這種方式下,出口設備只占用一個由Internet服務提供商分配的公網IP地址。面對私網內部數量龐大的主機,如果NAT只進行IP地址的簡單替換,就會產生一個問題:當有多個內部主機去訪問同一個服務器時,從返回的信息不足以區分響應應該轉發到哪個內部主機。此時,需要NAT設備根據傳輸層信息或其他上層協議去區分不同的會話,并且可能要對上層協議的標識進行轉換,比如TCP或UDP端口號。這樣NAT網關就可以將不同的內部連接訪問映射到同一公網IP的不同傳輸層端口,通過這種方式實現公網IP的復用和解復用。這種方式也被稱為端口轉換PAT、NAPT或IP偽裝,但更多時候直接被稱為NAT,因為它是最典型的一種應用模式。
 PAT:端口地址轉換
 NAPT:網絡地址端口轉換
1.4按照NAT端口映射方式分類
在一對多模型中,按照端口轉換的工作方式不同,又可以進行更進一步的劃分。為描述方便,以下將IP和端口標記為(nAddr:nPort),其中n代表主機或NAT網關的不同角色。
 
 全錐形NAT
 其特點為:一旦內部主機端口對(iAddr:iPort)被NAT網關映射到(eAddr:ePort),所有后續的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);任何一個外部主機發送到(eAddr:ePort)的報文將會被轉換后發到(iAddr:iPort)。
限制錐形NAT
 其特點為:一旦內部主機端口對(iAddr:iPort)被映射到(eAddr:ePort),所有后續的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);只有 (iAddr:iPort)向特定的外部主機hAddr發送過數據,主機hAddr從任意端口發送到(eAddr:ePort)的報文將會被轉發到(iAddr:iPort)。
端口限制錐形NAT
 其特點為:一旦內部主機端口對(iAddr:iPort)被映射到(eAddr:ePort),所有后續的(iAddr:iPort)報文都會被轉換為(eAddr:ePort);只有(iAddr:iPort)向特定的外部主機端口對(hAddr:hPort)發送過數據,由 (hAddr:hPort)發送到(eAddr:ePort)的報文將會被轉發到(iAddr:iPort)。
對稱型NAT
 其特點為:NAT網關會把內部主機“地址端口對”和外部主機“地址端口對”完全相同的報文看作一個連接,在網關上創建一個公網“地址端口對”映射進行轉換,只有收到報文的外部主機從對應的端口對發送回應的報文,才能被轉換。即使內部主機使用之前用過的地址端口對去連接不同外部主機(或端口)時,NAT網關也會建立新的映射關系。
現實中的很多NAT設備是將這些轉換方式混合在一起工作的,而不單單使用一種,所以這些術語只適合描述一種工作方式,而不是一個設備。比如,很多NAT設備對內部發出的連接使用對稱型NAT方式,而同時支持靜態的端口映射,后者可以被看作是全錐型NAT方式。而有些情況下,NAT設備的一個公網地址和端口可以同時映射到內部幾個服務器上以實現負載分擔,比如一個對外提供WEB服務器的站點可能是有成百上千個服務器在提供HTTP服務,但是對外卻表現為一個或少數幾個IP地址。
1.5NAT的弊端
NAT在解決IPv4地址短缺問題上,并非沒有副作用,其實存在很多問題。而NAT最大的弊端正在于破壞了IP端到端通信的能力。
首先,NAT使IP會話的保持時效變短。因為一個會話建立后會在NAT設備上建立一個關聯表,在會話靜默的這段時間,NAT網關會進行老化操作。這是任何一個NAT網關必須做的事情,因為IP和端口資源有限,通信的需求無限,所以必須在會話結束后回收資源。通常TCP會話通過協商的方式主動關閉連接,NAT網關可以跟蹤這些報文,但總是存在例外的情況,要依賴自己的定時器去回收資源。而基于UDP的通信協議很難確定何時通信結束,所以NAT網關主要依賴超時機制回收外部端口。通過定時器老化回收會帶來一個問題,如果應用需要維持連接的時間大于NAT網關的設置,通信就會意外中斷。因為網關回收相關轉換表資源以后,新的數據到達時就找不到相關的轉換信息,必須建立新的連接。當這個新數據是由公網側向私網側發送時,就會發生無法觸發新連接建立,也不能通知到私網側的主機去重建連接的情況。這時候通信就會中斷,不能自動恢復。即使新數據是從私網側發向公網側,因為重建的會話表往往使用不同于之前的公網IP和端口地址,公網側主機也無法對應到之前的通信上,導致用戶可感知的連接中斷。NAT網關要把回收空閑連接的時間設置到不發生持續的資源流失,又維持大部分連接不被意外中斷,是一件比較有難度的事情。在NAT已經普及化的時代,很多應用協議的設計者已經考慮到了這種情況,所以一般會設置一個連接?;畹臋C制,即在一段時間沒有數據需要發送時,主動發送一個NAT能感知到而又沒有實際數據的?;钕?#xff0c;這么做的主要目的就是重置NAT的會話定時器。
其次,NAT在實現上將多個內部主機發出的連接復用到一個IP上,這就使依賴IP進行主機跟蹤的機制都失效了。如網絡管理中需要的基于網絡流量分析的應用無法跟蹤到終端用戶與流量的具體行為的關系?;谟脩粜袨榈娜罩痉治鲆沧兊美щy,因為一個IP被很多用戶共享,如果存在惡意的用戶行為,很難定位到發起連接的那個主機。即便有一些機制提供了在NAT網關上進行連接跟蹤的方法,但是把這種變換關系接續起來也困難重重?;贗P的用戶授權不再可靠,因為擁有一個IP的不等于一個用戶或主機。一個服務器也不能簡單把同一IP的訪問視作同一主機發起的,不能進行關聯。有些服務器設置有連接限制,同一時刻只接納來自一個IP的有限訪問(有時是僅一個訪問),這會造成不同用戶之間的服務搶占和排隊。有時服務器端這樣做是出于DOS攻擊防護的考慮,因為一個用戶正常情況下不應該建立大量的連接請求,過度使用服務資源被理解為攻擊行為。但是這在NAT存在時不能簡單按照連接數判斷。總之,因為NAT隱蔽了通信的一端,把簡單的事情復雜化了。
我們來深入理解NAT一下對IP端到端模型的破壞力。NAT通過修改IP首部的信息變換通信的地址。但是在這個轉換過程中只能基于一個會話單位。當一個應用需要保持多個雙向連接時,麻煩就很大。NAT不能理解多個會話之間的關聯性,無法保證轉換符合應用需要的規則。當NAT網關擁有多個公有IP地址時,一組關聯會話可能被分配到不同的公網地址,這通常是服務器端無法接受的。更為嚴重的是,當公網側的主機要主動向私網側發送數據時,NAT網關沒有轉換這個連接需要的關聯表,這個數據包無法到達私網側的主機。這些反方向發送數據的連接總有應用協議的約定或在初始建立的會話中進行過協商。但是因為NAT工作在網絡層和傳輸層,無法理解應用層協議的行為,對這些信息是無知的。NAT希望自己對通信雙方是透明的,但是在這些情況下這是一種奢望。
 此外,NAT工作機制依賴于修改IP包頭的信息,這會妨礙一些安全協議的工作。因為NAT篡改了IP地址、傳輸層端口號和校驗和,這會導致認證協議徹底不能工作,因為認證目的就是要保證這些信息在傳輸過程中沒有變化。對于一些隧道協議,NAT的存在也導致了額外的問題,因為隧道協議通常用外層地址標識隧道實體,穿過NAT的隧道會有IP復用關系,在另一端需要小心處理。ICMP是一種網絡控制協議,它的工作原理也是在兩個主機之間傳遞差錯和控制消息,因為IP的對應關系被重新映射,ICMP也要進行復用和解復用處理,很多情況下因為ICMP報文載荷無法提供足夠的信息,解復用會失敗。IP分片機制是在信息源端或網絡路徑上,需要發送的IP報文尺寸大于路徑實際能承載最大尺寸時,IP協議層會將一個報文分成多個片斷發送,然后在接收端重組這些片斷恢復原始報文。IP這樣的分片機制會導致傳輸層的信息只包括在第一個分片中,NAT難以識別后續分片與關聯表的對應關系,因此需要特殊處理。
二.NAT的設備實現
靜態一對一地址映射:
 這種工作方式下,NAT把一個私網地址和一個公網地址做靜態關聯,在從內而外的方向,將源IP匹配的私網IP替換為公網IP,反方向則將目的IP匹配公網IP的報文替換為私網IP。網絡層以上的部分不進行替換處理,只修正校驗和。
靜態多對多地址映射:
 這種方式與上一種類似,只是把一段私網地址映射到一段公網地址。工作機制與前述的方式沒有差別,只是簡化配置工作量。
動態端口映射:
 這是最基本的工作方式,即前面多次介紹的將一段內網地址動態翻譯為一個或多個公網IP,同時對傳輸層端口或其他上層協議信息進行轉換,以實現IP復用。對由內而外的報文,替換源地址和端口,反向報文替換目的地址和端口。僅以連接公網的接口IP作為NAT轉換的公網地址時,這種配置最簡化,又被稱為EasyIP。當以一段公網IP地址作為NAT轉換地址時,需要配置一個地址池,NAT會自動在地址池中選擇使用公網IP。
動態地址映射(no-pat):
 這是介于靜態多對多地址映射和動態端口映射方式之間的一種工作機制。當有一個私網向公網側訪問到達NAT網關時,NAT網關會檢查這個私網IP是否已經有關聯的公網IP映射。如果已經存在,則按照轉換表直接替換IP,不修改上層協議。如果不存在關聯表項,則在空閑的公網IP池中占用一個IP,并寫入關聯表中,以后按照這個關聯關系進行地址轉換。當這個私網主機發起的所有對外訪問均關閉或超時后,回收公網IP。這種方式可以理解為一組內網主機搶占式地共享一個公網IP地址池。當公網IP地址池用完以后,新連接將無法建立。
靜態端口映射:
 通過靜態配置,把一個固定的私網IP地址和端口關聯到一個公網地址和端口上。這種方式等同于前面介紹過的全錐模式,但是不需要內網主機首先發出報文。這種方式適用于在NAT網關上把一個知名服務(如HTTP)映射到一個內部主機上,也稱為port forwarding。
應用層網關(ALG):
 在所有NAT產品實現中,ALG是一個必需的功能組件。但在不同實現中,有些產品可以動態加載不同的ALG模塊,有些產品可以提供ALG開關控制,有些則不提供任何用戶接口。ALG解析上層應用協議的內容,并且根據需要修改IP和端口相關信息,創建和維護附加的關聯表項。
NAT轉換關聯表:
 無論哪一種NAT工作方式,都要用到地址轉換關聯表,在不同產品的實現中,這個關聯表的存儲結構和在IP轉發中調用的方式有很大不同。關聯表中會記錄源IP、目的IP、連接協議類型、傳輸層源端口、目的端口,以及轉換后的源IP、源端口,目的IP、目的端口信息,這里的源和目的都是對應于從內網到外網的訪問方向。依據NAT具體工作方式,這些信息可能全部填充,也可能部分填充。例如只按照IP做靜態映射的方式,就不需要填入任何端口相關信息;對于靜態端口映射,則只填入源相關的內容,而目的端的信息為空。
總結
 
                            
                        - 上一篇: layui - 页面元素
- 下一篇: win10亮度_关于Surface系列屏
