有關(guān)使用網(wǎng)絡(luò)地址轉(zhuǎn)換器的一些問(wèn)題

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

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