歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 【Linux 驅動】Netfilter/iptables (八) Netfilter的NAT機制

【Linux 驅動】Netfilter/iptables (八) Netfilter的NAT機制

日期:2017/3/1 12:19:20   编辑:關於Linux

NAT是Network Address Translation的縮寫,意即“網絡地址轉換”。從本質上來說,是通過修改IP數據首部中的地址,以實現將一個地址轉換成另一個地址的技術。

當然在某種情況下,修改的不僅僅是IP首部的來源或目的地址,還包括其它要素。
隨著接入Internet的計算機數量不斷猛增,IP地址資源也就愈加顯得捉襟見肘。這也是Ipv6出現的一大原因。

我們現在所有的IP地址是32位,意味著其代表的主機數量是有限的(2^32 ~= 42億),實際是不夠用的(計算機、路由器、網絡設備,PDA、無線網絡電話等等都要占用IP地址)。

當初劃分IP時,各保留一段私有IP區間。私網IP(私有IP)是指這些IP只能在企業內部使用,而無法應用在因特網上,簡而言之,就是私有IP不能直接與Internet進行互相通信。

目前NAT技術更多地被使用在將一個私網IP地址網段,轉換為一個或幾個公網IP地址,以實現私網與Internet的互相通訊。
Internet上的路由器如果看到這些私有IP的數據包,就會將其丟棄。

我們先來通過一個例子解釋下這個問題:
在下圖中,我們在192.168.0.0/24這個私有ip與10.0.1.0/24這個公有ip加了個路由器。假設10.0.1.200是公網ip。

這裡寫圖片描述

首先,192.168.0.1的這台主機嘗試訪問Internet上的1.2.3.4這台主機,因此,192.168.0.1主機會發送一個請求數據包給默認網關,這個數據包的源ip和目的ip如圖中標記的1所示,來源ip是192.168.0.1,目的ip是1.2.3.4,由於是路由器的緣故,這個數據包的源ip和目的ip地址都不會發生改變,接著,路由器會轉發這個數據包給1.2.3.4主機,當1.2.3.4主機收到請求數據包後,其源ip和目的ip如3所示。然後,1.2.3.4主機響應請求,回送一個數據包給192.168.0.1,但是該數據包中的目的ip是192.168.0.1,是一個私有ip,因此這個數據包不可能被回送給192.168.0.1,也就不能進行正常通信。

為了提高Internet上數據包的傳輸效率,Internet上的路由器通常不檢查數據包中的“來源IP”,而只會看目的端的IP,所以私有IP的主機可以發出請求,但是得不到回應。

這個問題的解決辦法就落到了我們今天要介紹的NAT機制上。只要通過NAT的機制,就可以讓成千上萬台計算機同時通過一個公網IP來連接Internet。<喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxzdHJvbmc+z8LD5s7Sw8e089bCvenJ3M/CTkFU1K3A7aO6PC9zdHJvbmc+PC9wPg0KPHA+PGltZyBhbHQ9"這裡寫圖片描述" src="http://www.2cto.com/uploadfile/Collfiles/20151229/20151227200230855.jpg" title="\" />

與上面路由器的區別在於,我們多個個NAT機制,NAT主機將這個數據包內的“來源IP”改成NAT主機上的公網IP(10.0.1.200),如標記2所示,這樣一來,該數據包的源ip和目的ip都變成了公有IP,同時,NAT主機會將這個數據包的信息記錄起來,接下來,這個數據包發送到了1.2.3.4。該主機響應,發回響應數據報的時候,這個數據包的目的ip成了10.0.1.200這個公網ip,而不是192.168.0.1這個私有ip,這樣該數據包就可以順利的到達NAT主機,然後NAT主機根據之前記錄下來的信息中找到當初NAT主機關於這個的轉換記錄,再轉回來,該數據包的目的IP就成了真正的目的主機192.168.0.1這個私有ip,但此時已經不是在Internet上了,所以這個數據包是可以通過NAT主機回送給我們的私有IP主機的。

這樣一來,通過NAT機制,就成功實現了私有IP通過NAT主機去訪問Internet上的資源。

除此之外,NAT機制應用在客戶端,可以隱藏客戶端的IP,由此達到保護客戶端主機免於Internet的攻擊行為,以及節省公用IP的使用量;應用在服務器端,則可以保護服務器端主機在Internet上的安全。

(需要知道,事實上,單靠NAT機制並不是萬能的。)

對於NAT,有兩個名字需要了解:那就是SNAT和DNAT,根據上面的分析以及這個名字,我們很容易得知。SNAT就是變更Source IP的機制,DNAT就是變更 Destination IP的機制。

NAT種類繁多,有一對一、多對多、一對多和NATP等四種。

從下面這張圖可以看出,NAT機制出現在PREROUTING、OUTPUT和POSTROUTING這三個chain中

這裡寫圖片描述

下面以下圖NAT的結構為例,介紹NAT的完整結構,並解釋每個鏈的用途。

這裡寫圖片描述源碼內部探索SNAT機制和DNAT機制。

Copyright © Linux教程網 All Rights Reserved