端口地址轉換(PAT)技術解析

十月 21, 2010 by · Leave a Comment
Filed under: SCWCD 

PAT叫端口地址轉換,NAT是網絡地址轉換,由RFC 1631定義。

  PAT可以看做是NAT的壹部分。   在NAT時,考慮壹種情形,就是只有壹個Public IP,而內部有多個Private IP,這個時候NAT就要通過映射UDP和TCP端口號來跟蹤記錄不同的會話,比如用戶A、B、C同時訪問CSDN,則NAT路由器會將用戶A、B、C訪問分別映射到1088、1098、23100(舉例而已,實際上是動態的),此時實際上就是PAT了。   由上面推論,PAT理論上可以同時支持(65535 – 1024)= 64511個連接會話。但實際使用中由於設備性能和物理連接特性是不能達到的,CISCO的路由器NAT功能中每個Public IP最多能有效地支持大約4000個會話。

  PAT普遍應用於接入設備中,它可以將中小型的網絡隱藏在壹個合法的IP地址後面。PATT與動態地址NAT不同,它將內部連接映射到外部網絡中的壹個單獨的IP地址上,同時在該地址上加上壹個由NAT設備選定的TCP端口號。也就是采用port multiplexing 技術,或改變外出數據的源port的技術將多個內部ip地址映射到同壹個外部地址;

  隨著Internet的飛速發展,網上豐富的資源產生著巨大的吸引力。接入Internet、訪問Internet成為當今信息業最為迫切的需求。

  但這受到IP地址的許多限制。首先,許多局域網在未聯入Internet之前,就已經運行許多年了,局域網上有了許多現成的資源和應用程序,但它的IP地址分配不符合Internet的國際標準,因而需要重新分配局域網的IP地址,這無疑是勞神費時的工作;其二,隨著Internet的膨脹式發展,其可用的IP地址越來越少,要想在ISP處申請壹個新的IP地址已不是很容易的事了。這不僅僅是費用的問題,而是IP地址的現行標準IPv4決定的。當然,隨著IPv6的出臺,這個問題應當能夠得到解決。但從IPv4到IPv6的升級不是壹兩天就能完成的。

  NAT(網絡地址翻譯)能解決不少令人頭疼的問題。它解決問題的辦法是:在內部網絡中使用內部地址,通過NAT把內部地址翻譯成合法的IP地址,在Internet上使用。其具體的做法是把IP包內的地址域用合法的IP地址來替換。

  NAT功能通常被集成到路由器、防火墻、ISDN路由器或者單獨的NAT設備中。NAT設備維護壹個狀態表,用來把非法的IP地址映射到合法的IP地址上去。每個包在NAT設備中都被翻譯成正確的IP地址發往下壹級,這意味著給處理器帶來了壹定的負擔。但這對於壹般的網絡來說是微不足道的,除非是有許多主機的大型網絡。

  需要註意的是,NAT並不是壹種有安全保證的方案,它不能提供類似防火墻、包過濾、隧道等技術的安全性,僅僅在包的最外層改變IP地址。這使得黑客可以很容易地竊取網絡信息,危及網絡安全。

  NAT有三種類型:靜態NAT(staticNAT)、NAT池(pooledNAT)和端口NAT(PAT)。其中靜態NAT設置起來最為簡單,內部網絡中的每個主機都被永久映射成外部網絡中的某個合法的地址。而NAT池則是在外部網絡中定義了壹系列的合法地址,采用動態分配的方法映射到內部網絡。PAT則是把內部地址映射到外部網絡的壹個IP地址的不同端口上。根據不同的需要,各種NAT方案都是有利有弊。

  ■使用NAT池

  使用NAT池,可以從未註冊的地址空間中提供被外部訪問的服務,也可以從內部網絡訪問外部網絡,而不需要重新配置內部網絡中的每臺機器的IP地址。例如,建立在NT+IIS服務器上的內部試驗子網192.168.0.0,其網絡地址屬於B類保留地址。作為企業網的壹個子網,其IP地址不分配給企業網上的設備而僅僅局限在試驗子網的設備上。為了使企業網能訪問到這個內部網,在網絡上增加壹條靜態路徑,使信息能回傳給Cisco4700路由器。其中的路由器可以把內部網和企業網連接起來,使之能相互訪問。在內部網中不要使用RIP協議,因為使用RIP後,內部網絡相對外部來說變得不可見了。

  這樣,本地信息可以相互訪問了,但由於192.168.0.0屬於保留地址,故不能直接訪問Internet。所以在路由器中設置壹個NAT池,用來翻譯來自內部網絡的IP包,把它的IP地址映射成地址池(pooledaddresses)中的合法IP地址。那麽,內部網可以訪問Internet上的任何服務器,Internet上的任何主機也能通過TCP或UDP訪問到內部網。

  采用NAT池意味著可以在內部網中定義很多的內部用戶,通過動態分配的辦法,共享很少的幾個外部IP地址。而靜態NAT則只能形成壹壹對應的固定映射方式。該引起註意的是,NAT池中動態分配的外部IP地址全部被占用後,後續的NAT翻譯申請將會失敗。慶幸的是,許多有NAT功能的路由器有超時配置功能。例如在上述的Cisco4700中配置成開始15分鐘後刪除當前的NAT進程,為後續的NAT申請預留出外部IP地址。通過試驗表明,壹般的外部連接不會很長,所以短的時間閾值也可以接受。當然用戶可以自行調節時間閾值,以滿足各自的需求。

  NAT池提供很大靈活性的同時,也影響到網絡原有的壹些管理功能。例如,SN MP管理站利用IP地址來跟蹤設備的運行情況。但使用NAT之後,意味著那些被翻譯的地址對應的內部地址是變化的,今天可能對應壹臺工作站,明天就可能對應壹臺服務器。這給SNMP管理帶來了麻煩。壹個可行的解決方案就是把劃分給NAT池的那部分地址在SNMP管理平臺上標記出來,對於這些不響應管理信號的地址不予報警,如同它們被關掉了壹樣。

  ■使用PAT

  PAT在遠程訪問產品中得到了大量的應用,特別是在遠程撥號用戶使用的設備中。PAT可以把內部的TCP/IP映射到外部壹個註冊IP地址的多個端口上。PAT可以支持同時連接64500個TCP/IP、UDP/IP,但實際可以支持的工作站個數會少壹些。因為許多Internet應用如HTTP,實際上由許多小的連接組成。

  在Internet中使用PAT時,所有不同的TCP和UDP信息流看起來仿佛都來源於同壹個IP地址。這個優點在小型辦公室(SOHO)內非常實用,通過從ISP處申請的壹個IP地址,將多個連接通過PAT接入Internet。實際上,許多SOHO遠程訪問設備支持基於PPP的動態IP地址。這樣,ISP甚至不需要支持PAT,就可以做到多個內部IP地址共用壹個外部IP地址上Internet。雖然這樣會導致信道的壹定擁塞,但考慮到節省的ISP上網費用和易管理的特點,用PAT還是很值得的。

  ■基於NAT的負載平衡

  以上所談論的均是關於使用NAT和PAT來把內部IP地址轉換成外部合法的IP地址使用。下面介紹NAT的另壹個運用:作為用於負載平衡的DNS系列服務器(DNSround-robin)的壹個替代品。DNS系列服務器解決了多個IP地址共用壹個域名的問題。它會在響應DNS申請時跳躍式地尋找可用的IP地址。達到的效果就是壹個域名可以對應多個IP地址。這種功能可以應用在壹個HTTP服務器群中,利用它可以平衡多個服務器的負載。但是這裏還有壹個問題,IP客戶端會在本地緩沖DNS/IP地址解析,從而使它的後續的申請都會到達同壹個IP地址,減弱了DNS系列服務器的作用。

  使用基於NAT的負載平衡方案,則可以避免這個問題。路由器或其它NAT設備把需要負載平衡的多個IP地址翻譯成壹個公用的IP地址,每個TCP連接被NAT送到壹個IP地址,而後續的TCP連接則被NAT送到下壹個IP地址。真正實現了負載平衡。當然,基於NAT的負載平衡只能在NAT上實現,而不能在PAT上實現。

  ■安全問題

  當NAT改變包的IP地址後,需要認真考慮這樣做對安全設施帶來的影響。

  對於防火墻,它利用IP地址、TCP端口、目標地址以及其它在IP包內的信息來決定是否幹預網絡的連接。當使用了NAT之後,可能就不得不改變防火墻的規則,因為NAT改變了源地址和目的地址。

  在許多配置中,NAT被集成在防火墻系統之中,提供訪問控制和地址翻譯的功能。不要把NAT設在防火墻之外,因為黑客可以輕易地騙過NAT,讓NAT認為它是壹個授權用戶,從而進入網絡。

  若企業網中使用了VPN(虛擬專用網),並用IPSec進行加密安全保證,那麽錯誤地設置NAT將會破壞VPN的功能。把NAT放在受保護的VPN內部,而不是在中間。因為NAT改變IP包內的地址域,而IPSec規定壹些信息是不能被改變的。若IP地址被改變了,IPSec就會認為這個包是偽造的,拒絕使用。

  雖然NAT帶來了許多優越性,例如使現有網絡不必重新編址、減少了ISP接入費用,還可以起平衡負載的作用,但NAT潛在地影響到壹些網絡管理功能和安全設施,這就需要謹慎地使用它。… Continue reading