NAT-網路地址轉換

honwsn發表於2010-03-07

藉助於NAT"內部"網路透過路由器傳送資料包時,私有地址被轉換成合法的IP地址,一個區域網只需使用少量IP地址(甚至是1)即可實現私有地址網路內所有計算機與Internet的通訊需求。

NAT可以藉助於某些代理伺服器來實現,但考慮到運算成本和網路效能,很多時候都是在路由器上來實現的。

  NAT將自動修改IP報文頭申的源IP地址和目的IP地址,Ip地址校驗則在NAT處理過程中自動完成。有些應用程式將源IP地址嵌入到IP報文的資料部分中,所以還需要同時對報文進行修改,以匹配IP頭中已經修改過的源IP地址。

NAT不僅完美地解決了lP地址不足的問題,而且還能夠有效地避免來自網路外部的攻擊,隱藏並保護網路內部的計算機.

[@more@]

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

靜態轉換是指將內部網路的私有IP地址轉換為公有IP地址,IP地址對是一對一的,是一成不變的,某個私有IP地址只轉換為某個公有IP地址。藉助於靜態轉換,可以實現外部網路對內部網路中某些特定裝置(如伺服器)的訪問(需要使用Inbound static mapping 技術A web server hosted on the internal private network can be accessed from the Internet if an inbound static mapping is defined)

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

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

基於埠的網路地址轉換的實現

1. NAT轉發資料包(TCP UDP)

每當一個外出的封包進入NAT盒。NAT會對改封包的進行改裝。封包的源IP地址(如192.168.X.Y 等內部地址)就會被該NAT的對外IP地址所替代。

(也許該NAT的對外IP地址也是個內部地址,發出的改裝後的封包需要下個NAT的處理,直到被轉換成一個真正的IP地址的封包出現在Internet上)

在封包的源IP地址被替代後,它的埠(TCP UDP)會被一個索引替換,該索引是指向NAT盒內部的有65536個表項的轉換表。表中的表項包含了原來的IP地址和源埠號。最後IP頭和TCPUDP頭的校驗和都會被重新計算插入封包。這樣做的緣由是,對於NAT來說,有可能收到來自內部網路的兩個內部地址不用但源埠號相同的封包,所以從埠號上不能唯一確定這個資料包。

2. NAT接受來自外部網路的封包並轉發到內部網路。

前提:這個封包必須是作為NAT發出的資料包的回應,否則NAT就拋棄這個不請自來的封包

當封包到達NAT時,該封包的目的埠號就會被提取出來。作為索引在NAT裝換表中找到相應的表項,然後用內部的IP和埠號替換封包的目的IP和埠,重新計算IPTCP UDP頭的校驗和,整理號封包後,該封包就會被轉發到內部網路的某個機器。

所對於外部伺服器來說,它自身認為只是與一個有真實IP的客戶通訊。對於內部網路中的機器來說,它自身認為是與伺服器在直接交換。NAT中間的封包的傳送和接受處理對於二者來說都是透明的。

NAT的缺點:NAT的設計沒有考慮讓其後面的主機去被動的接受連線,所以要隱藏在NAT後面的兩臺主機建立TCP/UDP連線,就需要一箇中介伺服器來幫助它們完成初始化工作。這裡都需要進行一個UDPTCP的打洞的過程了。

NAT Inbound Mapping

Recall that by default, a NAT server will drop all packets that are not replies to requests that were originated from the internal private network

在各種各樣的NAT中,最常見的型別是傳統的(外出式OutBandNAT,外出式NAT預設狀況下,僅允許開往外地的會話(IP封包)透過,到來的封包會被拋棄,除非NAT標識它們是從內部網路初始化的現存會話的一部分,也就是說是對內部網路外出會話請求的回應。所在要讓兩個在不用NAT後面的節點進行通訊時,外出式NAT與點與點通訊相牴觸。因為不管哪一方初始化這個會話,另一方都會拒絕。所以必須藉助伺服器的幫助使p2p會話看起來像兩個NAT的外出會話。

對於內部網路放置web伺服器,肯定是不能用到外出式NAT,外出式NAT會拋棄所有的不是對內部網路會話的回應的封包。讓伺服器放置到內部網路,需要使用Indound

Static mapping技術,可以把NAT路由器上的特定外部埠靜態對映到內部網路上的某個IP的埠上(如果有很多IP地址,可以把一個外部地址對映到內部的節點上)。

對於內建web伺服器,就向內對映80埠。

當配置NAT建立好向內的靜態對映後,當NAT路由器接收到TCP 80埠的封包後,路由器會將其轉發到內部網路的web伺服器上。由於web服務其是隱藏在內部網路的,所以外部的客戶端根本不會知道伺服器的確切位置。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23410886/viewspace-1031634/,如需轉載,請註明出處,否則將追究法律責任。

相關文章