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

來源:互聯網
上載者:User

標籤:內部使用   資料   post   for   串連   防火牆   1.2   網路安全技術   請求   

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。

以下我們大致介紹下NAT原理:

與上面路由器的差別在於,我們多個個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機制應用在client,能夠隱藏client的IP。由此達到保護client主機免於Internet的攻擊行為。以及節省公用IP的使用量。應用在server端,則能夠保護server端主機在Internet上的安全。

(須要知道,其實。單靠NAT機制並非萬能的。)

對於NAT,有兩個名字須要瞭解:那就是SNAT和DNAT,依據上面的分析以及這個名字,我們非常easy得知。SNAT就是變更Source IP的機制。DNAT就是變更 Destination IP的機制。

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

從以下這張圖能夠看出,NAT機制出如今PREROUTING、OUTPUT和POSTROUTING這三個chain中

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

1、 PREROUTING
該鏈的位置在整個NAT機制的最前面,該鏈的功能在於運行DNAT的任務。因此在運行DNAT時,差點兒是資料包一旦進入NAT機制,資料包內的 “Destination IP” 即被改動,而這個順序問題在整個防火牆的設定上是非常重要的。
2、POSTROUTING
該鏈的任務是改動資料包內的“來源端IP”。也就是說。該鏈的功能用於運行SNAT的任務。該鏈位於整個NAT機制的最末端,因此當我們運行SNAT操作時,Source IP是在整個NAT機制的最末端才會被改動的。


3、OUTPUT
當本機進程產生資料包並向外發送時,這個資料包會先交給路由表來判決路由,接著資料包進入OUTPUT鏈,最後進入POSTROUTING鏈,然後離開本機。這個資料包是不可能經過PREROUTING鏈,前面說到PREROUTING鏈的功能是運行DNAT的任務。也就是改動目的端IP,所以由本機進程產生的資料包,須要通過OUTPUT鏈,而這個OUTPUT鏈的功能就是運行DNAT的任務

所以對於本機進程產生的資料包的DNAT規則是要放在OUTPUT鏈之內,而不是PREROUTING中。

關於NAT機制的分類。我們這裡就不贅述了。後面我們將深入到Netfilter 原始碼內部探索SNAT機制和DNAT機制。

參考資料:
《Linux網路安全技術與實現》

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.