• 沒有找到結果。

第二章、 文獻探討

2.3. SIP穿越NAT

2.3.3. SIP穿越NAT的解決方法

A. 在RFC 3261 [1] 定義了received與rport二種欄位,當收到的封包來自於 NAT、防火牆後,SIP伺服器必須填入二欄位於Via中,並且需要修改 Contact或SDP欄位,而最後傳送的路徑必需與received與rport資訊相 同,才能讓訊息正確的傳送到目的端,此方式是由SIP伺服器進行訊息 的修改。

B. 藉由其它協定或機制的幫助才可解決,以下列出三種藉由其它協定穿越 NAT 的解決方法。

2. Simple Traversal of UDP over NAT (STUN)

STUN [8] 提供客戶端用於探測自己是否位於NAT後,並查出所屬NAT的型 態、對外IP位置與所使用的連接埠,此法有效提供SIP客戶端用來修改Via、Contact 與SDP等相關欄位值,讓SIP伺服器在無需更改任何協定欄位時就可正確的與客 戶端溝通。

如圖 9為STUN網路架構圖,客戶端在傳送封包前首先會向STUN伺服器溝 通,此時STUN伺服器會判斷該客戶端是否位於NAT後,或NAT屬於那種類型,

接著STUN伺服器會告知客戶端所屬的NAT使用的對外IP位置與連接埠,此時客 戶端經由這些資訊改寫SIP協定Via、Contact與SDP裡c等欄位,最後在將改寫過 後的封包送至SIP伺服器,因此能讓SIP和RTP封包能在不更改任何NAT的情況下 就可穿透。

STUN 伺服器必須位於公開網路上,藉由 NAT 後客戶端所傳來的封包來得 知 NAT 所使用的 IP 位置與連接埠,但此架構不可使用於對稱式 NAT 類型,原 因在於不同的目地端對於對稱式 NAT 來說會對映出不同的連接埠,因此客戶端 對於 STUN 伺服器所使用的連接埠將不同於客戶端對於 SIP 伺服器所使用的連接 埠,因此 STUN 伺服器提供給客戶端的資訊將不在有效。

圖 9 STUN [11]

3. Traversal Using Relay NAT (TURN)

TURN [9] 與STUN類似,透過外部TRUN伺服器讓NAT使用者與SIP伺服器 得以正確的傳送封包,但不同的是TURN使用轉送(Relay)的方式來提供NAT的穿 越,也就是所有從NAT內出去的封包都將傳送到TURN伺服器上,在由該伺服器 轉送到其它的位置上,此種方式除了具備STUN的優點外,還解決了STUN無法 穿對稱式NAT的缺陷,而TURN也不限於只能使用在UDP環境下,所有位於NAT 下的使用者都可透過TURN與外部網路溝通。然而TURN最大的缺點就是所有 NAT後的客戶端都透過TURN伺服器進行通訊,因此TURN伺服器所需的網路頻 寬與系統效能會是最大的侷限。

如圖 10為TURN網路環境圖,位於NAT後的客戶端在傳送每一個封包時,

實際上是透過TURN Server進行轉送,而SIP伺服器收到的封包來源將會是TURN 的位置,進而解決對稱式NAT穿越的問題。

圖 10 TURN [11]

4. Application Layer Gateway (ALG)

如圖 11為應用層級閘道器(ALG)網路環境圖,與STUN、TURN運作原理相 同,都是藉由修改NAT或防火牆內使用者的SIP訊息,讓外部伺服器或其它使用 者得知正確資訊,但不同的是ALG是嵌入在每個NAT或防火牆內,因此訊息的修 改是由NAT或防火牆裝置內的ALG機制所處理,截取經由裝置內的封包來判斷是 否屬於SIP訊息,如果是則修改封包後在送出。

此架構好處在於不必另外新增或架設其它的伺服器,使用者也不需支援額外 特定的協定來達到穿越 NAT 或防火牆的功能,ALG 會檢查通過 NAT 或防火牆 的封包,當發現為 SIP 訊息時在作修改的動作,然而缺點在於佈署在使用者前的 NAT 或防火牆都需要支援 ALG 的功能。

圖 11 ALG [11]

相關文件