Session Traversal Utilities for NAT Traversal Using Relay NAT 資料傳輸協定 Cisco STUN TURN TCP UDP 網路 IP 路由

明辨STUN/TURN協定 輕鬆跨越NAT建立連線

2017-05-12
先了解何謂靜態NAT轉換及動態NAT轉換,然後明瞭STUN協定與NAT的關聯,STUN協定如何運作,以及NAT資料傳輸有那些限制,並認識TURN協定,應該就可以懂得STUN協定與TURN協定的來龍去脈以及使用時機。

資料傳輸協定TURN的全名是Traversal Using Relay NAT,允許在TCP或UDP的網路環境中跨越NAT或是防火牆。TURN協定和STUN協定類似,都是可以讓處於NAT環境中的各個用戶端了解自己通往外部網路之後在外部網路的位址,甚至還能夠知道目前的NAT是使用怎樣的NAT種類。

而應用程式一旦知道這樣的資訊之後,就可以直接用這個外部公開的IP位址與其他外部的各種用戶端聯繫,而不是使用私有IP位址。舉例來說,廣為人知的SIP協定就是使用UDP協定來傳輸資料。

不過,一般使用SIP協定的用戶端會處於NAT網路環境內,此時STUN協定或TURN協定就可以發揮它們的效用。所以,這篇文章將會介紹TURN協定,以及說明其所運行的NAT網路環境。

在此,大略說明一下STUN和TURN的運作環境。STUN和TURN都是網路協定,運作於網路七層架構的第四層應用層。STUN是Session Traversal Utilities for NAT的縮寫,而TURN的全稱則為Traversal Using Relay NAT。如同其名,它們與NAT有關,是用於NAT環境中的工具。而什麼是NAT?在了解STUN之前,先來看看什麼是NAT?

了解NAT

NAT是Network Address Translation的縮寫。NAT是用來將已經註冊的IP位址轉換到私有的IP位址,簡化IP位址的管理,以便讓企業內部的網路連到外部的網際網路,而且甚至不需要有註冊的子網路。NAT的做法,大致上來說,是在IP協定封包的Header中,將Network Address的資料做置換的動作。以下就來看NAT如何做到這些事情。

私有IP位址

在開始介紹NAT之前,還是先說明一下何謂私有IP位址(Private IP Address)以及私有IP位址的範圍。

目前IPv4的規格與技術已經被使用很多年,原本所設計的IP位址個數也逐漸不敷使用,當初設計IPv4時,應該很難想像到網路普及如此迅速,而IP位址的使用量會如此廣泛。所以,為了更有效地使用IP位址,於是出現了私有IP位址的設計,私有IP位址被定義在RFC 1918規格之中,當電腦不需要存取網際網路時,可以只用私有IP位址。私有IP位址並不需要註冊,因為私有IP位址只有內部網路才可以使用。私有IP位址的IP範圍如表1所示。

表1 私有IP位址的IP範圍

一般公司內部的網路都是分配私有IP位址給內部的電腦,不僅如此,若家裡有架設自己的無線網路基地台,這個基地台也會分配私有IP位址給每一台連上網路的筆記型電腦,而這些私有的IP位址在外面的網際網路中是「不能見人」的,也因為如此,各個內部網路(Intranet)就可以重複使用這些私有IP位址範圍,以增加IP位址的使用性。

Link-Local位址

另外還有一段私有IP位址是被定義在RFC 3330和RFC 3927文件內,這段私有IP位址稱為Link-Local Addresses。設計這段私有IP位址的目的在於,希望在沒有DHCP伺服器的情況下還能夠提供IP位址。Link-local Addresses的範圍在於:


但是,在這段範圍內,並不是所有的位址都可以使用,目前169.254.0.0/24和169.254.255.0/24被保留起來,以便未來可以提供不同的用途。

如果是使用Windows 9x作業系統平台(不包含Windows NT作業系統),就不能經由DHCP伺服器來取得IP位址,這個時候就會隨意從169.254.1.0~169.254.254.255這個範圍之間取一個IP位址來使用。但是,這樣隨意取用的作法很有可能會造成IP衝突,若有IP衝突就只能靠自己去處理了。Link-local Address比私有IP位址擁有比較多的限制,而這些限制都被定義在RFC 1918文件內。

另外還有一點必須注意的是,Link-local Address所發送出來的網路封包,以及要送往Link-local Address的網路封包都不能經過路由器,這個限制被定義在RFC 3927。有興趣的話,可以參考RFC 3927與RFC 1918文件。

剖析NAT運作原理

介紹過私有IP位址以及Link-local位址之後,應該慢慢就能夠了解NAT的用途。接著,先來看看什麼叫做NAT。NAT是用來讓私有的IP位址能夠存取外面的網際網路,而不必經過任何的註冊IP位址的動作。

剛剛介紹過私有IP位址,如同一般所知,私有IP位址沒有辦法直接存取到外面的網際網路,所以若要連到網際網路,勢必要使用已經註冊的公有IP位址(Public IP Address),而NAT技術就是幫忙做公有IP位址與私有IP位址之間的轉換動作,讓使用私有IP位址的電腦也能夠方便地存取外面的網際網路。

在Cisco設備中,NAT會被應用在Cisco路由器上。一般的作法是,把Cisco路由器設備同時連接兩段網路,一段是內部網路,另一段則是外部網際網路。若內部網路中有任何電腦想發送網路封包到外部的網際網路,當封包流過Cisco路由器設備時,Cisco路由器設備就會做NAT位址轉換的動作,然後再傳送封包到外部網際網路之中。

如果還想要再簡單一些的話,可以透過適當的設定,讓外部網際網路只使用一個公有IP位址,但卻給整個內部網路所有的電腦使用。這樣的作法也可以隱藏內部網路各電腦的IP位址,而達到一定程度的安全性。

了解NAT技術用語

在NAT的敘述中,所謂的「內部網路」(Inside Network)指的是需要經過位址轉換的網路區域,一般而言,內部網路都是像公司內部的網路,或是某組織架構中的網路,是沒有直接暴露在網際網路上的網路環境。而所謂的「外部網路」(Outside Network)指的是其他的網路區段,而在外部網路中,是不需要做位址轉換的,也就是說,外部網路上的IP位址都會是公有IP位址,一般而言,外部網路指的通常都是網際網路或是直接暴露於網際網路的網路區域。

接下來,介紹四種不同的位址種類稱呼,分別是:

‧Inside Global位址

‧Inside Local位址

‧Outside Global位址

‧Outside Local位址

Inside Global位址是指經由Network Information Center或是Server Provider所分派的邏輯IP位址,是給內部網路的電腦所使用。Inside Local位址是內部網路中所取得的IP位址,但卻不是透過Network Information Center或Service Provider所提供的IP位址。

Outside Global位址是網際網路中實際有效而且能被繞送的IP位址,是給外部網際網路電腦使用的。而Outside Local位址則是外部網際網路中的電腦在內部網路中所運行的IP位址。

簡單來說,Inside與Outside是用來反映出電腦實際所在的位置,若是內部網路就是Inside,若位於網際網路則是Outside。而Local和Global則是指所使用的IP位址是公有IP位址還是私有IP位址,若是公有IP位址,就是Global,如果使用私有IP位址則屬於Local。

認識NAT運行種類

常用的NAT運行方式有三種,分別是靜態(Static)NAT、動態(Dynamic)NAT以及Overlapping。

靜態NAT是指將私有IP位址對應到公有IP位址,並允許內部網路的電腦使用公有IP位址連線到網際網路,而這裡所使用的對應方式是採用一對一的方式,也是最基本的NAT。而動態NAT方式是將一個私有IP位址與一群公有IP位址做對應。Overlapping則與動態NAT剛好相反,也就是將多個私有IP位址與單一公有IP位址做對應。


追蹤我們Featrue us

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

我知道了!