NAT與NAPT技術詳解

一、定義

NAT: Network Address Transfer 網絡地址轉換。虛擬機。

NAPT: Network Address Port Transfer 網絡地址端口轉換。也叫PAT。內網路由器或FW。

NAT和NAPT的功能是完成內部私有地址和全局網絡地址的轉換,讓計算機能與外界網絡通信。其屬接入廣域網(WAN)技術,是一種將私有(保留)地址轉化爲合法IP地址的轉換技術,它被廣泛應用於各種類型Internet接入方式和各種類型的網絡中。

兩者的區別:

NAT:一個全局IP對應一個私有IP(即一臺計算機)(或者有一個IP地址池,裏面有很多外部IP地址,當有內部IP地址要出去的時候,就隨機選一IP地址作爲其出口IP)。一對一,一個內部地址轉換成一個外部地址進行通信。

NAPT:一個全局IP+不同的端口號對應多個私有IP(即多臺計算機),需要一個全局IP對應多臺計算時,比如局域網內部計算機訪問外界網絡時,就得用NAPT。一對多,多個內部地址使用同一地址不同端口轉換成外部地址進行通信。缺點在於其通信僅限於TCP或UDP

好處:

  • NAT不僅完美地解決了lP地址不足的問題。
  • 能夠有效地避免來自網絡外部的攻擊。
  • 隱藏並保護網絡內部的計算機。
  • 實現TCP流量的負載均衡。

NAT不僅實現了一般的地址轉換功能,同時提供了完善的地址轉換ALG (Application Layer Gateway,應用級網關)機制,使其可以支持一些特殊的應用協議,而不需要對NAT平臺進行任何的修改,具有良好的可擴充性。這些特殊協議的報文載荷裏攜帶了地址或端口信息,該信息也可能需要進行地址轉換。這種方法需要在專用網連接到因特網的路由器上安裝NAT軟件。裝有NAT軟件的路由器叫做NAT路由器,它至少有一個有效的外部全球IP地址。這樣,所有使用本地地址的主機在和外界通信時,都要在NAT路由器上將其本地地址轉換成全球IP地址,才能和因特網連接。

可支持的特殊協議包括:FTP(File Transfer Protocol,文件傳輸協議)、ICMP(Internet Control Message Protocol,因特網控制消息協議)、DNS(Domain Name System,域名系統)、ILS(Internet Locator Service,Internet定位服務)、H.323、SIP(Session Initiation Protocol,會話發起協議)、NetMeeting 3.01、NBT(NetBIOS over TCP/IP,基於TCP/IP的網絡基本輸入輸出系統)等。

NAT地址轉換表

  • 不管本地主機的IP是什麼,一律轉換爲外部全球IP。
  • 不管本地主機的TCP端口是什麼,一律轉換爲互不相同的全新端口。

內網地址

  • 10.0.0.0~10.255.255.255          1個A類
  • 172.16.0.0~172.31.255.255      16個B類
  • 192.168.0.0~192.168.255.255  256個C類

穿透方法:

目前常用的針對UDP的NAT 穿透(NAT Traversal)方法主要有:STUNTURNICEuPnP等。其中ICE方式由於其結合了STUN和TURN的特點,所以使用最爲廣泛。針對TCP的NAT穿透技術目前仍爲難點。實用的技術仍然不多。

二、工作原理

2.1 NAT

NAT是將IP 數據包頭中的IP 地址轉換爲另一個IP 地址的過程。在實際應用中,NAT 主要用於實現私有網絡訪問公共網絡的功能。這種通過使用少量的公有IP 地址代表較多的私有IP 地址的方式,將有助於減緩可用IP 地址空間的枯竭。

NAT的基本工作原理是,當私有網主機和公共網主機通信的IP包經過NAT網關時,將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進行轉換。NAT網關有2個網絡端口,其中公共網絡端口的IP地址是統一分配的公共IP,爲202.204.65.2;私有網絡端口的IP地址是保留地址,爲192.168.1.1。私有網中的主機 192.168.1.2向公共網中的主機166.111.80.200發送了1個IP包(Des=166.111.80.200,Src=192.168.1.2)。當IP包經過NAT網關時,NAT會將IP包的源IP轉換爲NAT的公共IP並轉發到公共網,此時IP包(Des=166.111.80.200,Src=202.204.65.2)中已經不含任何私有網IP的信息。由於IP包的源IP已經被轉換成NAT的公共IP,響應的IP包(Des=202.204.65.2,Src=166.111.80.200)將被髮送到NAT。 這時,NAT會將IP包的目的IP轉換成私有網中主機的IP,然後將IP包(Des=192.168.1.2,Src=166.111.80.200)轉發到私有網。對於通信雙方而言,這種地址的轉換過程是完全透明的。

2.2 NAPT

由於NAT實現是私有IP和NAT的公共IP之間的轉換,那麼,私有網中同時與公共網進行通信的主機數量就受到NAT的公共IP地址數量的限制。爲了克服這種限制,NAT被進一步擴展到在進行IP地址轉換的同時進行Port的轉換,這就是網絡地址端口轉換NAPT(Network Address Port Translation)技術。NAPT也被稱爲“多對一”的NAT,或者叫PAT(Port Address Translations,端口地址轉換)、地址超載(address overloading)。

NAPT與NAT的區別在於,NAPT不僅轉換IP包中的IP地址,還對IP包中TCP和UDP的Port進行轉換。這使得多臺私有網主機利用1個NAT公共IP就可以同時和公共網進行通信。(NAPT多了對TCP和UDP的端口號的轉換)

私有網主機192.168.1.2要訪問公共網中的 Http服務器166.111.80.200。首先,要建立TCP連接,假設分配的TCP Port是1010,發送了1個IP包(Des=166.111.80.200:80,Src=192.168.1.2:1010),當IP包經過NAT 網關時,NAT會將IP包的源IP轉換爲NAT的公共IP,同時將源Port轉換爲NAT動態分配的1個Port。然後,轉發到公共網,此時IP包 (Des=166.111.80.200:80,Src=202.204.65.2:2010)已經不含任何私有網IP和Port的信息。由於IP包的源 IP和Port已經被轉換成NAT的公共IP和Port,響應的IP包 (Des=202.204.65.2:,Src=2010166.111.80.200:80)將被髮送到NAT。這時NAT會將IP包的目的IP轉換成私有網主機的IP,同時將目的Port轉換爲私有網主機的Port,然後將IP包 (Des=192.168.1.2:1010,Src=166.111.80.200:80)轉發到私網。對於通信雙方而言,這種IP地址和Port的轉換是完全透明的。

2.3 實現方法

NAT的實現方式有三種,即靜態轉換Static Nat動態轉換Dynamic Nat端口多路複用OverLoad

靜態轉換是指將內部網絡的私有IP地址轉換爲公有IP地址,IP地址對是一對一的,是一成不變的,某個私有IP地址只轉換爲某個公有IP地址。藉助於靜態轉換,可以實現外部網絡對內部網絡中某些特定設備(如服務器)的訪問。

建立內部本地地址和全局地址的一對一永久映射。

動態轉換是指將內部網絡的私有IP地址轉換爲公用IP地址時,IP地址是不確定的,是隨機的,所有被授權訪問上Internet的私有IP地址可隨機轉換爲任何指定的合法IP地址。也就是說,只要指定哪些內部地址可以進行轉換,以及用哪些合法地址作爲外部地址時,就可以進行動態轉換。動態轉換可以使用多個合法外部地址集。當ISP提供的合法IP地址略少於網絡內部的計算機數量時。可以採用動態轉換的方式。

建立內部本地地址和全局地址池的臨時映射關係,過一段時間沒有用就會刪除映射關係。

端口多路複用(Port address Translation,PAT)是指改變外出數據包的源端口並進行端口轉換,即端口地址轉換(PAT,Port Address Translation)。採用端口多路複用方式。內部網絡的所有主機均可共享一個合法外部IP地址實現對Internet的訪問,從而可以最大限度地節約IP地址資源。同時,又可隱藏網絡內部的所有主機,有效避免來自internet的攻擊。因此,目前網絡中應用最多的就是端口多路複用方式。

ALG(Application Level Gateway),即應用程序級網關技術:傳統的NAT技術只對IP層和傳輸層頭部進行轉換處理,但是一些應用層協議,在協議數據報文中包含了地址信息。爲了使得這些應用也能透明地完成NAT轉換,NAT使用一種稱作ALG的技術,它能對這些應用程序在通信時所包含的地址信息也進行相應的NAT轉換。例如:對於FTP協議的PORT/PASV命令、DNS協議的 "A" 和 "PTR" queries命令和部分ICMP消息類型等都需要相應的ALG來支持。

如果協議數據報文中不包含地址信息,則很容易利用傳統的NAT技術來完成透明的地址轉換功能,通常我們使用的如下應用就可以直接利用傳統的NAT技術:HTTP、TELNET、FINGER、NTP、NFS、ARCHIE、RLOGIN、RSH、RCP等。

三、示例

 1. 私有ip爲192.168.0.2的計算機想和外界網絡通信,如果地址未經轉換,網絡方因爲只識別全局IP,不識別私有IP,將無法回信。

 

 2. 通過NAT把私有IP轉換成全局IP就可以和外界順暢通信了


3. 假設這個局域網內還有一臺私有IP爲192.168.0.3的計算機也要外界網絡通信。此時用同一個全局IP的話,網絡將不知道回覆給哪個私有IP。NAT到這兒就不靈了。

 

 

4. 如果在地址轉換的時候,加上端口號來區分是哪個私有IP,就可以解決上面的多臺內部計算機和外界通信的問題了。這就是NAPT。

 

 

四、easy IP

Easy IP 方式的實現原理與上節介紹的地址池NAPT轉換原理類似,可以算是NAPT的一種特例,不同的是Easy IP 方式可以實現自動根據路由器上WAN接口的公網IP地址實現與私網IP地址之間的映射(無需創建公網地址池)。

Easy IP 主要應用於將路由器WAN 接口IP 地址作爲要被映射的公網IP 地址的情形,特別適合小型局域網接入Internet 的情況。這裏的小型局域網主要指中小型網吧、小型辦公室等環境,一般具有以下特點:內部主機較少、出接口通過撥號方式獲得臨時(或固定)公網IP 地址以供內部主機訪問Internet。

圖示爲Easy IP 方式的實現原理,具體過程如下:



① 假設私網中的Host A 主機要訪問公網的Server,首先要向Router 發送一個請求報文(即Outbound 方向),此時報文中的源地址是10.1.1.100,端口號1540。
② Router 在收到請求報文後自動利用公網側WAN 接口臨時或者固定的“公網IP地址:端口號”(162.10.2.8:5480),建立與內網側報文“源IP 地址:源端口號”間的Easy IP轉換表項(也包括正、反兩個方向),並依據正向Easy IP 表項的查找結果將報文轉換後向公網側發送。此時,轉換後的報文源地址和源端口號由原來的(10.1.1.100:1540)轉換成了(162.10.2.8:5480)。
③ Server 在收到請求報文後需要向Router 發送響應報文(即Inbound 方向),此時只須將收到的請求報文中的源IP 地址、源端口號和目的IP 地址、目的端口號對調即可,即此時的響應報文中的目的IP 地址、目的端口號爲162.10.2.8:5480。
④ Router 在收到公網側Server 的迴應報文後,根據其“目的IP 地址:目的端口號”查找反向Easy IP 表項,並依據查找結果將報文轉換後向內網側發送。即轉換後的報文中的目的IP地址爲10.1.1.100,目的端口號爲1540,與Host A 發送請求報文中的源IP地址和源端口完全一樣。
如果私網中的Host B 也要訪問公網,則它所利用的公網IP 地址與Host A 一樣,都是路由器WAN 口的公網IP地址,但轉換時所用的端口號一定要與Host A 轉換時所用的端口不一樣。 

Easy IP功能是指進行地址轉換時,直接使用接口的外網IP地址作爲轉換後的源地址,能夠最大程度的節省IP地址資源,不需要公網IP地址池。它也可以利用訪問控制列表控制哪些內部地址可以進行地址轉換。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章