網絡地址轉換檢視原始碼討論檢視歷史
網絡地址轉換 |
中文名: 網絡地址轉換 外文名: Network Address Translation 簡 寫: NAT 功 能: 隱藏並保護網絡內部的計算機 技 術: 廣域網 實現方式: 靜態、動態轉換和端口多路復用 |
在計算機網絡中,網絡地址轉換(Network Address Translation,縮寫為NAT),也叫做網絡掩蔽或者IP掩蔽(IP masquerading),是一種在IP數據包通過路由器或防火牆時重寫來源IP地址或目的IP地址的技術。這種技術被普遍使用在有多台主機但只通過一個公有IP地址訪問因特網的私有網絡中。它是一個方便且得到了廣泛應用的技術。當然,NAT也讓主機之間的通信變得複雜,導致了通信效率的降低。[1]
簡介
NAT英文全稱是「NetworkAddressTranslation」,中文意思是「網絡地址轉換」,它是一個IETF(InternetEngineeringTaskForce,Internet工程任務組)標準,允許一個整體機構以一個公用IP(InternetProtocol)地址出現Internet上。顧名思義,它是一種把內部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術。
概述
無NAT網絡,假設每個接入子網都需要一組/24的IP,而且還能對外連接,對外的路由至少要保留或申請1000個對外IP。但NAT網絡,通過NAT轉換,接入子網可以使用私用IP,對外連接時由路由綁定私用IP與對外IP的關係,修改傳輸的IP包上的地址,從而只需要255個對外IP就能滿足內部接入子網的對外連接需求 1990年代中期,NAT是作為一種解決IPv4地址短缺以避免保留IP地址困難的方案而流行起來的。網絡地址轉換在很多國家廣泛使用。所以NAT就成了家庭和小型辦公室網絡連接上的路由器的一個標準特徵,因為對他們來說,申請獨立的IP地址的代價要高於所帶來的效益。 在一個典型的配置中,一個本地網絡使用一個專有網絡的指定子網(比如192.168.x.x或10.x.x.x)和連在這個網絡上的一個路由器。這個路由器占有這個網絡地址空間的一個專有地址(比如192.168.0.1),同時它還通過一個或多個因特網服務提供商提供的公有的IP地址(叫做「過載」NAT)連接到因特網上。當信息由本地網絡向因特網傳遞時,源地址從專有地址轉換為公用地址。由路由器跟蹤每個連接上的基本數據,主要是目的地址和端口。當有回覆返迴路由器時,它通過輸出階段記錄的連接跟蹤數據來決定該轉發給內部網的哪個主機;如果有多個公用地址可用,當數據包返回時,TCP或UDP客戶機的端口號可以用來分解數據包。對於因特網上的通信,路由器本身充源和目的。 流行在網絡上的一種看法認為,IPv6的廣泛採用將使得NAT不再需要,因為NAT只是一個處理IPv4的地址空間不足的方法。
分類
NAT有三種類型:靜態NAT(StaticNAT)、動態地址NAT(PooledNAT)、網絡地址端口轉換NAPT(Port-LevelNAT)。 其中,網絡地址端口轉換NAPT(NetworkAddressPortTranslation)則是把內部地址映射到外部網絡的一個IP地址的不同端口上。它可以將中小型的網絡隱藏在一個合法的IP地址後面。NAPT與動態地址NAT不同,它將內部連接映射到外部網絡中的一個單獨的IP地址上,同時在該地址上加上一個由NAT設備選定的端口號。 NAPT是使用最普遍的一種轉換方式,在HomeGW中也主要使用該方式。它又包含兩種轉換方式:SNAT和DNAT。 (1)源NAT(SourceNAT,SNAT):修改數據包的源地址。源NAT改變第一個數據包的來源地址,它永遠會在數據包發送到網絡之前完成,數據包偽裝就是一具SNAT的例子。 (2)目的NAT(DestinationNAT,DNAT):修改數據包的目的地址。DestinationNAT剛好與SNAT相反,它是改變第一個數據懈的目的地地址,如平衡負載、端口轉發和透明代理就是屬於DNAT。
缺點
在一個具有NAT功能的路由器下的主機並沒有創建真正的IP地址,並且不能參與一些因特網協議。一些需要初始化從外部網絡創建的TCP連接和無狀態協議(比如UDP)無法實現。除非NAT路由器管理者預先設置了規則,否則送來的數據包將不能到達正確的目的地址。一些協議有時可以在應用層網關(見下)的輔助下,在參與NAT的主機之間容納一個NAT的實例,比如FTP。NAT也會使安全協議變的複雜,比如IPsec。 端對端連接是被IAB委員會(Internet Architecture Board)支持的核心因特網協議之一,因此有些人據此認為NAT是對公用因特網的一個破壞。一些因特網服務提供商(ISP)只向他們的客戶提供本地IP地址,所以他們必須通過NAT來訪問ISP網絡以外的服務,並且這些公司能不能算的上真正的提供了因特網服務的話題也被談起。 NAT除了帶來方便和代價之外,對全雙工連接支持的缺少在一些情況下可以看作是一個有好處的特徵而不是一個限制。在一定程度上,NAT依賴於本地網絡上的一台機器來初始化和路由器另一邊的主機的任何連接,它可以阻止外部網絡上的主機的惡意活動。這樣就可以阻止網絡蠕蟲病毒來提高本地系統的可靠性,阻擋惡意瀏覽來提高本地系統的私密性。很多具有NAT功能的防火牆都是使用這種功能來提供核心保護的。另外,它也為UDP的跨局域網的傳輸提供了方便。 這一種也可稱作NAT或「靜態NAT」,在RFC2663中提供了信息。它在技術上比較簡單,僅支持地址轉換,不支持端口映射。Basic NAT要求對每一個當前連接都要對應一個公網IP地址,因此要維護一個公網的地址池。寬帶(broadband)路由器通常使用這種方式來允許一台指定的設備去管理所有的外部鏈接,甚至當路由器本身只有一個可用外部IP時也如此,這台路由器有時也被標記為DMZ主機。由於改變了IP源地址,在重新封裝數據包時候必須重新計算校驗和,網絡層以上的只要涉及到IP地址的頭部校驗和都要重新計算。 Basic NAT要維護一個無端口號NAT表,結構如下。
網絡地址端口轉換(NAPT)
這種方式支持端口的映射,並允許多台主機共享一個公網IP地址。 支持端口轉換的NAT又可以分為兩類:源地址轉換和目的地址轉換。前一種情形下發起連接的計算機的IP地址將會被重寫,使得內網主機發出的數據包能夠到達外網主機。後一種情況下被連接計算機的IP地址將被重寫,使得外網主機發出的數據包能夠到達內網主機。實際上,以上兩種方式通常會一起被使用以支持雙向通信。 NAPT維護一個帶有IP以及端口號的NAT表,結構如下。
受到NAT影響的應用程序
一些高層協議(比如FTP,Quake,SIP)在IP包的有效數據內發送網絡層(第三層)信息。比如,主動模式的FTP使用單獨的端口分別來控制命令傳輸和數據傳輸。當請求一個文件傳輸時,主機在發送請求的同時也通知對方自己想要在哪個端口接受數據。但是,如果主機是在一個簡單的NAT防火牆後發送的請求,那麼由於端口的映射,將會使對方接收到的信息無效。 一個應用層網關(Application Layer Gateway,ALG)可以修正這個問題。運行在NAT防火牆設備上的ALG軟件模塊可以更新任何由地址轉換而導致無效的信息。顯然,ALG需要明白它所要修正的上層協議,所以每個有這種問題的協議都需要有一個單獨的ALG。 但是,除FTP外的大多數傳統的客戶機-服務器協議不需要發送網絡層(第三層)信息,也就不需要ALG。 這個問題的另一個可能的解決方法是使用像STUN這樣的技術,但是這隻針對創建在UDP上的高層協議,並且需要它內建這種技術。這種技術對於對稱NAT也是無效的。還有一種可能的方案是UPnP,但它需要和NAT設備配合起來使用。
NAT其他用途實例
負載均衡:目的地址轉換NAT可以重定向一些服務器的連接到其他隨機選定的服務器。 失效終結:目的地址轉換NAT可以用來提供高可靠性的服務。如果一個系統有一台通過路由器訪問的關鍵服務器,一旦路由器檢測到該服務器宕機,它可以使用目的地址轉換NAT透明的把連接轉移到一個備份服務器上。 透明代理:NAT可以把連接到因特網的HTTP連接重定向到一個指定的HTTP代理服務器以緩存數據和過濾請求。一些因特網服務提供商就使用這種技術來減少帶寬的使用而不用讓他們的客戶配置他們的瀏覽器支持代理連接。
參見
NAT穿越 端口地址轉換 防火牆 路由 IPv4 IPv6 IPv4地址枯竭 專用網絡 互聯網連接共享 代理服務器 端口轉發 電信級NAT STUN:NAT的UDP簡單穿越 TURN:NAT的UDP簡單中繼 ICE:結合STUN與TURN的NAT的UDP簡單穿越與中繼