第1章 NAT

1.1 NAT概述

1990年代中期,NAT是作為一種解決IPv4地址短缺以避免保留IP地址困難的方案而流行起來的。網路地址轉換在很多國家都有很廣泛的使用。所以NAT就成了家庭和小型辦公室網路連線上的路由器的一個標準特徵,因為對他們來說,申請獨立的IP地址的代價要高於所帶來的效益。

在一個典型的配置中,一個本地網路使用一個專有網路的指定子網(比如192.168.x.x或10.x.x.x)和連在這個網路上的一個路由器。這個路由器佔有這個網路地址空間的一個專有地址(比如192.168.0.1),同時它還通過一個或多個因特網服務提供商提供的公有的IP地址(叫做“過載”NAT)連線到因特網上。當資訊由本地網路向因特網傳遞時,源地址被立即從專有地址轉換為公用地址。由路由器跟蹤每個連線上的基本資料,主要是目的地址和埠。當有回覆返回路由器時,它通過輸出階段記錄的連線跟蹤資料來決定該轉發給內部網的哪個主機;如果有多個公用地址可用,當資料包返回時,TCPUDP客戶機的埠號可以用來分解資料包。對於因特網上的一個系統,路由器本身充當通訊的源和目的地址。

流行在網路上的一種看法認為,IPv6的廣泛採用將使得NAT不再需要,因為NAT只是一個處理IPv4的地址空間不足的方法。

1.2 NAT簡單介紹

NAT英文全稱是“Network Address Translation”,中文意思是“網路地址轉換”,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標準,允許一個整體機構以一個公用IP(Internet Protocol)地址出現在Internet上。顧名思義,它是一種把內部私有網路地址(IP地址)翻譯成合法網路IP地址的技術。簡單的說,NAT就是在區域網內部網路中使用內部地址,而當內部節點要與外部網路進行通訊時,就在閘道器(可以理解為出口,打個比方就像院子的門一樣)處,將內部地址替換成公用地址,從而在外部公網(internet)上正常使用,NAT可以使多臺計算機共享Internet連線,這一功能很好地解決了公共IP地址緊缺的問題。通過這種方法,您可以只申請一個合法IP地址,就把整個區域網中的計算機接入Internet中。這時,NAT遮蔽了內部網路,所有內部網計算機對於公共網路來說是不可見的,而內部網計算機使用者通常不會意識到NAT的存在。這裡提到的內部地址,是指在內部網路中分配給節點的私有IP地址,這個地址只能在內部網路中使用,不能被路由(一種網路技術,可以實現不同路徑轉發)。雖然內部地址可以隨機挑選,但是通常使用的是下面的地址:10.0.0.0~10.255.255.255,172.16.0.0~172.16.255.255,192.168.0.0~192.168.255.255。NAT將這些無法在網際網路上使用的保留IP地址翻譯成可以在網際網路上使用的合法IP地址。而全域性地址,是指合法的IP地址,它是由NIC(網路資訊中心)或者ISP(網路服務提供商)分配的地址,對外代表一個或多個內部區域性地址,是全球統一的可定址的地址。

1.3 NAT功能

NAT功能通常被整合到路由器、防火牆、ISDN路由器或者單獨的NAT裝置中。比如Cisco路由器中已經加入這一功能,網路管理員只需在路由器的IOS中設定NAT功能,就可以實現對內部網路的遮蔽。再比如防火牆將WEB Server的內部地址192.168.1.1對映為外部地址202.96.23.11,外部訪問202.96.23.11地址實際上就是訪問訪問192.168.1.1。另外資金有限的小型企業來說,現在通過軟體也可以實現這一功能。Windows 98 SE、Windows 2000 都包含了這一功能。

1.4 NAT技術型別

NAT有三種類型:靜態NAT(Static NAT)、動態地址NAT(Pooled NAT)、網路地址埠轉換NAPT(Port-Level NAT)。

其中靜態NAT設定起來最為簡單和最容易實現的一種,內部網路中的每個主機都被永久對映成外部網路中的某個合法的地址。而動態地址NAT則是在外部網路中定義了一系列的合法地址,採用動態分配的方法對映到內部網路。NAPT則是把內部地址對映到外部網路的一個IP地址的不同埠上。根據不同的需要,三種NAT方案各有利弊。

動態地址NAT只是轉換IP地址,它為每一個內部的IP地址分配一個臨時的外部IP地址,主要應用於撥號,對於頻繁的遠端聯接也可以採用動態NAT。當遠端使用者聯接上之後,動態地址NAT就會分配給他一個IP地址,使用者斷開時,這個IP地址就會被釋放而留待以後使用。

網路地址埠轉換NAPT(Network Address Port Translation)是人們比較熟悉的一種轉換方式。NAPT普遍應用於接入裝置中,它可以將中小型的網路隱藏在一個合法的IP地址後面。NAPT與動態地址NAT不同,它將內部連線對映到外部網路中的一個單獨的IP地址上,同時在該地址上加上一個由NAT裝置選定的TCP埠號。

在Internet中使用NAPT時,所有不同的資訊流看起來好像來源於同一個IP地址。這個優點在小型辦公室內非常實用,通過從ISP處申請的一個IP地址,將多個連線通過NAPT接入Internet。實際上,許多SOHO遠端訪問裝置支援基於PPP的動態IP地址。這樣,ISP甚至不需要支援NAPT,就可以做到多個內部IP地址共用一個外部IP地址上Internet,雖然這樣會導致通道的一定擁塞,但考慮到節省的ISP上網費用和易管理的特點,用NAPT還是很值得的。

1.5 HAPT

NAPT(Network Address Port Translation),即網路埠地址轉換,是人們比較熟悉的一種轉換方式,將多個內部地址對映為一個合法公網地址,但以不同的協議埠號與不同的內部地址相對應,也就是<內部地址+內部埠>與<外部地址+外部埠>之間的轉換。NAPT普遍用於接入裝置中,它可以將中小型的網路隱藏在一個合法的IP地址後面。NAPT也被稱為"多對一"的NAT,或者叫PAT(Port Address Translations,埠地址轉換)、地址超載(address overloading)。

NAPT與動態地址NAT不同,它將內部連線對映到外部網路中的一個單獨的IP地址上,同時在該地址上加上一個由NAT裝置選定的TCP埠號。NAPT算得上是一種較流行的NAT變體,通過轉換TCP或UDP協議埠號以及地址來提供併發性。除了一對源和目的IP地址以外,這個表還包括一對源和目的協議埠號,以及NAT盒使用的一個協議埠號。

NAPT的主要優勢在於,能夠使用一個全球有效IP地址獲得通用性。主要缺點在於其通訊僅限於TCP或UDP。當所有通訊都採用TCP或UDP,NAPT允許一臺內部計算機訪問多臺外部計算機,並允許多臺內部主機訪問同一臺外部計算機,相互之間不會發生衝突。

在Internet中使用NAPT時,所有不同的資訊流看起來好像來源於同一個IP地址。這個優點在小型辦公室內非常實用,通過從ISP處申請的一個IP地址,將多個連線通過NAPT接入Internet。實際上,許多SOHO遠端訪問裝置支援基於PPP的動態IP地址。這樣,ISP甚至不需要支援NAPT,就可以做到多個內部IP地址共用一個外部IP地址上Internet,雖然這樣會導致通道的一定擁塞,但考慮到節省的ISP上網費用和易管理的特點,用NAPT還是很值得的。

NAPT使得一組主機可以共享唯一的外部地址,當位於內部網路中的主機通過NAT裝置向外部主機發起會話請求時,NAT裝置就會查詢NAT表,看是否有相關會話記錄,如果有相關記錄,就會將內部IP地址及埠同時進行轉換,再轉發出去;如果沒有相關記錄,進行IP地址和埠轉換的同時,還會在NAT表增加一條該會話的記錄。外部主機接收到資料包後,用接受到的合法公網地址及埠作為目的IP地址及埠來響應,NAT裝置接收到外部回來的資料包,再根據NAT表中的記錄把目的地址及埠轉換成對應的內部IP地址及埠,轉發給該內部主機。

1.6 NAT的缺點

在一個具有NAT功能的路由器下的主機並沒有建立真正的IP地址,並且不能參與一些因特網協議。一些需要初始化從外部網路建立的TCP連線和無狀態協議(比如UDP)無法實現。除非NAT路由器管理者預先設定了規則,否則送來的資料包將不能到達正確的目的地址。一些協議有時可以在應用層閘道器(見下)的輔助下,在參與NAT的主機之間容納一個NAT的例項,比如FTP。NAT也會使安全協議變的複雜,比如IPsec

端對端連線是被IAB委員會(Internet Architecture Board)支援的核心因特網協議之一,因此有些人據此認為NAT是對公用因特網的一個破壞。一些因特網服務提供商只向他們的客戶提供本地IP地址,所以他們必須通過NAT來訪問ISP網路以外的服務,並且這些公司能不能算的上真正的提供了因特網服務的話題也被談起。

NAT除了帶來方便和代價之外,對全雙工連線支援的缺少在一些情況下可以看作是一個有好處的特徵而不是一個限制。在一定程度上,NAT依賴於本地網路上的一臺機器來初始化和路由器另一邊的主機的任何連線,它可以阻止外部網路上的主機的惡意活動。這樣就可以阻止網路蠕蟲病毒來提高本地系統的可靠性,阻擋惡意瀏覽來提高本地系統的私密性。很多具有NAT功能的防火牆都是使用這種功能來提供核心保護的。另外,它也為UDP的跨區域網的傳輸提供了方便。

第2章 基本NAT和埠轉換

2.1 基本網路地址轉換(Basic NAT)

這一種也可稱作NAT或“靜態NAT”。它在技術上比較簡單一點,僅支援地址轉換,不支援埠對映。Basic NAT要求對每一個當前連線都要對應一個公網IP地址,因此要維護一個公網的地址池。寬頻(broadband)路由器通常使用這種方式來允許一臺指定的裝置去管理所有的外部連結,甚至當路由器本身只有一個可用外部IP時也如此,這臺路由器有時也被標記為DMZ主機

基本NAT要維護一個無埠號NAT表,結構如下。

內網IP

外網IP

192.168.1.55

219.152.168.222

192.168.1.59

219.152.168.223

192.168.1.155

219.152.168.224

2.2 網路地址埠轉換(NAPT)

這種方式支援埠的對映,並允許多臺主機共享一個公網IP地址。

支援埠轉換的NAT又可以分為兩類:源地址轉換和目的地址轉換。前一種情形下發起連線的計算機的IP地址將會被重寫,使得內網主機發出的資料包能夠到達外網主機。後一種情況下被連線計算機的IP地址將被重寫,使得外網主機發出的資料包能夠到達內網主機。實際上,以上兩種方式通常會一起被使用以支援雙向通訊。

NAPT維護一個帶有IP以及埠號的NAT表,結構如下。

內網IP

外網IP

192.168.1.55:5566

219.152.168.222:9200

192.168.1.59:80

219.152.168.222:9201

192.168.1.59:4465

219.152.168.222:9202

2.2.1 受到NAT影響的應用程式

一些高層協議(比如FTPQuakeSIP)在IP包的有效資料內傳送網路層(第三層)資訊。比如,主動模式FTP使用單獨的埠分別來控制命令傳輸和資料傳輸。當請求一個檔案傳輸時,主機在傳送請求的同時也通知對方自己想要在哪個埠接受資料。但是,如果主機是在一個簡單的NAT防火牆後傳送的請求,那麼由於埠的對映,將會使對方接收到的資訊無效。

一個應用層閘道器(Application Layer Gateway,ALG)可以修正這個問題。執行在NAT防火牆裝置上的ALG軟體模組可以更新任何由地址轉換而導致無效的資訊。顯然,ALG需要明白它所要修正的上層協議,所以每個有這種問題的協議都需要有一個單獨的ALG。

但是,除FTP外的大多數傳統的客戶機-伺服器協議不需要傳送網路層(第三層)資訊,也就不需要ALG。

這個問題的另一個可能的解決方法是使用像STUN這樣的技術,但是這隻針對建立在UDP上的高層協議,並且需要它內建這種技術。這種技術對於對稱NAT也是無效的。還有一種可能的方案是UPnP,但它需要和NAT裝置配合起來使用

第3章 今天學的簡單明瞭

3.1 虛擬機器和NAT的關係

NAT就是今天學的虛擬機器和電腦轉換的一個協議也可以當做把電腦的IP共享給虛擬機器。

3.2 橋接模式

橋接就是把電腦的IP給虛擬機器,虛擬機器的IP就和電腦的IP是相同的。

第4章 如果是在實際環境中

4.1.1 內部網路私有IP通過NAT技術轉換為合法公有IP然後訪問外部網路

4.2 計算機通過交換機然後通過外網NAT網路轉換連線到外網

4.3 計算機通過路由器NAT技術把IP轉換成全球IP地址連線到因特網通過因特網又可以連線到目標主機或者是伺服器

4.4 電腦手機······通過路由器將NAT連線到外網IP然後連線到對方伺服器和裝置

4.5 大概簡單總結:

1.外網IP少所以就有了私網IP

2.計算機通過路由器的光纖由NAT協議轉成外網IP到達外網然後由伺服器那邊的外網IP接受,然後由那邊的路由器傳到伺服器的私有IP其中伺服器這邊的路由器也用到了NAT協議。(大概說法,其中包含很多種協議,和很多詳細方法)