簡介
在計算機科學中, nat穿透(NAT traversal)涉及TCP/IP網路中的一個常見問題,即在處於使用了NAT設備的私有TCP/IP網路中的主機之間建立連線的問題。
會遇到這個問題的通常是那些客戶端網路互動應用程式的開發人員,尤其是在對等網路和VoIP領域中。IPsecVPN客戶普遍使用NAT-T來達到使ESP包通過NAT的目的。
儘管有許多穿越NAT的技術,但沒有一項是完美的,這是因為NAT的行為是非標準化的。這些技術中的大多數都要求有一個公共伺服器,而且這個伺服器使用的是一個眾所周知的、從全球任何地方都能訪問得到的IP位址。一些方法僅在建立連線時需要使用這個伺服器,而其它的方法則通過這個伺服器中繼所有的數據——這就引入了頻寬開銷的問題。
兩種常用的NAT穿越技術是:UDP路由驗證和STUN。除此之外,還有TURN、ICE、ALG,以及SBC。
NAT穿透與IPsec
為了於NAT之上實現IPsec,下列的協定必須在防火牆中實作:
•Internet Key Exchange (IKE) -UDP連線埠500
•Encapsulating Security Payload (ESP) - IP協定號50
或者是NAT-T之例:
•IPsec NAT-T - UDP連線埠4500
在家庭路由器上,這通常通過啟用“IPsec穿透”來實現。
IETF文獻
•RFC 1579- Firewall Friendly FTP
•RFC 2663- IP Network Address Translator (NAT) Terminology and Considerations
•RFC 2709- Security Model with Tunnel-mode IPsec for NAT Domains
•RFC 2993- Architectural Implications of NAT
•RFC 3022- Traditional IP Network Address Translator (Traditional NAT)
•RFC 3027- Protocol Complications with the IP Network Address Translator (NAT)
•RFC 3235- Network Address Translator (NAT)-Friendly Application Design Guidelines
•RFC 3715- IPsec-Network Address Translation (NAT) Compatibility
•RFC 3947- Negotiation of NAT-Traversal in the IKE
•RFC 5128- State of Peer-to-Peer (P2P) Communication across Network Address Translators (NATs)
相關技術
NAT穿透技術與NAT行為
•Session Traversal Utilities for NAT(STUN)
•Traversal Using Relay NAT(TURN)
•NAT-TNegotiation of NAT-Traversal in the IKE
•Teredo tunnelinguses NAT traversal to provideIPv6connectivity.
•Session Border Controller(SBC)
•UDP打洞(UDP hole punching)
•TCP打洞(TCP hole punching)
•ICMP打洞(ICMP hole punching)
NAT穿透基於NAT控制
•Realm-Specific IP(RSIP)
•MiddleboxCommunications(MIDCOM)
•SOCKS
•NAT Port Mapping Protocol(NAT PMP)
•Internet Gateway Device(IGD)協定,由通用即插即用(UPnP)論壇所定義。
•Application Layer Gateway(ALG)
NAT穿透整合技術
•Interactive Connectivity Establishment(ICE)
University research papers
•Cornell University - Characterization and Measurement of TCP Traversal through NATs and Firewalls
•Columbia University - An Analysis of the Skype Peer-to-Peer Internet Telephony
•Peer to peer communication across Network Address Translators (UDP Hole Punching)
•Internet By All Means - An article on how to maximize your chances to get around firewalls
用途
當前的Internet面臨兩大問題,即可用IP位址的短缺和路由表的不斷增大,這使得眾多用戶的接入出現困難。
使用NAT技術可以使一個機構內的所有用戶通過有限的數個(或1個)合法IP位址訪問Internet,從而節省了Internet上的合法IP位址;另一方面,通過地址轉換,可以隱藏區域網路上主機的真實IP位址,從而提高網路的安全性。
NAT術語
在NAT中,有4個地址術語是必須正確理解的,它們是Inside Local、Inside Global、Outside Local和Outside Global。
在這些術語中,Inside(內部)是指那些由機構或企業所擁有的內部網路,這些網路上的主機通常分配了私有地址。這些地址不能直接在Internet上進行路由,從而也就不能直接用於對Internet的訪問,必須通過網路地址的轉換,以合法IP的身份來訪問Internet。前者即InsideLocal地址。後者則為Inside Global地址。Local(本地)的地址是不能在Internet上通信的IP位址;Global(全局)的地址是能在Internet上通信的地址。Outside(外部)是指除了我們考察的內部網路之外的所有網路。有了對Inside、Outsider Local和Global4個詞的解釋,讓我們來看一看4個地址的定義。
●Inside Local Address(內部本地地址)
指一個網路內部分配給網上主機的IP位址,此地址通常不是Internet上的合法地址,即不是網路信息中心 (NIC)或Internet服務提供商(ISP:internet service provider)所分配的IP位址。
●Inside Global Address(內部全局地址)
用來代替一個或者多個內部本地IP位址的、對外的、Internet上合法的IP位址。
●Outside Local Address(外部本地地址)
一個外部主機相對於內部網所用的IP位址。此地址需要是Internet上合法的地址,但是從內部網可以進行路由的地址空間中進行分配的。
●Outside Global Address(外部全局地址)
由主機擁有者分配給在外部網上主機的IP位址。此地址是從一個從全局可路由的地址或網路空間中分配的。
相關術語
靜態內部 源地址轉換
所謂靜態內部源地址轉換是指將一個內部本地的IP位址轉換成為惟一的內部全局地址,即私有地址和合法地址之間的靜態一一映射。這種轉換通常用在內部網上的主機需要對外提供服務(如Web、E-mail服務等)的情況下。
動態內部源地址轉換
在動態內部源地址轉換的方式下,一組內部本地地址與一個內部全局地址池之間建立起一種動態的一一映射關係。這種地址轉換形式下,內部主機可以訪問外部網路,外部主機也能對內部網路進行訪問,但必須是在區域網路IP位址與內部全局地址之間存在映射關係時才能成功,並且這種映射關係是動態的。
復用內部全局地址
Cisco路由器可以把內部全局地址進行復用性的轉換,從而實現內部本地地址對內部全局地址的多對一的映射。地址復用被啟用時,路由器在高層協定(如TCP或UDP連線埠號)維持有關的信息,將全局地址轉換為本地地址。當多個內部本地地址映射到同一個全局地址時,連線埠號將用來區別不同的本地地址。復用內部全局地址的技術也被稱為PAT(Port AddressTranslation。連線埠地址轉換)。