NAT技術基本原理與應用

1 概述

1.1 簡介

1.1.1 名詞解釋

公有IP地址:也叫全局地址,是指合法的IP地址,它是由NIC(網絡信息中心)或者ISP(網絡服務提供商)分配的地址,對外表明一個或多個內部局部地址,是全球統一的可尋 址的地址。html

私有IP地址:也叫內部地址,屬於非註冊地址,專門爲組織機構內部使用。因特網分配編號委員會(IANA)保留了3塊IP地址作爲私有IP地址:安全

10.0.0.0 ——— 10.255.255.255服務器

172.16.0.0——— 172.16.255.255網絡

192.168.0.0———192.168.255.255負載均衡

地址池:地址池是有一些外部地址(全球惟一的IP地址)組合而成,咱們稱這樣的一個地址集合爲地址池。在內部網絡的數據包經過地址轉換到達外部網絡時,將會在地址池中選擇某個IP地址做爲數據包的源IP地址,這樣能夠有效的利用用戶的外部地址,提升訪問外部網絡的能力。網站

1.1.2關於NAT

NAT英文全稱是「Network Address Translation」,中文意思是「網絡地址轉換」,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標準,容許一個總體機構以一個公用IP(Internet Protocol)地址出如今Internet上。顧名思義,它是一種把內部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術,以下圖所示。所以咱們能夠認爲,NAT在必定程度上,可以有效的解決公網地址不足的問題。翻譯

clip_image002

簡單地說,NAT就是在局域網內部網絡中使用內部地址,而當內部節點要與外部網絡進行通信時,就在網關(能夠理解爲出口,打個比方就像院子的門同樣)處,將內部地址替換成公用地址,從而在外部公網(internet)上正常使用,NAT可使多臺計算機共享Internet鏈接,這一功能很好地解決了公共 IP地址緊缺的問題。經過這種方法,能夠只申請一個合法IP地址,就把整個局域網中的計算機接入Internet中。這時,NAT屏蔽了內部網絡,全部內部網計算機對於公共網絡來講是不可見的,而內部網計算機用戶一般不會意識到NAT的存在。以下圖所示。這裏提到的內部地址,是指在內部網絡中分配給節點的私有IP地址,這個地址只能在內部網絡中使用,不能被路由轉發。3d

clip_image003

NAT 功能一般被集成到路由器、防火牆、ISDN路由器或者單獨的NAT設備中。好比Cisco路由器中已經加入這一功能,網絡管理員只需在路由器的IOS中設置NAT功能,就能夠實現對內部網絡的屏蔽。再好比防火牆將WEB Server的內部地址192.168.1.1映射爲外部地址202.96.23.11,外部訪問202.96.23.11地址實際上就是訪問訪問 192.168.1.1。此外,對於資金有限的小型企業來講,如今經過軟件也能夠實現這一功能。Windows 98 SE、Windows 2000 都包含了這一功能。代理

1.2 分類

NAT有三種類型:靜態NAT(Static NAT)、動態地址NAT(Pooled NAT)、網絡地址端口轉換NAPT(Port-Level NAT)。htm

clip_image005

1.2.1靜態NAT

經過手動設置,使 Internet 客戶進行的通訊可以映射到某個特定的私有網絡地址和端口。若是想讓鏈接在 Internet 上的計算機可以使用某個私有網絡上的服務器(如網站服務器)以及應用程序(如遊戲),那麼靜態映射是必需的。靜態映射不會從 NAT 轉換表中刪除。
  若是在 NAT 轉換表中存在某個映射,那麼 NAT 只是單向地從 Internet 向私有網絡傳送數據。這樣,NAT 就爲鏈接到私有網絡部分的計算機提供了某種程度的保護。可是,若是考慮到 Internet 的安全性,NAT 就要配合全功能的防火牆一塊兒使用。

對於以上網絡拓撲圖,當內網主機 10.1.1.1若是要與外網的主機201.0.0.11通訊時,主機(IP:10.1.1.1)的數據包通過路由器時,路由器經過查找NAT table 將IP數據包的源IP地址(10.1.1.1)改爲與之對應的全局IP地址(201.0.0.1),而目標IP地址201.0.0.11保持不變,這樣,數據包就能到達201.0.0.11。而當主機HostB(IP:201.0.0.11) 響應的數據包到達與內網相鏈接的路由器時,路由器一樣查找NAT table,將IP數據包的目的IP 地址改爲10.1.1.1,這樣內網主機就能接收到外網主機發過來的數據包。在靜態NAT方式中,內部的IP地址與公有IP地址是一種一一對應的映射關係,因此,採用這種方式的前提是,機構可以申請到足夠多的全局IP地址。

1.2.2 動態NAT

動態地址NAT只是轉換IP地址,它爲每個內部的IP地址分配一個臨時的外部IP地址,主要應用於撥號,對於頻繁的遠程聯接也能夠採用動態NAT。當遠程用戶聯接上以後,動態地址NAT就會分配給他一個IP地址,用戶斷開時,這個IP地址就會被釋放而留待之後使用。

動態NAT方式適合於 當機構申請到的全局IP地址較少,而內部網絡主機較多的狀況。內網主機IP與全局IP地址是多對一的關係。當數據包進出內網時,具備NAT功能的設備對IP數據包的處理與靜態NAT的同樣,只是NAT table表中的記錄是動態的,若內網主機在必定時間內沒有和外部網絡通訊,有關它的IP地址映射關係將會被刪除,而且會把該全局IP地址分配給新的IP數據包使用,造成新的NAT table映射記錄。

1.2.3網絡地址端口轉換NAPT

網絡地址端口轉換NAPT(Network Address Port Translation)則是把內部地址映射到外部網絡的一個IP地址的不一樣端口上。它能夠將中小型的網絡隱藏在一個合法的IP地址後面。NAPT與 動態地址NAT不一樣,它將內部鏈接映射到外部網絡中的一個單獨的IP地址上,同時在該地址上加上一個由NAT設備選定的端口號。

NAPT是使用最廣泛的一種轉換方式,它又包含兩種轉換方式:SNAT和DNAT。

(1)源NAT(Source NAT,SNAT):修改數據包的源地址。源NAT改變第一個數據包的來源地址,它永遠會在數據包發送到網絡以前完成,數據包假裝就是一具SNAT的例子。

(2)目的NAT(Destination NAT,DNAT):修改數據包的目的地址。Destination NAT恰好與SNAT相反,它是改變第一個數據包的目的地地址,如平衡負載、端口轉發和透明代理就是

屬於DNAT。

源NAT舉例:對於以上網絡拓撲圖,內網的主機數量比較多,可是該組織只有一個合法的IP地址,當內網主機(10.1.1.3)往外發送數據包時,則須要修改數據包的IP地址和TCP/UDP端口號,例如將

源IP:10.1.1.3

源port:1493

改爲

源IP:201.0.0.1

源port:1492(注意:源端口號能夠與原來的同樣也能夠不同

當外網主機(201.0.0.11)響應內網主機(10.1.1.3)時,應將:

目的IP:201.0.0.1

目的port:1492

改爲

目的IP:10.1.1.3

目的port:1493

這樣,經過修改IP地址和端口的方法就可使內網中全部的主機都能訪問外網,此類NAT適用於組織或機構內只有一個合法的IP地址的狀況,也是動態NAT的一種特例。

clip_image009

目的NAT舉例:這種方式適用於內網的某些服務器須要爲外網提供某些服務的狀況。例如以上拓撲結構,內網服務器羣(ip地址分別爲:10.1.1.1,10.1.1.2,10.1.1.3等)須要爲外網提供WEB 服務,當外網主機HostB訪問內網時,所發送的數據包的目的IP地址爲10.1.1.127,端口號爲:80,當該數據包到達內網鏈接的路由器時,路由器查找NAT table,路由器經過修改目的IP地址和端口號,將外網的數據包平均發送到不一樣的主機上(10.1.1.1,10.1.1.2,10.1.1.3等),這樣就實現了負載均衡。

2 NAT原理

2.1 地址轉換

NAT的基本工做原理是,當私有網主機和公共網主機通訊的IP包通過NAT網關時,將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進行轉換。

以下圖所示,NAT網關有2個網絡端口,其中公共網絡端口的IP地址是統一分配的公共 IP,爲202.20.65.5;私有網絡端口的IP地址是保留地址爲192.168.1.1。私有網中的主機192.168.1.2向公共網中的主機202.20.65.4發送了1個IP包(Dst=202.20.65.4,Src=192.168.1.2)。

clip_image011 當IP包通過NAT網關時,NAT Gateway會將IP包的源IP轉換爲NAT Gateway的公共IP並轉發到公共網,此時IP包(Dst=202.20.65.4,Src=202.20.65.5)中已經不含任何私有網IP的信息。因爲IP包的源IP已經被轉換成NAT Gateway的公共IP,Web Server發出的響應IP包(Dst= 202.20.65.5,Src=202.20.65.4)將被髮送到NAT Gateway。

這時,NAT Gateway會將IP包的目的IP轉換成私有網中主機的IP,而後將IP包(Des=192.168.1.2,Src=202.20.65.4)轉發到私有網。對於通訊雙方而言,這種地址的轉換過程是徹底透明的。轉換示意圖以下。
clip_image013

若是內網主機發出的請求包未通過NAT,那麼當Web Server收到請求包,回覆的響應包中的目的地址就是私有網絡IP地址,在Internet上沒法正確送達,致使鏈接失敗。

2.2 鏈接跟蹤

在上述過程當中,NAT Gateway在收到響應包後,就須要判斷將數據包轉發給誰。此時若是子網內僅有少許客戶機,能夠用靜態NAT手工指定;但若是內網有多臺客戶機,而且各自訪問不一樣網站,這時候就須要鏈接跟蹤(connection track)。以下圖所示:

clip_image015

在NAT Gateway收到客戶機發來的請求包後,作源地址轉換,而且將該鏈接記錄保存下來,當NAT Gateway收到服務器來的響應包後,查找Track Table,肯定轉發目標,作目的地址轉換,轉發給客戶機。

2.3 端口轉換

以上述客戶機訪問服務器爲例,當僅有一臺客戶機訪問服務器時,NAT Gateway只須更改數據包的源IP或目的IP便可正常通信。可是若是Client A和Client B同時訪問Web Server,那麼當NAT Gateway收到響應包的時候,就沒法判斷將數據包轉發給哪臺客戶機,以下圖所示。

clip_image017 此時,NAT Gateway會在Connection Track中加入端口信息加以區分。若是兩客戶機訪問同一服務器的源端口不一樣,那麼在Track Table里加入端口信息便可區分,若是源端口正好相同,那麼在實行SNAT和DNAT的同時對源端口也要作相應的轉換,以下圖所示。

clip_image019

3 應用

NAT主要能夠實現如下幾個功能:數據包假裝、平衡負載、端口轉發和透明代理

數據假裝: 能夠將內網數據包中的地址信息更改爲統一的對外地址信息,不讓內網主機直接暴露在因特網上,保證內網主機的安全。同時,該功能也經常使用來實現共享上網。例如,內網主機訪問外網時,爲了隱藏內網拓撲結構,使用全局地址替換私有地址。

端口轉發: 當內網主機對外提供服務時,因爲使用的是內部私有IP地址,外網沒法直接訪問。所以,須要在網關上進行端口轉發,將特定服務的數據包轉發給內網主機。例如公司小王在本身的服務器上架設了一個Web網站,他的IP地址爲192.168.0.5,使用默認端口80,如今他想讓局域網外的用戶也能直接訪問他的Web站點。利用NAT便可很輕鬆的解決這個問題,服務器的IP地址爲210.59.120.89,那麼爲小王分配一個端口,例如81,即全部訪問210.59.120.89:81的請求都自動轉向192.168.0.5:80,並且這個過程對用戶來講是透明的。

負載平衡:目的地址轉換NAT能夠重定向一些服務器的鏈接到其餘隨機選定的服務器。例如1.2.3所講的目的NAT的例子。

失效終結:目的地址轉換NAT能夠用來提供高可靠性的服務。若是一個系統有一臺經過路由器訪問的關鍵服務器,一旦路由器檢測到該服務器當機,它可使用目的地址轉換NAT透明的把鏈接轉移到一個備份服務器上,提升系統的可靠性。

透明代理:例如本身架設的服務器空間不足,須要將某些連接指向存在另一臺服務器的空間;或者某臺計算機上沒有安裝IIS服務,可是卻想讓網友訪問該臺計算機上的內容,這個時候利用IIS的Web站點重定向便可輕鬆的幫助咱們搞定。

4 NAT的缺陷

NAT在最開始的時候是很是完美的,但隨着網絡的發展,各類新的應用層出不窮,此時NAT也暴露出了缺點。NAT的缺陷主要表如今如下幾方面:

(1) 不能處理嵌入式IP地址或端口

NAT設備不能翻譯那些嵌入到應用數據部分的IP地址或端口信息,它只能翻譯那種正常位於IP首部中的地址信息和位於TCP/UDP首部中的端口信息,以下圖,因爲對方會使用接收到的數據包中嵌入的地址和端口進行通訊,這樣就可能產生鏈接故障,若是通訊雙方都是使用的公網IP,這不會形成什麼問題,但若是那個嵌入式地址和端口是內網的,顯然鏈接就不可能成攻,緣由就如開篇所說的同樣。MSN Messenger的部分功能就使用了這種方式來傳遞IP和端口信息,這樣就致使了NAT設備後的客戶端網絡應用程序出現鏈接故障。

clip_image020

(2) 不能從公網訪問內部網絡服務

因爲內網是私有IP,因此不能直接從公網訪問內部網絡服務,好比WEB服務,對於這個問題,咱們能夠採用創建靜態映射的方法來解決。好比有一條靜態映射,是把218.70.201.185:80與192.168.0.88:80映射起的,當公網用戶要訪問內部WEB服務器時,它就首先鏈接到218.70.201.185:80,而後NAT設備把請求傳給192.168.0.88:80,192.168.0.88把響應返回NAT設備,再由NAT設備傳給公網訪問用戶。

(3) 有一些應用程序雖然是用A端口發送數據的,但卻要用B端口進行接收,不過NAT設備翻譯時殊不知道這一點,它仍然創建一條針對A端口的映射,結果對方響應的數據要傳給B端口時,NAT設備卻找不到相關映射條目而會丟棄數據包。
(4) 一些P2P應用在NAT後沒法進行
對於那些沒有中間服務器的純P2P應用(如電視會議,娛樂等)來講,若是你們都位於NAT設備以後,雙方是沒法創建鏈接的。由於沒有中間服務器的中轉,NAT設備後的P2P程序在NAT設備上是不會有映射條目的,也就是說對方是不能向你發起一個鏈接的。如今已經有一種叫作P2P NAT穿越的技術來解決這個問題。

5.結語

NAT技術無能否認是在ipv4地址資源的短缺時候起到了緩解做用;在減小用戶申請ISP服務的花費和提供比較完善的負載平衡功能等方面帶來了很多好處。可是在ipv4地址在之後幾年將會枯竭,NAT技術不能改變ip地址空間不足的本質。然而在安全機制上也潛在着威脅,在配置和管理上也是一個挑戰。若是要從根本上解決ip地址資源的問題,ipv6纔是最根本之路。在ipv4轉換到ipv6的過程當中,NAT技術確實是一個不錯的選擇,相對其餘的方案優點也很是明顯。

相關文章
相關標籤/搜索