穿透方案

来源:互联网 发布:ubuntu命令行怎么打开 编辑:程序博客网 时间:2024/04/29 08:47

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

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

 

原创粉丝点击