網絡地址轉換NAT原理及應用

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

More...瀏覽器

NAT 概述
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。緩存

 

1.3 應用
NAT主要能夠實現如下幾個功能:數據包假裝、平衡負載、端口轉發和透明代理。
數據假裝: 能夠將內網數據包中的地址信息更改爲統一的對外地址信息,不讓內網主機直接暴露在因特網上,保證內網主機的安全。同時,該功能也經常使用來實現共享上網。
端口轉發: 當內網主機對外提供服務時,因爲使用的是內部私有IP地址,外網沒法直接訪問。所以,須要在網關上進行端口轉發,將特定服務的數據包轉發給內網主機。
負載平衡: 目的地址轉換NAT能夠重定向一些服務器的鏈接到其餘隨機選定的服務器。
失效終結: 目的地址轉換NAT能夠用來提供高可靠性的服務。若是一個系統有一臺經過路由器訪問的關鍵服務器,一旦路由器檢測到該服務器當機,它可使用目的地址轉換NAT透明的把鏈接轉移到一個備份服務器上。
透明代理: NAT能夠把鏈接到因特網的HTTP鏈接重定向到一個指定的HTTP代理服務器以緩存數據和過濾請求。一些因特網服務提供商就使用這種技術來減小帶寬的使用而不用讓他們的客戶配置他們的瀏覽器支持代理鏈接。
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的同時對源端口也要作相應的轉換,以下圖所示。post

 

3 Linux下NAT實現
3.1 netfilter/iptables模塊
netfilter/iptables(IP信息包過濾系統)是一種功能強大的工具,根據數據包過濾規則,對通過的網絡數據包進行丟棄、改造、轉發等處理。
netfilter組件也稱爲內核空間(kernelspace),是內核的一部分,由一些數據包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。
iptables組件是一種工具,也稱爲用戶空間(userspace),它主要用來向用戶提供添加、修改、刪除內核中數據過濾表的接口。
3.2 基於netfilter/iptables的NAT
netfilter/iptables中的數據包過濾表有三種:filter、nat和mangle。
filter 表用於通常的信息包過濾,它包含 INPUT 、 OUTPUT 和 FORWARD 鏈。
nat 表用於要轉發的信息包,它包含 PREROUTING 、 OUTPUT 和 POSTROUTING 鏈。
若是信息包及其頭內進行了任何更改,則使用 mangle 表。該表包含一些規則來標記用於高級路由的信息包,該表包含 PREROUTING 和 OUTPUT 鏈。
filter 表用來過濾數據包,咱們能夠在任什麼時候候匹配包並過濾它們。Mangle不常用還在開發當中。咱們下面主要介紹Nat表來實現NAT功能。
(1)用戶使用iptables命令在用戶空間設置NAT規則。經過使用用戶空間iptables命令,能夠構建用戶本身的定製NAT規則。全部規則存儲在內核空間的nat表中。根據規則所處理的信息包類型,將規則分組在鏈中。要作SNAT的信息包被添加到POSTROUTING鏈中。要作DNAT的信息包被添加到PREROUTING鏈中。直接從本地出站的信息包的規則被添加到OUTPUT 鏈中。
(2)內核空間接管NAT工做.作過NAT操做的數據包的地址就被改變了,固然這種改變是根據咱們的規則進行的。屬於一個流的包只會通過這個表一次。若是第一個包被容許作NAT或 Masqueraded,那麼餘下的包都會自動地被作相同的操做。也就是說,餘下的包不會再經過這個表,一個一個的被NAT,而是自動地完成。這就是咱們爲何不該該在這個表中作任何過濾的主要緣由。PREROUTING 鏈的做用是在包剛剛到達防火牆時改變它的目的地址,若是須要的話。OUTPUT鏈改變本地產生的包的目的地址。下圖是數據包穿越整個netfilter/iptables的流程圖。網站

 

(3)NAT工做步驟:
DNAT:若包是被送往PREROUTING鏈的,而且匹配了規則,則執行DNAT或REDIRECT目標。爲了使數據包獲得正確路由,必須在路由以前進行DNAT。
路由:內核檢查信息包的頭信息,尤爲是信息包的目的地。
處理本地進程產生的包:對nat表OUTPUT鏈中的規則實施規則檢查,對匹配的包執行目標動做。
SNAT:若包是被送往POSTROUTING鏈的,而且匹配了規則,則執行SNAT或MASQUERADE目標。系統在決定了數據包的路由以後才執行該鏈中的規則。spa

相關文章
相關標籤/搜索