STUN技术及在VOIP中的应用
2010-11-07张炳
张炳
山西大同同煤集团通信有限责任公司数据网络中心
STUN技术及在VOIP中的应用
张炳
山西大同同煤集团通信有限责任公司数据网络中心
STUN ;VOIP ;公私网穿越
前言
随着互联网的迅速发展,以IP技术为基础的新一代通信系统逐渐发展成熟,其中以VOIP技术为代表的通信技术已逐渐得到广泛的应用。SIP、H.323、MGCP等网络通信协议的开发为VOIP技术提供了技术保障,目前在国内正在大规模实施的NGN技术的核心即应用了VOIP技术。
尽管VOIP技术已经得到了广泛的应用,但在具体实施的过程中,仍普遍面临很多实际问题,大多数企业在部署VOIP应用时,大多采用了以下方案:
1、从安全的角度进行考虑,一般将VOIP网络放在公司防火墙后面,由防火墙实施保护。因此必须考虑如何让VOIP流可以穿越防火墙。特别是VOIP的客户端和服务端均位于防火墙之后。
2、部分企业在实施VOIP项目时,由于没有充足的IP地址,不得不采用私网地址,为了保证公网用户可以注册到VOIP系统中,需要在公司路由器或者边界会话器等设备中进行NAT转换。
在上述两种方案中,均面临如何解决NGN用户公私网穿越这一难题,在VOIP技术的发展过程中,先后出现了多种针对以上问题的解决方案,可以让基于VoIP呼叫穿透防火墙,但不同的NAT设备要求使用不同的NAT技术。因此在实施的过程中仍存在诸多不便。本文即讨论一种新的解决方案:利用STUN服务器技术解决VOIP应用中的NAT问题。
一、STUN简介
STUN技术是一种轻量级协议,它允许位于NAT之后的VOIP客户获取所分配的公网IP及端口号,同时还能够获取NAT及防火墙类型。利用所获取的公网IP信息可以以VOIP服务器端进行交互,从而实现NAT穿越。由于该技术实现简单,因此它可以广泛地应用于有NAT设备的VOIP网络中。
STUN分为CLIENT和SERVER两部分,其中CLIENT位于私网内部,可以集成到终端设备中,用于产生和发送STUN请求报文,而SERVER部分位于公网之中,用来接收并响应CLIENT发送的请求报文。所有的STUN报文均有20个字节长的报头组成,如图一所示:
图一
其中消息类型分为Binding Request、BindingResponse、Binding ErrorResponse、SharedSecret Request、SharedSecretResponse、SharedSecretErrorResponse六类。事务ID是一个16个字长的标识符,在同一个事务中使用相同的事务ID。
在消息头之后是消息属性部分,如图二所示属性部分由三部分组成,属性类型、属性长度、属性值:
图二
其中属性类型部分可分为MAPPEDADDRESS等共11种消息。
二、NAT技术
在FRC3489中将STUN协议中的NAT4种类型,分别为:FullCone、RestrictedCone、PortRestrictedCone和Symmetric。
FullCone:即一对一(one-toone)NAT,此类NAT中,同一个内部IP及端口均被映射到同一个公网的IP及端口上,公网的其他IP均可以通过所映射的公网IP及端口访问该内部IP。
RestrictedCone:此类NAT中,一个内部IP及端口(IP1)映射到公网中的同一个IP及端口(IP2),IP1的数据包都需要通过IP2进行发送。公网其他IP3只有在IP1首先给IP3发送报文之后,才可以通过IP2访问IP1。
PortRestrictedCone:该类NAT类似于RestrictedCone,但比Restricted Cone多了对端口的限制,在此类NAT中,一个内部IP及端口(IP1)映射到公网中的一个IP及端口(IP2),IP1的数据包都需要通过IP2进行发送。公网其他IP3只有在IP1首先给IP3发送包含IP及端口的报文之后,才可以通过IP2访问IP1。
Symmetric:该类NAT中,一个内网的IP及端口发送请求到一个公网的IP地址和端口,均被映射到一个特殊的公网IP地址和端口。同一个内网IP访问不同的公网IP,将使用不同的映射关系,该NAT的安全级别较高。
三、STUN在VOIP中的具体应用
如图三所示:STUN客户端如:IP电话、IP语音网关等设备位于各自的私网内,通过防火墙(FireWall)或边界会话器(SBC)公网互联,与STUN技术在具体应用中,Stun客户端会通过三种测试方式与公网上的Stun服务器的两个IP和port进行交互,根据返回的结果可以判断出NAT的类型。
图三STUN技术示意图
测试一:STUN客户端给STUN服务器通过UDP协议发送一个STUN BindingRequest,如果STUN服务器没有返回响应,则表明此类链接并非UDP链接。如果服务端接收到该请求,该服务器将检查源IP地址和端口,并将该地址与端口号放入一个BindingResponse中发送会客户端中。当客户端收到该BindingResponse消息后,将其中由服务器端写入的地址与端口号与客户端地址及端口号进行对比,如果一致,则表明该客户端位于公网之中,否则表明该客户端位于一个或多个NAT之后。
测试二:经过测试一后,如果该客户端位于NAT之后,则客户端将进行测试二,该测试中将利用同一源IP地址和端口向服务器端的另一个IP地址及端口发送一个BindingRequest,服务器收到该请求后,将返回客户端一个Binding Response。如果客户端可以收到该BindingResponse,则表明客户端位于一个FullCone类型的NAT之后。如果客户端没有收到BindingResponse,接着客户端将利用该IP地址和端口再进行一次测试一,如果两次测试中的IP地址和端口号一样,则表明该客户端位于RestrictedCone或PortRestrictedCone类型的NAT之后,否则该客户端位于Symmetric类型NAT之后。
测试三:在测试中客户端将向服务器端B向C的第二个IP的一个端口发送一个BindingRequest,并服务器端的第二个IP使用不同的端口号给客户端返回一个BindingResponse。如果客户端收到该BindingResponse,则表明该NAT类型为RestrictedCone,如果没有收到该消息则表明该NAT对端口进行了限制,及客户端位于PortRestrictedCone类型NAT之后。
通过上述测试流程,STUN客户端即可获取到NAT的公网IP端口号,利用该IP地址和端口即可替换VOIP注册时的IP地址和端口号并进行注册,即可实现NAT穿越进行VOIP注册。而现在市场上大多数的VOIP设备均内置了STUN客户端,因此使用该方法可以非常方便地实现VOIP功能。
10.3969/j.issn.1001-8972.2010.24.034