穿透方案

1        摘要

本檔案描述了整個ECP系統的穿透解決方案,包括原CyberPhone中用到的UDP穿透技術,和ECP中將要用到的轉發技術及隧道技術,作為通訊開發部和其他相關人員參考。

 

2        正文

ECP是一個建立在Internet上的企業通訊平臺。一般情況下,Sever端架設在公網上,Client端可以位於不同的區域網內部,如圖所示:

由於不同區域網中的Client端不能直接互相訪問,因此就需要採用一些方法進行間接訪問。目前,可用的技術有:

1.          UDP穿透,原CyberPhone中用到的技術,與NATProxy的特性密切相關。

2.          UDP轉發,解決對稱型NAT無法穿透的問題。

3.          TCP轉發,解決不開放UDP端口的情況。

4.          HTTP隧道轉發,解決只開放Web代理的情況。

 

3        背景知識

由於穿透技術與NATProxy的特性密切相關,下面先作一個簡單介紹。

 

3.1      NATProxy簡介

網路位址轉換(NAT, Network Address Translation),用以轉換對外真正IP位址與區域網路內部的虛擬IP位址。NAT至少提供以下兩個優點,一是解決合法IP位址不足的窘境,二是隱藏內部的IP位址,保護內部網路的安全。一般NAT應能提供一對一與多對一的IP位址轉換。

應用程式代理(Application proxy)。所謂應用程式代理是在防火牆上執行的一種軟體,用以模擬網路連線的來源和目的地兩端,每一種不同的網路應用程式(如HTTPFTPTELNETSMTPPOP3等)都有其代理程式來模擬其網路協定。由於應用層代理防火牆架設於網路架構OSI七層中之第七層(Application layer),因此可以針對通過防火牆的網路傳輸活動作更詳細的檢查與紀錄,例如透過POP3 proxy可以控制收件之信件大小或拒絕來源位址假冒之信件。

 

3.2      NATPROXY的多樣性

為瞭解決網路安全性和 IP 日益短缺的問題,網路上多採用NAT(網路址映射)Proxy(代理伺服器)NAT是將多個內部址映射爲少數幾個甚至一個廣域網位址,同時它還起到了隱藏內部網絡結構的作用,具有一定的安全性NAT可以通過Router配置也可以通過軟體實現Proxy基於應用級別的,其接受外來的應用連接請求,進行安全檢查後,再與被保護的網路應用伺服器連接,使得外部服務使用者可以在受控制的前提下使用內部網路的服務,另外內部網路到外部的服務連接也可以受到監控,Proxy亦可以採用NAT方式

由於NATProxy的具體實現沒有規範可循,故在具體實現細節上有著這樣和那樣的不同。比如使用不同的廠商的Router配置出的NAT會有些差異,大致可分為:

全通型NAT

位址受限型

埠受限型

    對稱型

上述NAT實現原理不盡相同﹐不可能有通用的穿透的方法。

 

3.2.1  穿透普遍原理

NATProxy的穿透原理如上圖所示。

首先,由內部電腦綁定一個端口(10.0.0.3:1049)向外部電腦(128.32.32.68:80)發送一個數據包。

數據包經過NATProxy時,NATProxy將數據包的源位址與源端口修改為NATProxy的外部IP位址以及端口(10.0.0.3:104924.1.70.210:40960)。同時,在NATProxy上添加一條紀錄(10.0.0.3:1049  10.0.0.1:4056 24.1.70.210:40960  128.32.32.68:80),保存內部電腦端口與映射IP端口以及目標IP端口之間的關係。然後,將此數據包發送給目標機器。

目標電腦接收到數據包後,可由數據包中解析出源位址與源端口(24.1.70.210:40960)。然後用接收的端口發送數據到源位址與端口(24.1.70.210:40960)。

數據包到達NATProxy後,NATProxy從數據包中獲得源IP與端口以及目標IP及端口(128.32.32.68:80  24.1.70.210:40960)。從表中查找,得到相應紀錄(10.0.0.3:1049   24.1.70.210:40960  128.32.32.68:80),NATProxy將數據包的源位址與源端口修改為NATProxy的內部IP位址以及端口(128.32.32.68:8010.0.0.1:4056),將目標位址與端口修改為內部電腦的IP與端口(24.1.70.210:4096010.0.0.3:1049),然後,將數據發給內部電腦。

這樣,通過發出,發回來的方法,由內部電腦發起,外部電腦響應,完成了ProxyNAT的穿透。

 

3.3      各種類型NATProxy的特性

根據NATProxy映射端口與返回判斷的不同處理,分為全通型、位址受限型、埠受限型、對稱型。具體特性說明如下:

3.3.1  全通型

全通型的特點是:內部的同一IP與同一端口(Host A),無論發送給外部任何IP與端口(Host B Host C),均映射成為同一個IP與端口,且,外部IP與端口(Host B Host C)均能從映射的外部端口發送數據進入內部。

此種類型安全級別最低。

3.3.2  位址受限型

位址受限型的特點是:內部的同一IP與同一端口(Host A),無論發送給外部任何IP與端口(Host B Host C),均映射成為同一個IP與端口,且,外部IP與端口(Host B Host C)僅有由內部發送過數據的IP(Host B)能從映射的外部端口發送數據進入內部。即由外部發送到NATProxy的數據,僅僅對源位址進行檢查。

此種類型安全性較全通型有所提高。

3.3.3  埠受限型

埠受限型的特點是:內部的同一IP與同一端口,無論發送給外部任何IP與端口,均映射成為同一個IP與端口,且,外部IP與端口僅有由內部發送過數據的Port能從映射的外部端口發送數據進入內部。即由外部發送到NATProxy的數據,僅僅對源IP進行檢查。

此種類型安全性較全通型有所提高,但比位址受限型低。

3.3.4  對稱型

對稱型的特點是:內部的同一IP與同一端口,發送給外部不同的IP位址與端口,在NATProxy上映射的IP位址與端口均不相同,且,外部IP與端口僅能由與之對應的NATProxy的外部端口發送數據進入內部。

此種類型安全性最高,且因此原CyberPhone無法對此類NATProxy進行穿透。

為了加強安全型,對於某一個NATProxy,它可能會同時有多種類型的特性。

4        UDP穿透

UDP穿透是原CyberPhone中用到的技術,與NATProxy的特性密切相關。

4.1      CP通話獲得端口方法

由於CyberPhone目前無法穿透對稱型,以下的方法是針對前三種類型實現的穿透。

現有的CyberPhone穿透辦法,主要是利用CyberPhone的伺服器來或得使用者端在NATProxy上映射的端口。具體實現如下:

在通話建立過程中,每個使用者端均用自己的接收和發送Socket向伺服器的指定端口發送數據。伺服器收到數據後,記下這些IP位址和端口。然後,使用者端從目錄伺服器獲得對方的外部IP位址與端口。接著用自己的接收Socket向對方的發送Socket的外部映射的IP位址和端口發送數據,建立對方的發送Socket到自己的接收Socket之間的通路。最後,由自己的發送Socket向對方的接收Socket的外部IP位址和端口發送數據。

通過以上的處理,CyberPhone就可以完成兩個區域網、區域網與廣域網、廣域網與廣域網之間的通訊。

5        UDP轉發

UDP轉發是為瞭解決上述對稱型NAT無法穿透的問題。

5.1      UDP轉發過程

Client B首先向轉發Server發一個偵測包thruServer紀錄下源地址即B的外部地址和端口。然後,Client AServer請求B的外部地址(req)Server根據剛才的紀錄查找到B的地址信息並返回給A(ret : ip, port)A獲得B的地址後在媒體數據包頭中封裝此地址,請求Server轉發給B,從而實現媒體數據的轉發。

 

6        TCP轉發

TCP轉發是為瞭解決NATProxy不提供UDP端口的情況。

如果企業的安全原則較嚴格,封閉了所有的UDP端口,那這種情況下只能使用TCP轉發。

 

7        HTTP隧道轉發

HTTP隧道轉發是為瞭解決NATProxy只提供Web代理的情況。

7.1      HTTP隧道簡介

從目前來看,各企業、政府機關、學校等用戶在網路規劃過程中越來越重視網路的安全性,防火牆已成為必不可少的安全設備。由於在防火牆的應用中,只允許開放少數埠和協定,而大部分的埠和協定都是要被關閉的,以保證不受各種侵擾,往往有的防火牆只開放諸如HTTP 80上網埠等少數幾個埠,其餘埠基本上是關閉的,作爲網路多媒體通信應用的代表,軟體視頻會議系統會涉及到音頻、視頻、資料、控制等諸多資訊的傳輸,這些資料的傳輸通常會用到多個埠和協定以保證即時通信效率,如TCP埠、UDP埠等,這樣就和防火牆行成矛盾,如果不按照這些産品的要求來開放埠,則這個産品就無法投入使用,而如果按照這些埠要求來設置,則防火牆會漸漸成爲千瘡百孔的篩子,失去了過濾和保護的意義。

    所謂的HTTP隧道可以被看作是一種利用已建立好的HTTP通信線路、並在它之內創建一個次級協議來執行特殊任務的方法。以HTTP隧道技術爲核心的防火牆穿透策略,可以保證了用戶無論是通過什麼樣的代理服務器或防火牆,只要能夠訪問網絡(最嚴格情況下只開放一個上網端口)就能夠實現和外界的通訊。

7.2      HTTP隧道原理

Client上起http-tunnel client端,讓它偵聽本機的一個不被使用的任意指定端口,如1234,同時將來自1234端口上的數據指引到遠端(Server)的80端口上(防火牆允許通過),然後在Server上起一個http-tunnel server端,同樣掛接在80端口上,同時指引80端口的來自Client數據轉發到本機的telnet服務端口23,這樣就建立基本的隧道功能 現在在Client使用telnet本機端口1234,根據剛纔的設置數據包會被轉發到目標端口爲80Server,因爲防火牆允許通過80端口的數據,因此數據包暢通的穿過防火牆,到達Server。此時Server80端口偵聽的進程收到來自Client的數據包,會將數據包還原,再交還給telnet進程。當數據包需要由ServerClient返回時,將由80端口再回送,同樣可以順利的通過防火牆。

 

圖解:

ClientServer發送POST命令,Server返回OK後,HTTP隧道建立成功。此後Telnet返回的數據都通過這個HTTP隧道返回給Client

 

起了1234偵聽端口,並用Telnet命令登陸遠端Server

起了80端口和Telnet服務

只開了80端口的防火牆

所有的數據進出都走80

  

8        結論

ECP目前的穿透方式已經沒有了原CP的兩層穿透問題,當兩層穿透不能通訊時ECP會採用伺服器轉發機制,這樣兩層就變為了一層。HTTP隧道技術解決了有防火牆的企業使用ECP的問題,我們的目標是隻要企業內部能上Internet就可以正常使用ECP

真實的網路環境不會像我們想像的這樣簡單,所以我們現有的穿透方式有待進一步的測試驗證。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章