有關使用網絡地址轉換器的一些問題

簡介
網絡地址轉換器 (NAT) 允許專用網絡上的計算機訪問 Internet 資源,而不會被其他計算機從 Internet 上直接對其進行訪問。NAT 支持在專用網絡上重復使用 IPv4 專用地址空間 (10.0.0.0/8、172.16.0.0/12、192.168.0.0/16),減輕了每個需要訪問 Internet 資源的節點都需要一個 IPv4 公用地址的壓力。雖然這是使用 NAT 的一個顯著優勢,但是實現這種能力并不是沒有代價的。
最初,Internet 是針對全局唯一的地址空間而設計的。所有連接到 Internet 的接口都擁有一個基于該接口所連接的子網的唯一地址。不管子網在直接連接到 Internet 的專用網絡上如何進行分組,總可以通過全局唯一地址對相應的接口進行訪問。
同時使用 NAT 和專用地址空間違反了全局唯一地址空間的原則。每個經過 NAT 處理的網絡都重復使用專用地址空間。這表示連接到不同網絡的多個接口可以擁有相同的地址。雖然無法從 Internet 上看到這些擁有專用地址的網絡,,但是它們相互間可能是可見的,而且將多個專用網絡組合成單個網絡會造成地址沖突(具有相同地址前綴或不明確路由表項的多個子網)。
例如,公司 A 對其內部網絡使用 10.0.0.0/8 專用地址空間。公司 B 也使用了 10.0.0.0/8 專用地址空間。當公司 A 和公司 B 合并時,他們之間發生地址沖突的幾率會很高。合并后的公司必須對部分已組合的網絡進行重新編號,這是一個既費錢又費時的過程。雖然對大多數基于主機的 IP 節點使用動態主機配置協議 (DHCP) 會有所幫助,但是必須手動對靜態配置的節點(比如:服務器)進行重新配置,并且必須重新設計路由基礎結構。
NAT 操作
如 Windows 2000 網絡地址轉換器 (NAT) (于 2001 年 3 月發布的 Cable Guy 文章)所介紹的,NAT 的基本操作如下:
? |
對于傳出的數據包,NAT 將專用源地址更改為公用源地址,并將源傳輸控制協議 (TCP) 或用戶數據報協議 (UDP) 端口號更改為一個特定于 NAT 的值。對于傳入的數據包,NAT 將目標公用地址更改為初始專用地址,并將目標 TCP 或 UDP 端口號更改為其原始值。 |
NAT 上的轉換表可使公用和專用地址與 TCP/UDP 端口號間的映射變得更容易。NAT 會丟棄所有不是傳輸到 NAT 所指派地址(與轉換表中的項不匹配)的傳入流量。
當位于 NAT 后方的計算機——連接到被 NAT 從 Internet 隔離的子網——對 Internet 上的節點發起通信,NAT 會自動創建適當的轉換表項,以便將相應流量轉發到發起通信的計算機上。瀏覽 Web 的 Internet 客戶端就是一個例子。客戶端計算機所發起的域名系統 (DNS) 超文本傳輸協議 (HTTP) 流量會自動創建轉換表項,有效地允許該客戶端計算機訪問 Internet 資源,而不必建立到 Internet 的直接連接。因此,經過 NAT 處理的客戶端計算機通常可以訪問服務器計算機(可在 Internet 上直接對其進行訪問),同時不會遇到任何問題。
為了可以從 Internet 訪問位于 NAT 之后的服務器計算機,必須通過靜態轉換表項配置 NAT。具體示例,請參見 訪問網絡地址轉換器 (NAT) 后方的服務時的配置 (于 2003 年 5 月發布的 Cable Guy 文章)
NAT 與安全
由于 NAT 會拋棄所有與轉換表項不相匹配的流量,因此被認為是一種安全設備。但是,NAT 并不能替代防火墻。通常,NAT 上會打開兩組 TCP 和 UDP 端口:
? |
一組是與已轉換的流量(由轉換表指定)相對應的端口。其中包括由位于 NAT 之后的客戶端打開的動態端口,以及針對位于 NAT 之后的服務器配置的靜態端口。 |
? |
另一組是與在 NAT 上運行的應用程序和服務相對應的端口。 |
位于 NAT 之后的服務器的靜態端口以及在 NAT 上運行的應用程序和服務的端口使得 NAT 易受攻擊。動態端口并不易受攻擊,因為攻擊者很難預測這類端口將在何時打開。如果 NAT 是一臺計算機,而不是一臺專用設備(比如:Internet 網關設備),那么此計算機易受攻擊。
所以,建議結合防火墻使用 NAT,而且專用網絡客戶端還應使用基于主機的防火墻來防止惡意軟件在專用網絡上進行擴散傳播。
有關在 NAT 后方使用服務器的一些問題
如本文前面所介紹的,經過 NAT 處理的客戶端計算機在訪問與 Internet 連接的服務器計算機時,一般不會遇到問題。然而,在下列情況中,當服務器位于 NAT 之后時,就會發生一些問題:
? |
多方應用程序 |
? |
對等應用程序 |
? |
IPSec NAT-T |
多方應用程序
多方應用程序是多臺計算機同意通過一臺中央服務器為實現特定目的而進行相互通信的應用程序。例如:協同計算應用程序或多方網絡游戲。當中央服務器以及部分客戶端位于 NAT 之后時,使用專用地址會產生一些配置問題。
例如,有一臺協同計算服務器和一些客戶端位于相同的 NAT 之后,而又有一些客戶端位于 Internet 上。因為在 NAT 之后使用了專用地址空間,又由于服務器位于 NAT 后方,所以必須配置以下項目:
? |
將 NAT 的公用地址和服務器應用程序的端口號映射到服務器的專用地址和服務器應用程序的端口號的靜態轉換表項。 |
? |
為了讓與 Internet 連接的客戶端使用自己的 DNS 名稱訪問服務器,必須對 Internet DNS 添加條目,以便可以將服務器名稱解析為 NAT 的公用地址(例如:collabsrv.example.com)。 |
? |
為了讓與 Internet 連接的專用客戶端使用自己的 DNS 名稱訪問服務器,必須對專用網絡 DNS 添加條目,以便可以將服務器名稱解析為服務器的專用地址。 |
如果從客戶端計算機發起連接時使用服務器的實際公用或專用地址,那么就不需要 DNS 配置。然而,對于最終用戶來說,使用 IPv4 地址連接服務器并不方便,而且必須確保告知 Internet 客戶端使用公用地址,并告知位于 NAT 之后的客戶端使用專用地址。
即便有了整個配置,位于 NAT 之后的客戶端以及與 Internet 連接的客戶端在服務器的 IPv4 地址上也無法達成一致。如果協同計算應用程序基于配置、同步或安全目的,必須對服務器使用一個常見的 IPv4 地址,那么仍然會發生通信問題。
對等應用程序
NAT 的另外一個問題是對對等應用程序的影響。在對等通信模型中,對等方既可以充當客戶端,也可以充當服務器,并可以通過相互間直接發送數據包進行通信。如果有一方位于 NAT 之后,那么就有兩個地址與之相關聯:專用地址和公用地址。讓我們來看一個簡單的配置,NAT 會在其中給對等應用程序帶來問題。下圖顯示了一個在其邊緣擁有 NAT 的專用網絡。
對于運行于所有對等方的對等應用程序,對等方 1 可以對對等方 2(可直接在其子網上進行訪問)和對等方 3 發起會話。但是,對等方 1 無法將對等方 2 的公用地址通知給對等方 3,因為對等方 1 不知道該地址。另外,如果不通過靜態轉換表項手動配置 NAT 來對對等方 1 或對等方 2 的專用地址和端口轉換入站連接請求數據包,對等方 3 就無法對對等方 1 或對等方 2 發起會話。即使通過靜態轉換表項,對等方 3 也無法對對等方 1 和對等方 2 發起會話,因為這兩臺主機使用了相同的 IPv4 公用地址和應用程序端口號。
更糟的是,Internet 對等方常常位于兩個不同的 NAT 之后。例如,在上圖中,對等方 3 也位于 NAT 之后。為了確保對等應用程序在任何采用 NAT 的配置中都可以正常工作,必須修改對等應用程序,使其支持 NAT,從而給應用程序帶來額外的復雜性。
IPSec NAT-T
Internet 協議安全 (IPSec) NAT 穿越 (NAT-T) 允許位于 NAT 之后的 IPSec 對等方檢測 NAT 是否存在,協商 IPSec 安全關聯 (SA),并發送受封裝式安全措施負載 (ESP) 保護的數據,即便受 IPSec 保護的 IPv4 數據包中的地址發生了變化。有關 IPSec NAT-T 工作原理的詳細信息,請參見 IPSec NAT 穿越概述 (于 2002 年 8 月發布的 Cable Guy 文章)。
Microsoft Windows Server 2003 和 Windows XP Service Pack 2 (SP2) 支持 IPSec NAT-T,而且 Windows XP Service Pack 1 和 Windows 2000 也可以支持 IPSec NAT-T,但必須首先下載一個 免費軟件 . 然而,由于 IPSec 和 NAT 的行為,在默認情況下,Windows XP SP2 不再支持對位于 NAT 之后的服務器建立 IPSec NAT-T SA 以避免已知的安全風險。下圖展示了一個配置例子。
為了確保服務器 1 在 NAT 后方可供 IPSec 流量訪問,必須通過將 Internet 密鑰交換 (IKE)(使用 UDP 端口 500)和 IPSec NAT-T(使用 UDP 端口 4500)流量映射到服務器 1 的靜態轉換項來配置 NAT。
在此配置中,會發生以下情況:
1. |
位于 Internet 上的客戶端 1 使用 IPSec NAT-T 與服務器 1 建立雙向 SA。由于手動配置了靜態轉換表項,因此 NAT 會在服務器 1 和客戶端 1 間轉發 IKE 和 IPSec NAT-T 流量。 |
2. |
客戶端 2 使用 IPSec NAT-T 與客戶端 1 建立雙向 SA。當客戶端 2 對客戶端 1 發起通信時,NAT 會創建一組動態轉換表項,允許在客戶端 2 和客戶端 1 之間交換 IKE 和 IPSec NAT-T 流量。 |
3. |
如果 NAT 刪除了客戶端 2 所創建的動態轉換表項,并發生了一個情況導致客戶端 1 重新與客戶端 2 建立 SA,那么就會發生下列情況: 客戶端 1 將 IKE 流量發送給 NAT 的公用 IP 地址和 UDP 端口 500。由于該流量將 IKE 流量的靜態轉換表項與服務器 1 相匹配,NAT 將把 IKE 流量轉發到服務器 1,而不是客戶端 2。因為客戶端 1 正在重新建立 SA,所以它將開始進行 IPSec 主模式協商,并會結束與服務器 1 建立 SA,而不是客戶端 2。已知的安全風險是客戶端 1 會與無企圖的對等方建立雙向 SA。 |
雖然這是一種少有的情況,但是運行帶有 SP2 的 Windows XP 的計算機的默認行為是避免對位于 NAT 后方的服務器建立任何基于 IPSec NAT-T 的 SA,從而確保永遠不會發生這類情況。
如要改變運行帶有 SP2 的 Windows XP 的計算機的 IPSec NAT-T 行為,必須創建并設置 AssumeUDPEncapsulationContextOnSendRule 注冊表值。但是,這么做之前,應該先咨詢一下網絡管理員或安全工作人員。
如要添加并配置 AssumeUDPEncapsulationContextOnSendRule 注冊表值,請執行以下步驟:
1. |
在 Windows XP 桌面上,單擊“ 開始 ”,單擊“ 運行 ”,鍵入“ regedit.exe ”,然后單擊“ 確定 ”。 |
||||||
2. |
在“注冊表編輯”的控制臺樹中,打開下列注冊表項:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPSEC |
||||||
3. |
在“ 編輯 ”菜單上,單擊“ 添加值 ,然后添加下列值: 值名:AssumeUDPEncapsulationContextOnSendRule 數據類型:REG_DWORD 數據值:0、1 或 2
|
注意: AssumeUDPEncapsulationContextOnSendRule 名稱區分大小寫。 |
必須重新啟動帶有 SP2 的 Windows XP 以便使該設置生效。
將 AssumeUDPEncapsulationContextOnSendRule 設為 1 或 2 使運行帶有 SP2 的 Windows XP 的計算機可以連接到位于 NAT 之后的服務器,包括運行 Windows Server 2003 的虛擬專用網絡 (VPN) 服務器。
總結
NAT 只是延長 IPv4 公用地址空間使用壽命的權宜之計,而不是該問題的長久解決之道。在對客戶端計算機重復使用專用地址空間方面,NAT 能夠發揮其最大的作用。多數服務器計算機仍然需要明確的公用地址。對等通信中的對等方可以被放置在 NAT 之后,但是在一般應用中(當有多個對等方位于單個 NAT 之后或被多個 NAT 隔離開來時),必須修改對等應用程序,使之支持 NAT。服務器可以置于 NAT 之后;但是,必須通過靜態轉換表項手動配置 NAT,以便對服務器的專用地址和端口轉換入站連接請求數據包。對于 IPSec NAT-T,此靜態轉換表項會在特定的配置中導致一些意外的結果。
更多信息
有關 NAT 和 Windows 的更多信息,請咨詢以下資源:
? |
對位于網絡地址轉換器 (NAT) 后方的服務進行訪問配置 (于 2003 年 5 月發布的 Cable Guy 文章) |
? |
IPSec NAT 穿越概述 (于 2002 年 8 月發布的 Cable Guy 文章) |
? | |
? |
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
