NAT技术介绍
轉載自擒賊先擒王的博客NAT 詳解
一、概述
NAT英文全稱是“Network Address Translation”,中文意思是“網絡地址轉換”,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標準,允許一個整體機構以一個公用IP(Internet Protocol)地址出現在Internet上。顧名思義,它是一種把內部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術。NAT 可以讓那些使用私有地址的內部網絡連接到Internet或其它IP網絡上。NAT路由器在將內部網絡的數據包發送到公用網絡時,在IP包的報頭把私有地址轉換成合法的IP地址。
RFC1918規定了三塊專有的地址,作為私有的內部組網使用:
A類:10.0.0.0—10.255.255.255 10.0.0.0/8
B類:172.16.0.0—172.31.255.255 172.16.0.0/12
C類:192.168.0.0—192.168.255.255 192.168.0.0/16
這三塊私有地址本身是可路由的,只是公網上的路由器不會轉發這三塊私有地址的流量;當一個公司內部配置了這些私有地址后,內部的計算機在和外網通信時,公司的邊界路由會通過NAT或者PAT技術,將內部的私有地址轉換成外網IP,外部看到的源地址是公司邊界路由轉換過的公網IP地址,這在某種意義上也增加了內部網絡的安全性。
二、分類
NAT有三種類型:
- 靜態NAT(Static NAT)(一對一)
將內部網絡的私有IP地址轉換為公有IP地址,IP地址對是一對一的,是一直不變的。
- 動態地址NAT(Pooled NAT)(多對多)
將內部網絡的私有IP地址轉換為公用IP地址時,IP地址是不確定,隨機的。所有被授權訪問Internet的私有IP地址可隨機轉換為任何指定合法的IP地址。也就是說,只要指定哪些內部地址可以進行轉換,以及用哪些合法地址作為外部地址時,就可以進行動態NAT轉換。動態NAT是在路由器上配置一個外網IP地址池,當內部有計算機需要和外部通信時,就從地址池里動態的取出一個外網IP,并將他們的對應關系綁定到NAT表中,通信結束后,這個外網IP才被釋放,可供其他內部IP地址轉換使用,這個DHCP租約IP有相似之處。當ISP提供的合法IP地址略少于網絡內部的計算機數量時。可以采用動態轉換的方式。
- 網絡地址端口轉換NAPT(Network Address Port Translation)(Port-Level NAT)(多對一)
改變外出數據包的源端口并進行端口轉換,采用端口多路復用方式。內部網絡的所有主機均可共享一個合法外部IP地址實現對Internet的訪問,可以最大限度地節約IP地址資源。同時,也可以隱藏網絡內部的所有主機,有效避免來自Internet的攻擊。因此,目前網絡中應用最多的就是PAT規則。這是最常用的NAT技術,也是IPv4能夠維持到今天的最重要的原因之一,它提供了一種多對一的方式,對多個內網IP地址,邊界路由可以給他們分配一個外網IP,利用這個外網IP的不同端口和外部進行通信。NAPT 與 動態NAT 不同,它將內部連接映射到外部網絡中的一個單獨的IP地址上,同時在該地址上加上一個由NAT設備選定的端口號。
NAPT是使用最普遍的一種轉換方式,在HomeGW中也主要使用該方式。它又包含兩種轉換方式:SNAT和DNAT。
Basic NAT是一種把一組IP地址映射成另一組IP地址的方法,映射的過程在IP中繼設備上完成,對用戶完全透明。NAPT則要復雜一些,它把許多(不能太多)IP地址連同TCP/UDP端口號映射到單獨一個IP地址和端口號上。無論是Basic NAT還是NAPT都提供一種把內部的私有地址轉換成在公網上可用的全球唯一IP地址的方法。
對于網絡地址轉換技術來講,最重要的一點是,在配置 NAT 的路由器上形成了 NAT 轉換表,這個轉換表的形成是非常關鍵的。配置 NAT 后,能形成正確的轉換表,那么我們的工作就算成功了。
3、NAT的三個方向:
NAT 在outside口生效,所有在inside口需要先路由,在outside口先nat。
ip nat inside source:
將內部局部地址轉換為內部全局地址;數據方向inside->outside,在outside上執行轉換;
ip nat inside destination:
將內部全局地址轉換為內部局部地址;數據方向outside->inside,在outside上執行轉換
ip nat outside source:
將外部全局地址轉換為外部局部地址;數據方向outside->inside,在outside上執行轉換;
NAT的應用分類:
ip nat source:
(1) 靜態 nat的映射:永遠一個ip對應另外一個ip。
ip nat inside source static A.B.C.D A.B.C.D
(2) 動態 nat的映射:每次一個IP會對應另外一個公網的IP;
ip nat inside source list 2 pool qing
(3) 動態PAT映射:pool里面只有一個IP。
ip nat inside source list 2 pool qing overload
(4) 靜態PAT映射:
ip nat inside source list 3 interface fastEthernet 0/0 overload
ip nat inside destination:
(5) tcp負載均衡,外網主動發起流量訪問內網服務器。只用動態,沒有靜態。
ip nat inside destination list 10 pool feng
ip nat outside source:
當兩端同時做nat既inside和outside需要同時翻譯并出現地址沖突的時候需要用outside source和其他同時命令同時實現。
四、工作原理
了解原理之前先了解下NAT 術語。
在配置了 NAT 的路由器上,可以把整個網絡分成兩部分:內部網絡和 外部網絡。
NAT 技術中有四個術語:
local 、global 是相對于端口狀態說的,local是inside部分可以被路由的,global是outside部分可以被路由的。
網絡地址轉換常常和代理服務搞混,但是它們之間有明確的不同。NAT 對源和目的計算機都是透明的。沒有任何一方會意識到它正在和第三方設備打交道。但是代理服務卻不是透明的。源計算機知道它正向代理服務器發起一個請求,而且你還必須進行配置才能這樣做。目的計算機會認為代理服務器就是與它直接通信的源計算機。還有,代理服務通常工作在 OSI 參考模型的第 4 層 (傳輸層) 或更高,而 NAT 工作在第 3 層 (網絡層)。由于代理服務工作在更高層,所以通常它將比 NAT 要慢。
NAT 工作在 OSI 參考模型的網絡層 (第3層) 是有道理的,因為路由器就工作在這一層:
NAT設備維護一個狀態表,用來把非法的IP地址映射到合法的IP地址上去。每個包在NAT設備中都被翻譯成正確的IP地址,發往下一級,這意味著給處理器帶來了一定的負擔。但對于一般的網絡來說,這種負擔是微不足道的。在運行NAT的路由器中,當數據包被傳送時,NAT可以轉換數據包的IP地址和TCP/UDP數據包的端口號。設置NAT功能的路由器至少要有一個Inside(內部)端口和一個Outside(外部)端口。內部端口連接內網的用戶,外部端口一般連接到Internet。當IP數據包離開內部網絡時,NAT負責將內網IP源地址(通常是專用地址)轉換為合法的公共IP地址。當IP數據包進入內網時,NAT將合法的公共IP目的地址轉換為內網的IP源地址。
NAT的基本工作原理是:當私有網主機和公共網主機通信的IP包經過NAT網關時,將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進行轉換。
當內部網絡中的一臺主機想傳輸數據到外部網絡時,它先將數據包傳輸到NAT路由器上,路由器檢查數據包的報頭,獲取該數據包的源IP信息,并從它的NAT映射表中找出與該IP匹配的轉換條目,用所選用的內部全局地址(全球唯一的IP地址)來替換內部局部地址,并轉發數據包。
當外部網絡對內部主機進行應答時,數據包被送到NAT路由器上,路由器接收到目的地址為內部全局地址的數據包后,它將用內部全局地址通過NAT映射表查找出內部局部地址,然后將數據包的目的地址替換成內部局部地址,并將數據包轉發到內部主機。
其實主要就是 修改 IP 數據包中的源 IP 地址,或目的 IP 地址。主要目的是把 RFC1918所提議的私有地址轉變成在 Internet 上可路由的公有合法地址。對于某些有限的應用(如 DNS、 FTP 等),它也可以修改 IP 數據包有效載荷中的地址。由于應用的復雜性, NAT 目前支持的應用有限,當然,如果需要,完全可以針對新的應用做相應的開發工作。
總體來說,NAT進行地址轉換的過程就是“本地地址”與“全局地址”之間的轉換過程,無論數據包是從內部網絡發往外部網絡,還是從外部網絡發往內部網絡。不同的只是本地地址和全局地址所對應的網絡不同,以及數據包重新封裝的源和目的地址不同。具體如圖所示。
這個過程是通過NAT中的本地址與全局地址映射條目來實現的,所以事先要在NAT路由器上配置這樣的映射條目。
5、NAT中的轉換方式:
當內部網絡用戶訪問外部網絡時,所進行的是“內部本地地址”和“內部全局地址”之間的轉換。
在NAT路由器接收到來自內部網絡主機發送的數據包時,其源IP地址(SA)為“內部本地地址”,目的IP地址(DA)為“外部本地地址”。當數據包被轉發到外部網絡時,數據包的源IP地址(SA)就會轉變為“內部全局地址”,而目的IP地址(DA)被轉變為“外部全局地址”。也就是把數據包的所有源IP地址(SA)和目的IP地址(DA)全部由本地地址轉換為全局地址。如圖6-9上部分數據包IP地址轉換示意圖。
相反,當外部網絡用戶訪問內部網絡時,所進行的是“外部本地地址”和“外部全局地址”之間的轉換。
在NAT路由器接收到來自外部網絡主機發送的數據包時,其源IP地址(SA)就是“外部全局地址”,目的IP地址(DA)就是“內部全局地址”。相當于由內部網絡向外部網絡發送數據包時數據包中的源IP地址(SA)和目的IP地址(DA)的互換。而當數據包被路由器轉發到本地網絡時,源IP地址(SA)被轉變為“外部本地地址”,目的IP地址(DA)被轉變為“內部本地地址”,也相當于由內部網絡向外部網絡發送數據包時數據包中的源IP地址(SA)和目的IP地址(DA)的互換。如圖6-9下部分數據包IP地址轉換示意圖
總結
- 上一篇: 数据结构与算法:1.链表结构
- 下一篇: NAT技术及应用