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}。

其原理及运作方式如下图所示:

VOIP穿越防火墙详解_第1张图片 图1:原理图

VOIP穿越防火墙详解_第2张图片 图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}通信。

其原理及运作方式如下图所示:

VOIP穿越防火墙详解_第3张图片

VOIP穿越防火墙详解_第4张图片

 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地址和端口。

其原理及运作方式如下图所示:

VOIP穿越防火墙详解_第5张图片

  

VOIP穿越防火墙详解_第6张图片

 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}。

其原理及运作方式如下图所示:

VOIP穿越防火墙详解_第7张图片

VOIP穿越防火墙详解_第8张图片

 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),做点对点的传输。

VOIP穿越防火墙详解_第9张图片

 问题:

        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。

VOIP穿越防火墙详解_第10张图片

方式如下:

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上的公网地址),然后在报文净载中所要求的地址信息就直接填写该公网地址。

VOIP穿越防火墙详解_第11张图片

工作原理如下:

 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地址就可以了。

交互转发流程如下:

VOIP穿越防火墙详解_第12张图片

        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头域的处理

Via Via头域是被服务器插入request中,用来检查路由环的,并且可以使response根据via找到返回的路 Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
From 表示请求的发起者 From: sip:[email protected];tag=49583
Call-ID 由本地设备(Client)生成,全局唯一,每次呼叫这个值唯一不变 Call-ID: [email protected]
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

你可能感兴趣的:(音视频,big,data)