轉載:網路地址轉換NAT的原理及其作用
本文為轉載文章,原文地址網路地址轉換NAT的原理及其作用
1 概述
1.1 簡介
NAT英文全稱是“Network Address Translation”,中文意思是“網路地址轉換”,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標準,允許一個整體機構以一個公用IP(Internet Protocol)地址出現在Internet上。顧名思義,它是一種把內部私有網路地址(IP地址)翻譯成合法網路IP地址的技術。因此我們可以認為,NAT在一定程度上,能夠有效的解決公網地址不足的問題。
1.2 分類
NAT有三種類型:靜態NAT(Static NAT)、動態地址NAT(Pooled NAT)、網路地址埠轉換NAPT(Port-Level NAT)。
其中,網路地址埠轉換NAPT(Network Address Port Translation)則是把內部地址對映到外部網路的一個IP地址的不同埠上。它可以將中小型的網路隱藏在一個合法的IP地址後面。NAPT與 動態地址NAT不同,它將內部連線對映到外部網路中的一個單獨的IP地址上,同時在該地址上加上一個由NAT裝置選定的埠號。
NAPT是使用最普遍的一種轉換方式,在HomeGW中也主要使用該方式。它又包含兩種轉換方式:SNAT和DNAT。
(1)源NAT(Source NAT,SNAT):修改資料包的源地址。源NAT改變第一個資料包的來源地址,它永遠會在資料包傳送到網路之前完成,資料包偽裝就是一具SNAT的例子。
(2)目的NAT(Destination NAT,DNAT):修改資料包的目的地址。Destination NAT剛好與SNAT相反,它是改變第一個資料懈的目的地地址,如平衡負載、埠轉發和透明代理就是屬於DNAT。
我們在沒有理解NAT原理前當然理解不了上面所說的功能,我們先看下NAT的原理。
2 原理
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)。
當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)轉發到私有網。對於通訊雙方而言,這種地址的轉換過程是完全透明的。轉換示意圖如下。
如果內網主機發出的請求包未經過NAT,那麼當Web Server收到請求包,回覆的響應包中的目的地址就是私網IP地址,在Internet上無法正確送達,導致連線失敗。
2.2 連線跟蹤
在上述過程中,NAT Gateway在收到響應包後,就需要判斷將資料包轉發給誰。此時如果子網內僅有少量客戶機,可以用靜態NAT手工指定;但如果內網有多臺客戶機,並且各自訪問不同網站,這時候就需要連線跟蹤(connection track)。如下圖所示:
在NAT Gateway收到客戶機發來的請求包後,做源地址轉換,並且將該連線記錄儲存下來,當NAT Gateway收到伺服器來的響應包後,查詢Track Table,確定轉發目標,做目的地址轉換,轉發給客戶機。
2.3 埠轉換
以上述客戶機訪問伺服器為例,當僅有一臺客戶機訪問伺服器時,NAT Gateway只須更改資料包的源IP或目的IP即可正常通訊。但是如果Client A和Client B同時訪問Web Server,那麼當NAT Gateway收到響應包的時候,就無法判斷將資料包轉發給哪臺客戶機,如下圖所示。
此時,NAT Gateway會在Connection Track中加入埠資訊加以區分。如果兩客戶機訪問同一伺服器的源埠不同,那麼在Track Table里加入埠資訊即可區分,如果源埠正好相同,那麼在執行SNAT和DNAT的同時對源埠也要做相應的轉換,如下圖所示。(這裡的理解灰常重要)
現在就可以理解NAT協議的應用了吧。
3.NAT協議的應用
NAT主要可以實現以下幾個功能:資料包偽裝、平衡負載、埠轉發和透明代理。
資料偽裝: 可以將內網資料包中的地址資訊更改成統一的對外地址資訊,不讓內網主機直接暴露在因特網上,保證內網主機的安全。同時,該功能也常用來實現共享上網。
埠轉發: 當內網主機對外提供服務時,由於使用的是內部私有IP地址,外網無法直接訪問。因此,需要在閘道器上進行埠轉發,將特定服務的資料包轉發給內網主機。
負載平衡: 目的地址轉換NAT可以重定向一些伺服器的連線到其他隨機選定的伺服器。(不是很明白)
失效終結: 目的地址轉換NAT可以用來提供高可靠性的服務。如果一個系統有一臺通過路由器訪問的關鍵伺服器,一旦路由器檢測到該伺服器當機,它可以使用目的地址轉換NAT透明的把連線轉移到一個備份伺服器上。(如何轉移的?)
透明代理: NAT可以把連線到因特網的HTTP連線重定向到一個指定的HTTP代理伺服器以快取資料和過濾請求。一些因特網服務提供商就使用這種技術來減少頻寬的使用而不用讓他們的客戶配置他們的瀏覽器支援代理連線。(如何重定向的?)