VOIP穿越防火墙详解
前言:
VoIP 剛推出之初期,受到各種因素之干擾,以致非常難用,需要經(jīng)過(guò)繁復(fù)的設(shè)定才能使用。 最常見(jiàn)到的是某一邊的使用者的電腦設(shè)定有問(wèn)題導(dǎo)致單邊沒(méi)有聲音,因此收話發(fā)話兩端都必須是 電腦高手才能順利進(jìn)行雙方通話。另外一個(gè)很大的限制是,收話發(fā)話兩端都必須填入所用電腦的 IP地址, 才能讓兩方相連。對(duì)于在家中利用撥接或ADSL設(shè)備上網(wǎng)或在防火墻后面的使用者而言, 這是一項(xiàng)難以達(dá)成的任務(wù),無(wú)論使用者或電腦本身都難以輕易獲知其對(duì)外的IP位址。 這種現(xiàn)象一直等到Skype 推出之后才獲得大幅改善,大大提高了 VoIP的可用度,使得一般的電腦使用者也可以很輕易的使用VoIP。即使使用者是在防火墻 之后,VoIP 也可以順利運(yùn)作,這是歸功於「VoIP穿越NAT 防火墻」技術(shù)。
一、NAT以及防火墻介紹
NAT 是一種將內(nèi)部IP 與外部IP互相轉(zhuǎn)換之技術(shù)。其起源是因?yàn)?IPv4 位址稀少,而很多企業(yè)或網(wǎng)路公司在擁有少數(shù)IP 地址而公司內(nèi)部確有太多電腦時(shí) 而采用共用IP 的解決方法,讓一個(gè)IP 地址給多個(gè)電腦使用。如今最常見(jiàn)的 IP 分享器或無(wú)線區(qū)域網(wǎng)路Access Point 都有NAT 的功能。使用者利用 ADSL上網(wǎng) 后,拿到一個(gè) IP 地址,而IP 分享器或WLAN AP 則將一組專供內(nèi)部使用的私有IP , 通常是192.168.0.x,分配給所有內(nèi)部電腦,內(nèi)部每部電腦擁有一個(gè)192.168.0.x的IP 位址, 但WLAN AP 對(duì)外卻只有一個(gè)由網(wǎng)路公司賦予的IP 位址。 通常NAT 是將每一部電腦所用的 (IP, port number), 本文稱為內(nèi)部位址,對(duì)應(yīng)到 (共用IP, port number),本文稱為外部位址, ?而 NAT 負(fù)責(zé)將進(jìn)出封包的表頭進(jìn)行轉(zhuǎn)換使得內(nèi)部電腦可以 透通的與外部網(wǎng)絡(luò)連線溝通。
Firewall的基本策略:?
? ? Firewall會(huì)判斷所有的包是來(lái)自內(nèi)部(Inside)還是外部(Outside)。?
? ? 允許所有來(lái)自inside的包發(fā)出去。?
? ? 允許來(lái)自O(shè)utside的包發(fā)進(jìn)來(lái),但這個(gè)連接必須是由Inside發(fā)起的。?
? ? 禁止所有連接由Outside發(fā)起的包發(fā)進(jìn)來(lái)。?
? ? firewall會(huì)允許幾個(gè)信任的outside主機(jī),他們可以發(fā)起建立連接,并發(fā)包進(jìn)來(lái)。
所有NAT和Firewall都是對(duì)于TCP/IP層以下進(jìn)行處理和過(guò)濾的,而SIP應(yīng)用的地址是在應(yīng)用層。所以必須采用其他的途徑來(lái)解決這一問(wèn)題。
解決方案
針對(duì)不同的NAT類型,可以有不同的解決方案。
防火墻/NAT的種類
防火墻通常整合在NAT 裡面,根據(jù)所用的防火墻技術(shù),NAT 可以分成 幾類。主要分為如下四類:
下面說(shuō)的地址表明IP,位址表明IP和Port
1、Full Cone
????????只是單純的做位址轉(zhuǎn)換,并未對(duì)進(jìn)出的封包設(shè)限。
???????? 當(dāng)一臺(tái)私網(wǎng)內(nèi)的主機(jī)向公網(wǎng)發(fā)一個(gè)包,其本地地址和端口是{A:B},NAT會(huì)將其私有地址{A:B}轉(zhuǎn)換成公網(wǎng)地址{X:Y}并綁定。任何包都可以通過(guò)地址{X:Y}送到該主機(jī)的{A:B}地址上,NAT會(huì)將任何發(fā)送到{X:Y}的incoming包的地址{X:Y}轉(zhuǎn)換成{A:B}。
其原理及運(yùn)作方式如下圖所示:
圖1:原理圖 圖2:示例圖????
?2、Restricted Cone
????????對(duì)于封包進(jìn)出稍加限制。從內(nèi)部送出之封包的目的地 IP 位址會(huì)被記住。只有這些曾經(jīng)收過(guò)這些封包的地址可以送封包進(jìn)入 NAT。由其他地址送進(jìn)來(lái)的封包,都會(huì)被檔下。換言之, 只有收過(guò)NAT 內(nèi)部送來(lái)的封包的地址才能將封包送入 Restrict Cone NAT 內(nèi)。
????????當(dāng)一臺(tái)私網(wǎng)內(nèi)的主機(jī)向公網(wǎng)發(fā)一個(gè)包,其本地地址和端口是{A:B},NAT會(huì)將其私有地址{A:B}轉(zhuǎn)換成公網(wǎng)地址{X:Y}并綁定。任何包都可以通過(guò)地址{X:Y}送到該主機(jī)的{A:B}地址上,但是,NAT只為第一個(gè)發(fā)往{X:Y}的包綁定成{A:B}|{X:Y}<->{C, any},其中{C:any}是那個(gè)包的源地址和任意端口。也就是說(shuō),只有來(lái)自地址為C的包才能于主機(jī){A:B}通信。
其原理及運(yùn)作方式如下圖所示:
?3、? Port Restricted?Cone NAT
????????Port Restricted Cone 對(duì)于封包進(jìn)出比Restricted Cone 增加了一個(gè)限制, 從內(nèi)部送出之封包的目的地的IP 位址及 Port 會(huì)被記住。 由外部送進(jìn)來(lái)的封包,除了由那些接收過(guò)內(nèi)部所送出的封包的IP 位址及 Port 所送來(lái)的封包之外,都會(huì)被檔下。換言之, 只有收過(guò)NAT 內(nèi)部送來(lái)的封包的地址及 Port 才能將封包送入 Restrict Cone NAT 內(nèi)。
? ? ? ? 和 Restricted Cone 的區(qū)別是 Restricted Cone 只綁定incoming packet 的IP地址,而Port Restricted?Cone 會(huì)綁定incoming packet的IP地址和端口。
其原理及運(yùn)作方式如下圖所示:
??
?4、? Symmetric
????????Symmetric 在四種Cone NAT中最為嚴(yán)謹(jǐn)。 前三種NAT在做位址轉(zhuǎn)換時(shí),無(wú)論封包是送往何處, NAT內(nèi)部同一內(nèi)部位址 都對(duì)應(yīng)到同一個(gè)外部位址,但在Symmetric NAT內(nèi)則每一內(nèi)部位址對(duì)不同的目的地, 都對(duì)應(yīng)到不同的外部位址。Symmetric NAT只允許先由私有網(wǎng)域內(nèi)的使用者發(fā)送封包到網(wǎng)際網(wǎng)路中的使用者 可以回傳封包。
隨著網(wǎng)路安全的要求越來(lái)越高,使用此種NAT有越來(lái)越多的趨勢(shì)。
當(dāng)一臺(tái)私網(wǎng)內(nèi)的主機(jī)向公網(wǎng)發(fā)一個(gè)包,其本地地址和端口是{A:B},外部位址為{C, D}。NAT經(jīng)過(guò)公網(wǎng){X:Y}綁定后變?yōu)閧A:B}|{X:Y}<->{C, D}。如果再發(fā)一個(gè)包,但是外部位址為{E, F},NAT會(huì)經(jīng)過(guò)另外的公網(wǎng){Q:P}綁定后變?yōu)閧A:B}|{Q:P}<->{E, F}。
其原理及運(yùn)作方式如下圖所示:
?NAT?造成的問(wèn)題
????????SIP是在當(dāng)今的網(wǎng)際網(wǎng)絡(luò)里最常使用的VoIP通訊協(xié)議。 使用者端(CPE)所連接的Agent 稱為 User Agent (UA), 使用者端所需的軟體功能都建置在UA 中, ?網(wǎng)路上并建置有各種伺服器,提供各式各樣的服務(wù), 共同建構(gòu)出一個(gè)運(yùn)作順暢的電話網(wǎng)路。我們以SIP 為例說(shuō)明NAT 防火墻 對(duì)VoIP通訊協(xié)議造成的問(wèn)題。為方便說(shuō)明起見(jiàn),本文將以SIP作為范例說(shuō)明 各種VoIP技術(shù)。
在SIP協(xié)議中,UA必須主動(dòng)向registrars伺服器註冊(cè),讓register伺服器掌握UA 動(dòng)態(tài)。 要建立通話session時(shí),發(fā)話端 UA 主動(dòng)向 proxy servers 發(fā)送INVITE請(qǐng)求,proxy servers會(huì)轉(zhuǎn)發(fā) INVITE請(qǐng)求。 而這兩種自防火墻外所發(fā)出的請(qǐng)求會(huì)被防火墻所阻擋。 所以為防止轉(zhuǎn)發(fā)的INVITE請(qǐng)求會(huì)被阻擋,register 伺服器不能放在防火墻之內(nèi)。但UA 就比較麻煩了,難免會(huì)有相當(dāng)數(shù)量的VoIP使用者是位于防火墻之內(nèi)的,他們可以不受干擾的主動(dòng)發(fā)話向外連接。不過(guò),他們卻很難接收他人的呼叫。 換言之,如果沒(méi)有適當(dāng)?shù)慕鉀Q方案,位于防火墻之內(nèi)的VoIP使用者,只能對(duì)外發(fā)話,卻無(wú)法接受電話。
現(xiàn)有穿越防火墻/NAT技術(shù)介紹
Universal Plug and Play (UPnP,即插即用)
Universal Plug and Play(UPnP)是微軟公司提出的協(xié)定,其目的是要簡(jiǎn)化家庭或企業(yè)中智慧設(shè)備的連網(wǎng)過(guò)程. 使用TCP/IP協(xié)定透過(guò)網(wǎng)路自動(dòng)彼此連接在一起, 而且連接過(guò)程中無(wú)需用戶的參與和使用中央伺服器, UPnP設(shè)備可以自動(dòng)探索網(wǎng)路并配置網(wǎng)路地址設(shè)定。 其穿越NAT的方式如下:
1)VoIP應(yīng)用程式先對(duì)是否位于一個(gè)具有UPnP能力的NAT設(shè)備進(jìn)行檢測(cè)。
2)應(yīng)用程式將獲得共用的Public IP地址及Port,為NAT做Signaling及media資訊流使用。 ?
3)VoIP使用端就可以將此資訊加入VoIP signaling建立通話。
此通話建立后,使用獲得的外部位址(Public IP地址及Port),做點(diǎn)對(duì)點(diǎn)的傳輸。
?問(wèn)題:
????????NAT及VoIP Client (UA) 必須支援UPnP, 但UPnP尚未得到所有的UA及NAT的支援 (要獲得全部UA及NAT廠商之支援,絕非易事)。 尤其是NAT的問(wèn)題,基于安全性的考慮,幾無(wú)NAT 愿意支援 UPnP。
STUN
STUN (Simple Traversal of UDP Through Network Address Translators - RFC 3489 ), 是最著名和最常被使用的VoIP穿越NAT防火墻的解決辦法。應(yīng)用程序(即STUN CLIENT)向NAT外的STUN SERVER通過(guò)UDP發(fā)送請(qǐng)求STUN 消息,STUN SERVER收到請(qǐng)求消息,產(chǎn)生響應(yīng)消息,響應(yīng)消息中攜帶請(qǐng)求消息的源端口,即STUN CLIENT在NAT上對(duì)應(yīng)的外部端口。然后響應(yīng)消息通過(guò)NAT發(fā)送給STUN CLIENT,STUN CLIENT通過(guò)響應(yīng)消息體中的內(nèi)容得知其NAT上的外部地址,并將其填入以后呼叫協(xié)議的UDP負(fù)載中,告知對(duì)端,本端的RTP接收地址和端口號(hào)為NAT 外部的地址和端口號(hào)。由于通過(guò)STUN協(xié)議已在NAT上預(yù)先建立媒體流的NAT映射表項(xiàng),故媒體流可順利穿越NAT。
方式如下:
a)???????? 客戶端A向STUN Port發(fā)送Binding請(qǐng)求(圖中綠色部分)
b)????????STUN服務(wù)器接收到客戶端A的Binding請(qǐng)求,它能得到該請(qǐng)求的源地址與端口(該地址和端口就是經(jīng)過(guò)NAT映射過(guò)的),將該地址和端口記為Server Reflexive Address。
c)???????? STUN服務(wù)器發(fā)送response響應(yīng),在response響應(yīng)中攜將Server Reflexive Address經(jīng)過(guò)異或后填入XOR-MAPPED-ADDRESS屬性。
d)???????? 客戶端A接受到STUN服務(wù)器的response后,就知道了自己的外網(wǎng)地址(反射地址,Server Reflexive Address)。
缺點(diǎn):
STUN無(wú)法穿透Symmetric NAT, 而偏偏這種NAT已經(jīng)成為NAT市場(chǎng)上的主流。
UA支持STUN CLIENT的功能
優(yōu)點(diǎn):
優(yōu)點(diǎn)是無(wú)需現(xiàn)有NAT/FW設(shè)備做任何改動(dòng)。可在多個(gè)NET串聯(lián)的環(huán)境中使用
TURN
????????TURN方式解決NAT問(wèn)題的思路與STUN相似,也是私網(wǎng)中的VOIP終端通過(guò)某種機(jī)制預(yù)先得公網(wǎng)上的服務(wù)地址(STUN方式得到的地址為出口NAT上外部地址,TURN方式得到地址為TURN Server上的公網(wǎng)地址),然后在報(bào)文凈載中所要求的地址信息就直接填寫該公網(wǎng)地址。
工作原理如下:
?a)???????? 客戶端A向STUN Port發(fā)送Allocate請(qǐng)求(圖中綠色部分)
?b)????????STUN服務(wù)器接收到客戶端A的Allocate請(qǐng)求,服務(wù)器一看是Allocate請(qǐng)求,則根據(jù)relay端口分配策略為A分配一個(gè)端口。
?c)???????? 服務(wù)器發(fā)送response成功響應(yīng)。在該response中包含XOR-RELAYED-ADDRESS屬性。該屬性值就是A的relay端口的異或結(jié)果。
?d)???????? 客戶端接收到response后,就知道了自己的relay地址。該relay地址是個(gè)公網(wǎng)地址,可以看作是客戶端A在公網(wǎng)上的一個(gè)代理,任何想要聯(lián)系A(chǔ)的客戶? ? ???端,只要將數(shù)據(jù)發(fā)送到A的relay地址就可以了。
交互轉(zhuǎn)發(fā)流程如下:
????????TURN的全稱為Traversal Using Relay NAT,即通過(guò)Relay方式穿越NAT.TURN應(yīng)用模型通過(guò)分配TURN Server的地址和端口作為私網(wǎng)中VOIP終端對(duì)外的接受地址和端口,即私網(wǎng)終端發(fā)出的報(bào)文都要經(jīng)過(guò)TURN Server進(jìn)行Relay轉(zhuǎn)發(fā)。TURN Server控制分配地址和端口,能分配RTP/RTCP地址對(duì)(RTCP端口號(hào)為RTP端口號(hào)加1)作為私網(wǎng)終端用戶的接受地址,避免了STUN方式中出口NAT對(duì)RTP/RTCP地址端口號(hào)的任意分配,使得客戶端無(wú)法收到對(duì)端發(fā)來(lái)的RTCP報(bào)文(對(duì)端發(fā)RTCP報(bào)文時(shí),目的端口號(hào)缺省按RTP端口號(hào)加 1發(fā)送)。
優(yōu)點(diǎn):
擁有STUN的所有優(yōu)點(diǎn),適用于所有NAT類型,包括Symmetric,支持基于TCP應(yīng)用。
缺點(diǎn):
需要VOIP終端支持TURN Client,所有報(bào)文都必須經(jīng)過(guò)TURN Server轉(zhuǎn)發(fā),增大了包的延遲和丟包的可能性。大量轉(zhuǎn)發(fā)會(huì)帶來(lái)部署成本問(wèn)題。
ALG (Application Layer gateway)
ALG可以是單獨(dú)的連接于外網(wǎng)和內(nèi)網(wǎng)之間的設(shè)備,也可以是內(nèi)置于防火墻內(nèi)的插件。當(dāng)FW/NAT發(fā)現(xiàn)外網(wǎng)呼叫信令為SIP時(shí),將其轉(zhuǎn)發(fā)到ALG(應(yīng)用層網(wǎng)關(guān)),通過(guò)ALG建立起內(nèi)網(wǎng)偽地址終端與外網(wǎng)終端的通信連接。
經(jīng)過(guò)NAT轉(zhuǎn)換后,到外網(wǎng)SIP包中via,contact,ower/creator,connection information均需要改為NAT外網(wǎng)IP。
SIP ALG的實(shí)現(xiàn)主要是對(duì)Request、Response消息進(jìn)行解析、修改、轉(zhuǎn)發(fā)。
對(duì)Invite消息的修改
1)對(duì)Via、From、CALL-ID、Contact頭域的處理
| Via | Via頭域是被服務(wù)器插入request中,用來(lái)檢查路由環(huán)的,并且可以使response根據(jù)via找到返回的路 | Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse |
| From | 表示請(qǐng)求的發(fā)起者 | From: sip:user1@domain.com;tag=49583 |
| Call-ID | 由本地設(shè)備(Client)生成,全局唯一,每次呼叫這個(gè)值唯一不變 | Call-ID: asd88asd77a@1.2.3.4 |
| Contact | 包含源的URI信息,用來(lái)給響應(yīng)方直接和源建立連接用 | Contact: sip:192.168.100.1:1111 |
對(duì)SDP的修改,則是針對(duì) ”o" "c" "m" 三個(gè)字段進(jìn)行的
缺點(diǎn):
????????使用ALG需要對(duì)現(xiàn)有設(shè)備升級(jí)改造。因?yàn)锳LG 不能識(shí)別加密后的報(bào)文內(nèi)容,所以必須保證報(bào)文采用明文傳送,這使得報(bào)文在公網(wǎng)中傳送時(shí)有很大的安全隱患。
MidCom(Middlebox Communications)
MIDCOM的基本框架是采用可信的第三方(MIDCOM Agent)對(duì)Middlebox (NAT/FW)進(jìn)行控制,VOIP協(xié)議的識(shí)別不由Middlebox完成,而是由外部的MIDCOM Agent完成,因此VOIP使用的協(xié)議對(duì)Middlebox是透明的 .
由于識(shí)別應(yīng)用協(xié)議的功能從Middlebox移到外部的MIDCOM Agent上,根據(jù)MIDCOM 的構(gòu),在不需要更改Middlebox基本特性的基礎(chǔ)上,通過(guò)對(duì)MIDCOM Agent的升級(jí)就可以支持更多的新業(yè)務(wù),這是相對(duì)NAT/ALG方式的一個(gè)很大的優(yōu)勢(shì)。
在VOIP實(shí)際應(yīng)用中,Middlebox功能可駐留在NAT/Firewall,通過(guò)軟交換設(shè)備(即MIDCOM Agent)對(duì)IP語(yǔ)音和視頻協(xié)議(H323、SIP、MGCP/H248)的識(shí)別和對(duì)NAT/Firewall的控制,來(lái)完成VOIP應(yīng)用穿越 NAT/Firewall .在安全性上,MIDCOM方式可支持控制報(bào)文的加密,可支持媒體流的加密,因此安全性比較高。
原文參考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
總結(jié)
以上是生活随笔為你收集整理的VOIP穿越防火墙详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 软件质量应该如何保证?针对不同情况,项目
- 下一篇: 什么是SQA?