網路位址轉譯

網路位址轉譯(英語:Network Address Translation,縮寫:NAT),又稱IP動態偽裝(英語:IP Masquerade[1]:176,是一種在IP封包通過路由器防火牆時重寫來源或目的IP位址的技術。這種技術普遍應用於有多台主機,但只通過一個公有IP位址訪問互聯網私有網絡中。

NAT技術部署方便,且得到了廣泛應用。然而,NAT也讓主機之間的通訊變得複雜,導致了通訊效率的降低。

概述

 
無NAT網絡,假設每個接入子網絡都需要一組/24的IP,而且還能對外連接,對外的路由至少要保留或申請1000個對外IP
 
帶NAT網絡,通過NAT轉換,接入子網絡可以使用私用IP,對外連接時由NAT裝置繫結私用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)連接到互聯網上。當資訊由本地網絡向互聯網傳遞時,源位址從專有位址轉換為公用位址。由路由器跟蹤每個連接上的基本數據,主要是目的位址和埠。當有回覆返迴路由器時,它通過輸出階段記錄的連接跟蹤數據來決定該轉發給內聯網的哪個主機;如果有多個公用位址可用,當封包返回時,TCPUDP客戶機的埠號可以用來分解封包。對於互聯網上的通訊,路由器本身充當源和目的。

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

缺點

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

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

優點

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

類型

基本網路位址轉譯(Basic NAT)

這一種也可稱作NAT或「靜態NAT」,在RFC 2663中提供了資訊。它在技術上比較簡單,僅支援位址轉換,不支援埠對映。Basic NAT要求對每一個當前連接都要對應一個公網IP位址,因此要維護一個公網的位址池。寬頻(broadband)路由器通常使用這種方式來允許一台指定的裝置去管理所有的外部連結,甚至當路由器本身只有一個可用外部IP時也如此,這台路由器有時也被標記為DMZ主機。由於改變了IP源位址,在重新封裝封包時候必須重新計算校驗和,網絡層以上的只要涉及到IP位址的頭部校驗和都要重新計算。

Basic 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

網絡位址埠轉換(NAPT)

這種方式支援傳輸層協定(例如TCP、UDP等)的埠對映,並允許多台主機共用一個公網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

受到NAT影響的應用程式

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

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

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

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

轉換和過濾方式

以下類型是基於RFC 3489所定義:[2]

完全圓錐型NATFull cone NAT,也叫NAT1)
  • 一旦內部位址(iAddr:iPort)對映到外部位址(eAddr:ePort),所有發自iAddr:iPort的封包都經由eAddr:ePort向外傳送。
  • 任意外部主機都能經由傳送封包給eAddr:ePort到達iAddr:iPort。
 
受限圓錐型NATRestricted cone NAT,也叫NAT2)
  • 一旦內部位址(iAddr:iPort)對映到外部位址(eAddr:ePort),所有發自iAddr:iPort的封包都經由eAddr:ePort向外傳送。
  • 唯iAddr:iPort曾經傳送封包到外部主機(nAddr:any),外部主機才能經由傳送封包給eAddr:ePort到達iAddr:iPort。(註:any指外部主機源埠不受限制。)
 
埠受限圓錐型NATPort-Restricted cone NAT,也叫NAT3)

類似受限制錐形NAT,但是還有埠限制。

  • 一旦內部位址(iAddr:iPort)對映到外部位址(eAddr:ePort),所有發自iAddr:iPort的封包都經由eAddr:ePort向外傳送。
  • 在受限圓錐型NAT基礎上增加了外部主機源埠必須是固定的。
 
對稱NATSymmetric NAT,也叫NAT4)
  • 每一個來自相同內部IP與埠,到一個特定目的地IP和埠的請求,都對映到一個獨特的外部IP和埠。
    同一內部IP與埠發到不同的目的地和埠的資訊包,都使用不同的對映。
  • 只有曾經收到過內部主機數據的外部主機,才能夠把封包發回。
 

其他用途

  • 負載均衡:目的位址轉換NAT可以重新導向一些伺服器的連接到其他隨機選定的伺服器。
  • 失效終結:目的位址轉換NAT可以用來提供高可靠性的服務。如果一個系統有一台通過路由器訪問的關鍵伺服器,一旦路由器檢測到該伺服器當機,它可以使用目的位址轉換NAT透明的把連接轉移到一個備份伺服器上。
  • 透明代理:NAT可以把連接到互聯網的HTTP連接重新導向到一個指定的HTTP代理伺服器以快取數據和過濾請求。一些互聯網服務提供商就使用這種技術來減少頻寬的使用而不用讓他們的客戶組態他們的瀏覽器支援代理連接。

參考資料

  1. ^ Olaf Kirch; Terry Dawson. Linux Network Administrator's Guide, 2nd Edition. O'Reilly. 2000 [2023-12-12]. ISBN 1-56592-400-2. (原始內容存檔於2024-02-05). 
  2. ^ STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs). [2024-06-06]. (原始內容存檔於2024-06-16). 

參見

外部連結