Network Address Translation Server NAT

NAT穿透技術 從外部直接溝通私有IP

2014-11-26
之前介紹過的STUN技術,事實上就是一種NAT穿透技術,不過現在有非常多不同的NAT穿透技術,沒有一種技術可以運用於所有的NAT環境,因為NAT並不是一種標準。這篇文章將針對多種常見的NAT穿透技術做一個簡介,讓讀者先瞭解有哪些技術可供選擇。
IP位址的轉換過程

先用下面的例子來說明NAT是如何做到內部私有IP位址和外部公有IP位址的轉換,假設網路架構示意圖如圖2所示。在圖2內,中間是一台Cisco路由器設備,同時連接內部網路和網際網路,右邊是網際網路,右下方是網際網路內的其中一台電腦,其IP為140.115.3.1,而左邊是內部網路,分別有個人電腦、伺服器以及PDA各一台,各使用192.168.0.1、192.168.0.2以及192.168.0.3這三個私有IP位址。


▲圖2 網路架構示意圖。

NAT技術將內部與外部的IP位址做對應,詳細設定如表3所示。

表3 內部與外部的IP位址對應

現在,假設伺服器(192.168.02)要傳送網路封包給外面那一台電腦(140.115.3.1),其步驟如下所述:

一開始,伺服器會傳送封包給Cisco路由器設備,此時網路封包的來源端IP位址為192.168.0.2,到目前為止還是使用內部的私有IP位址,而目的地IP位址是140.115.3.1。

接著,Cisco路由器設備收到這個網路封包,現在要轉送網路封包前往140.115.3.1這個目的地位址,但是由於網路封包內的來源端IP位址依然為私有IP位址,這樣的IP位址是不允許在網際網路中使用,不然的話,目的端電腦就沒有辦法回應封包給原本的來源端電腦。因此,Cisco路由器設備必須從對應表中取出192.168.0.2這個Inside Local位址所對應的Inside Global位址,也就是171.69.0.42,並取代網路封包中的來源端IP位址,然後把封包送往目的地。此時,網路封包內的來源端IP位址是171.69.0.42。

目的端電腦收到這個網路封包後,假若需要回傳資料給原本的伺服器,則這台目的端電腦會取出網路封包中的來源端IP位址(171.69.0.42),然後把這個公有IP位址當作目的端IP位址來傳送網路封包。此時,網路封包中的來源端IP位址當然就是140.115.3.1自己這台電腦的位址。

然後,這個網路封包會被中間這台Cisco路由器設備收到,並發現封包中的目的端IP位址是171.69.0.42。為了將封包送到正確的目的地,Cisco路由器設備會到NAT位址對應表中取出171.69.0.42這個Inside Global位址所對應的Inside Local位址(192.168.0.2),並用這個位址當作網路封包中的目的端IP位址,這樣網路封包才能正確無誤地傳送到伺服器手上。

以上就是NAT技術的應用過程,當然有人可能發現到NAT技術會去更改網路封包中的內容,不過只會更改來源端IP位址和目的端IP位址,但網路封包中原本就會被修改的東西還是會被修改,如TTL(Time To Live)值。

NAT穿透技術

NAT穿透技術,英文稱為NAT Traversal,也可以簡稱為NAT-T。如同一開始所提到的,現在有許多不同的NAT穿透技術,但很難說有任何一種NAT穿透技術可以用於所有的NAT網路環境,主要原因是NAT並沒有被標準化。

大部分的NAT穿透技術需要有一個伺服器,而這個伺服器擁有公開並且可以到達的IP位址。至於這個伺服器需要做什麼,各種NAT穿透技術並不太相同,有些NAT技術非常仰賴這樣的伺服器,可能會讓它協助所有的資料通訊,有些則只是需要讓這些伺服器協助建立一開始的連線即可。

這可以考量到底自己所要解決的是怎樣的NAT網路環境,以及是為了什麼需求,不同的方式會有不同的好壞特點,可能是伺服器端或是用戶端的網路速度,又或者是網路頻寬的差異等等。

NAT穿透技術與網路安全環境

大部分可能是中大型的企業環境比較會採用NAT,這也代表有極大的可能性還會有其他安全性的網路環境需要一起考慮。但大部分的NAT穿透技術並沒有將這些環節考慮進來,主要也是因為很難針對這些安全性的設計做特殊處理,所以大多會在防火牆上做設定,好讓NAT穿透技術成為例外情況來處理。

另外就是IPSec(IP Security)的環境,如果想在這樣的網路環境中使用NAT穿透技術,需要在防火牆上實作IKE(Internet Key Exchange)或ESP(Encapsulating Security Payload),或者使用IPSec NAT-T技術。IKE技術使用UDP編號為500的埠,ESP則使用IP編號為50的埠,而IPSec NAT-T採用UDP編號為4500的埠。

事實上,有些比較好的路由器可能已經把這些功能事先實作,通常會稱為IPSec穿透,英文可能是IPSec Pass-through或是IPSec Traversal等等。而對於用戶端而言,若是Windows作業系統,大部分都沒有問題,都是預設就已經是開啟NAT穿透技術的支援,應該只有Windows XP SP2是關閉的,這是基於Windows當時安全性的問題考量,其他的Windows應該都是全部開啟的。

主要的NAT穿透技術

之前筆者曾經介紹過的STURN(Session Traversal Utilities),就是其中一種NAT穿透技術。STUN協定需要遠端在外部網路架設一個STUN伺服器,詳細地說,STUN協定是運作在伺服器與用戶端之間。

STUN協定最初的設計初衷是讓上層的應用程式得知目前的機器是否運作在NAT環境之中,大致上運作步驟如下:

1. 用戶端先發送一個Binding Request封包給STUN伺 服器。
2. STUN伺服器把從伺服器端看到的用戶端IP位址與 埠(Port)的號碼傳回給用戶端,當作是一個success的封包。
3. 最後結果以XOR運算方式來取得。

STUN會與所謂的ICE(Interactive Connectivity Establishment)一起使用。另外,早期1990年代還有SOCKS(Socket Secure)的方式。而與防火牆相關的,還有ALG(Application-Level Gateway),指的是在防火牆設定讓NAT穿透技術可以運作(不受防火牆的阻擋)的元件。家用的路由器大多可能會使用的技術是UPnP IGD方式。

其他比較知名的方式還有TURN(Traversal Using Relay NAT)和SBC(Session Border Controller),以及UDP打洞,英文稱之為UDP Hole Punching。當然,也有所謂的TCP Hole Punching和ICMP Hole Punching等等。在這些方式之中,應該屬STUN比較被廣泛使用。

以下列出一些可能與NAT穿透技術相關的文件供大家參考,如表4所示。

表4 NAT穿透技術相關RFC文件

<本文作者:胡凱智,目前在美商Mozilla擔任全球技術專案總監,曾於趨勢科技任職七年多,有兩年美國矽谷工作經驗,在美國專利局擁有軟體專利。讀者可在其粉絲專頁獲取更多網路知識及交流建議:https://www.facebook.com/khu.page>


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!