日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VOIP穿越防火墙详解

發布時間:2023/12/9 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VOIP穿越防火墙详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

VoIP 剛推出之初期,受到各種因素之干擾,以致非常難用,需要經過繁復的設定才能使用。 最常見到的是某一邊的使用者的電腦設定有問題導致單邊沒有聲音,因此收話發話兩端都必須是 電腦高手才能順利進行雙方通話。另外一個很大的限制是,收話發話兩端都必須填入所用電腦的 IP地址, 才能讓兩方相連。對于在家中利用撥接或ADSL設備上網或在防火墻后面的使用者而言, 這是一項難以達成的任務,無論使用者或電腦本身都難以輕易獲知其對外的IP位址。 這種現象一直等到Skype 推出之后才獲得大幅改善,大大提高了 VoIP的可用度,使得一般的電腦使用者也可以很輕易的使用VoIP。即使使用者是在防火墻 之后,VoIP 也可以順利運作,這是歸功於「VoIP穿越NAT 防火墻」技術。

一、NAT以及防火墻介紹

NAT 是一種將內部IP 與外部IP互相轉換之技術。其起源是因為 IPv4 位址稀少,而很多企業或網路公司在擁有少數IP 地址而公司內部確有太多電腦時 而采用共用IP 的解決方法,讓一個IP 地址給多個電腦使用。如今最常見的 IP 分享器或無線區域網路Access Point 都有NAT 的功能。使用者利用 ADSL上網 后,拿到一個 IP 地址,而IP 分享器或WLAN AP 則將一組專供內部使用的私有IP , 通常是192.168.0.x,分配給所有內部電腦,內部每部電腦擁有一個192.168.0.x的IP 位址, 但WLAN AP 對外卻只有一個由網路公司賦予的IP 位址。 通常NAT 是將每一部電腦所用的 (IP, port number), 本文稱為內部位址,對應到 (共用IP, port number),本文稱為外部位址, ?而 NAT 負責將進出封包的表頭進行轉換使得內部電腦可以 透通的與外部網絡連線溝通。

Firewall的基本策略:?
? ? Firewall會判斷所有的包是來自內部(Inside)還是外部(Outside)。?
? ? 允許所有來自inside的包發出去。?
? ? 允許來自Outside的包發進來,但這個連接必須是由Inside發起的。?
? ? 禁止所有連接由Outside發起的包發進來。?
? ? firewall會允許幾個信任的outside主機,他們可以發起建立連接,并發包進來。

  所有NAT和Firewall都是對于TCP/IP層以下進行處理和過濾的,而SIP應用的地址是在應用層。所以必須采用其他的途徑來解決這一問題。

解決方案
針對不同的NAT類型,可以有不同的解決方案。

防火墻/NAT的種類

防火墻通常整合在NAT 裡面,根據所用的防火墻技術,NAT 可以分成 幾類。主要分為如下四類:

下面說的地址表明IP,位址表明IP和Port

1、Full Cone

????????只是單純的做位址轉換,并未對進出的封包設限。

???????? 當一臺私網內的主機向公網發一個包,其本地地址和端口是{A:B},NAT會將其私有地址{A:B}轉換成公網地址{X:Y}并綁定。任何包都可以通過地址{X:Y}送到該主機的{A:B}地址上,NAT會將任何發送到{X:Y}的incoming包的地址{X:Y}轉換成{A:B}。

其原理及運作方式如下圖所示:

圖1:原理圖

圖2:示例圖
????

?2、Restricted Cone

????????對于封包進出稍加限制。從內部送出之封包的目的地 IP 位址會被記住。只有這些曾經收過這些封包的地址可以送封包進入 NAT。由其他地址送進來的封包,都會被檔下。換言之, 只有收過NAT 內部送來的封包的地址才能將封包送入 Restrict Cone NAT 內。

????????當一臺私網內的主機向公網發一個包,其本地地址和端口是{A:B},NAT會將其私有地址{A:B}轉換成公網地址{X:Y}并綁定。任何包都可以通過地址{X:Y}送到該主機的{A:B}地址上,但是,NAT只為第一個發往{X:Y}的包綁定成{A:B}|{X:Y}<->{C, any},其中{C:any}是那個包的源地址和任意端口。也就是說,只有來自地址為C的包才能于主機{A:B}通信。

其原理及運作方式如下圖所示:

?3、? Port Restricted?Cone NAT

????????Port Restricted Cone 對于封包進出比Restricted Cone 增加了一個限制, 從內部送出之封包的目的地的IP 位址及 Port 會被記住。 由外部送進來的封包,除了由那些接收過內部所送出的封包的IP 位址及 Port 所送來的封包之外,都會被檔下。換言之, 只有收過NAT 內部送來的封包的地址及 Port 才能將封包送入 Restrict Cone NAT 內。

? ? ? ? 和 Restricted Cone 的區別是 Restricted Cone 只綁定incoming packet 的IP地址,而Port Restricted?Cone 會綁定incoming packet的IP地址和端口。

其原理及運作方式如下圖所示:

??

?4、? Symmetric

????????Symmetric 在四種Cone NAT中最為嚴謹。 前三種NAT在做位址轉換時,無論封包是送往何處, NAT內部同一內部位址 都對應到同一個外部位址,但在Symmetric NAT內則每一內部位址對不同的目的地, 都對應到不同的外部位址。Symmetric NAT只允許先由私有網域內的使用者發送封包到網際網路中的使用者 可以回傳封包。

隨著網路安全的要求越來越高,使用此種NAT有越來越多的趨勢。

當一臺私網內的主機向公網發一個包,其本地地址和端口是{A:B},外部位址為{C, D}。NAT經過公網{X:Y}綁定后變為{A:B}|{X:Y}<->{C, D}。如果再發一個包,但是外部位址為{E, F},NAT會經過另外的公網{Q:P}綁定后變為{A:B}|{Q:P}<->{E, F}。

其原理及運作方式如下圖所示:

?NAT?造成的問題

????????SIP是在當今的網際網絡里最常使用的VoIP通訊協議。 使用者端(CPE)所連接的Agent 稱為 User Agent (UA), 使用者端所需的軟體功能都建置在UA 中, ?網路上并建置有各種伺服器,提供各式各樣的服務, 共同建構出一個運作順暢的電話網路。我們以SIP 為例說明NAT 防火墻 對VoIP通訊協議造成的問題。為方便說明起見,本文將以SIP作為范例說明 各種VoIP技術。
在SIP協議中,UA必須主動向registrars伺服器註冊,讓register伺服器掌握UA 動態。 要建立通話session時,發話端 UA 主動向 proxy servers 發送INVITE請求,proxy servers會轉發 INVITE請求。 而這兩種自防火墻外所發出的請求會被防火墻所阻擋。 所以為防止轉發的INVITE請求會被阻擋,register 伺服器不能放在防火墻之內。但UA 就比較麻煩了,難免會有相當數量的VoIP使用者是位于防火墻之內的,他們可以不受干擾的主動發話向外連接。不過,他們卻很難接收他人的呼叫。 換言之,如果沒有適當的解決方案,位于防火墻之內的VoIP使用者,只能對外發話,卻無法接受電話。

現有穿越防火墻/NAT技術介紹

Universal Plug and Play (UPnP,即插即用)

Universal Plug and Play(UPnP)是微軟公司提出的協定,其目的是要簡化家庭或企業中智慧設備的連網過程. 使用TCP/IP協定透過網路自動彼此連接在一起, 而且連接過程中無需用戶的參與和使用中央伺服器, UPnP設備可以自動探索網路并配置網路地址設定。 其穿越NAT的方式如下:

1)VoIP應用程式先對是否位于一個具有UPnP能力的NAT設備進行檢測。
2)應用程式將獲得共用的Public IP地址及Port,為NAT做Signaling及media資訊流使用。 ?
3)VoIP使用端就可以將此資訊加入VoIP signaling建立通話。
此通話建立后,使用獲得的外部位址(Public IP地址及Port),做點對點的傳輸。

?問題:

????????NAT及VoIP Client (UA) 必須支援UPnP, 但UPnP尚未得到所有的UA及NAT的支援 (要獲得全部UA及NAT廠商之支援,絕非易事)。 尤其是NAT的問題,基于安全性的考慮,幾無NAT 愿意支援 UPnP。

STUN

STUN (Simple Traversal of UDP Through Network Address Translators - RFC 3489 ), 是最著名和最常被使用的VoIP穿越NAT防火墻的解決辦法。應用程序(即STUN CLIENT)向NAT外的STUN SERVER通過UDP發送請求STUN 消息,STUN SERVER收到請求消息,產生響應消息,響應消息中攜帶請求消息的源端口,即STUN CLIENT在NAT上對應的外部端口。然后響應消息通過NAT發送給STUN CLIENT,STUN CLIENT通過響應消息體中的內容得知其NAT上的外部地址,并將其填入以后呼叫協議的UDP負載中,告知對端,本端的RTP接收地址和端口號為NAT 外部的地址和端口號。由于通過STUN協議已在NAT上預先建立媒體流的NAT映射表項,故媒體流可順利穿越NAT。

方式如下:

a)???????? 客戶端A向STUN Port發送Binding請求(圖中綠色部分)

b)????????STUN服務器接收到客戶端A的Binding請求,它能得到該請求的源地址與端口(該地址和端口就是經過NAT映射過的),將該地址和端口記為Server Reflexive Address。

c)???????? STUN服務器發送response響應,在response響應中攜將Server Reflexive Address經過異或后填入XOR-MAPPED-ADDRESS屬性。

d)???????? 客戶端A接受到STUN服務器的response后,就知道了自己的外網地址(反射地址,Server Reflexive Address)。

缺點:

STUN無法穿透Symmetric NAT, 而偏偏這種NAT已經成為NAT市場上的主流。

UA支持STUN CLIENT的功能

優點:

優點是無需現有NAT/FW設備做任何改動。可在多個NET串聯的環境中使用

TURN

????????TURN方式解決NAT問題的思路與STUN相似,也是私網中的VOIP終端通過某種機制預先得公網上的服務地址(STUN方式得到的地址為出口NAT上外部地址,TURN方式得到地址為TURN Server上的公網地址),然后在報文凈載中所要求的地址信息就直接填寫該公網地址。

工作原理如下:

?a)???????? 客戶端A向STUN Port發送Allocate請求(圖中綠色部分)

?b)????????STUN服務器接收到客戶端A的Allocate請求,服務器一看是Allocate請求,則根據relay端口分配策略為A分配一個端口。

?c)???????? 服務器發送response成功響應。在該response中包含XOR-RELAYED-ADDRESS屬性。該屬性值就是A的relay端口的異或結果。

?d)???????? 客戶端接收到response后,就知道了自己的relay地址。該relay地址是個公網地址,可以看作是客戶端A在公網上的一個代理,任何想要聯系A的客戶? ? ???端,只要將數據發送到A的relay地址就可以了。

交互轉發流程如下:

????????TURN的全稱為Traversal Using Relay NAT,即通過Relay方式穿越NAT.TURN應用模型通過分配TURN Server的地址和端口作為私網中VOIP終端對外的接受地址和端口,即私網終端發出的報文都要經過TURN Server進行Relay轉發。TURN Server控制分配地址和端口,能分配RTP/RTCP地址對(RTCP端口號為RTP端口號加1)作為私網終端用戶的接受地址,避免了STUN方式中出口NAT對RTP/RTCP地址端口號的任意分配,使得客戶端無法收到對端發來的RTCP報文(對端發RTCP報文時,目的端口號缺省按RTP端口號加 1發送)。

優點:

擁有STUN的所有優點,適用于所有NAT類型,包括Symmetric,支持基于TCP應用。

缺點:

需要VOIP終端支持TURN Client,所有報文都必須經過TURN Server轉發,增大了包的延遲和丟包的可能性。大量轉發會帶來部署成本問題。

ALG (Application Layer gateway)

ALG可以是單獨的連接于外網和內網之間的設備,也可以是內置于防火墻內的插件。當FW/NAT發現外網呼叫信令為SIP時,將其轉發到ALG(應用層網關),通過ALG建立起內網偽地址終端與外網終端的通信連接。

經過NAT轉換后,到外網SIP包中via,contact,ower/creator,connection information均需要改為NAT外網IP。

SIP ALG的實現主要是對Request、Response消息進行解析、修改、轉發。

對Invite消息的修改

1)對Via、From、CALL-ID、Contact頭域的處理

ViaVia頭域是被服務器插入request中,用來檢查路由環的,并且可以使response根據via找到返回的路Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
From表示請求的發起者From: sip:user1@domain.com;tag=49583
Call-ID由本地設備(Client)生成,全局唯一,每次呼叫這個值唯一不變Call-ID: asd88asd77a@1.2.3.4
Contact包含源的URI信息,用來給響應方直接和源建立連接用Contact: sip:192.168.100.1:1111

對SDP的修改,則是針對 ”o" "c" "m" 三個字段進行的

缺點:

????????使用ALG需要對現有設備升級改造。因為ALG 不能識別加密后的報文內容,所以必須保證報文采用明文傳送,這使得報文在公網中傳送時有很大的安全隱患。

MidCom(Middlebox Communications)

MIDCOM的基本框架是采用可信的第三方(MIDCOM Agent)對Middlebox (NAT/FW)進行控制,VOIP協議的識別不由Middlebox完成,而是由外部的MIDCOM Agent完成,因此VOIP使用的協議對Middlebox是透明的 .

由于識別應用協議的功能從Middlebox移到外部的MIDCOM Agent上,根據MIDCOM 的構,在不需要更改Middlebox基本特性的基礎上,通過對MIDCOM Agent的升級就可以支持更多的新業務,這是相對NAT/ALG方式的一個很大的優勢。

在VOIP實際應用中,Middlebox功能可駐留在NAT/Firewall,通過軟交換設備(即MIDCOM Agent)對IP語音和視頻協議(H323、SIP、MGCP/H248)的識別和對NAT/Firewall的控制,來完成VOIP應用穿越 NAT/Firewall .在安全性上,MIDCOM方式可支持控制報文的加密,可支持媒體流的加密,因此安全性比較高。

原文參考1鏈接:https://blog.csdn.net/hwz119/article/details/3995691

原文參考2鏈接:https://blog.csdn.net/iteye_11002/article/details/81995206

原文參考3鏈接:https://blog.csdn.net/tanningzhong/article/details/80595929

總結

以上是生活随笔為你收集整理的VOIP穿越防火墙详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。