基于GRE隧道的SIP穿越NAT的研究
郑志勇
(徐州生物工程高等职业学校,江苏 徐州 221006)
摘 要 目前广泛部署的NAT使得SIP穿越NAT变得越来越困难。本文提出了运用GRE隧道技术解决SIP穿越NAT的方案。通过在私网内架设GRE客户端和在防火墙/NAT之外(公网)架设GRE服务器,所有SIP信息及媒体流都通过GRE客户端和服务器端进行转发,从而避免了因为NAT的存在,导致SIP信息流无法穿越防火墙/NAT的问题。
关键词 GRE;SIP;NAT
1 引言
NAT的部署对SIP应用产生了不利的影响,使得标准的协议不能在存有NAT的网络中使用。为了解决这个问题,业界发布了多个用于帮助实现穿越的建议同时,众多的设备厂商也开始开发和生产帮助穿越的新产品。目前,已经广泛使用的几种主流的穿越方案包括STUN、TURN、ALG、隧道以及Media proxy等。然而,目前提供的这些解决方案都或多或少的存在一些自身的缺陷,这些缺陷主要体现在穿越能力、系统容量、安装成本等方面。
本文综合分析了SIP及NAT的通信原理,提出了通过GRE隧道技术来实现SIP穿越NAT,从而避免针对不同类型的NAT需要不同技术来解决的问题。
2 SIP及NAT描述
SIP(Session Initiation Protocol)称为会话初始化协议,是由互联网工程任务组(IETF,Internet Engineering Task Force)于 1999 年提出的一个基于 IP 网络,特别适用于 Internet 网络环境中实现实时通信应用的一种信令协议。会话是指用户间的数据交换。在基于 SIP 协议的应用中,每一个会话可以使用各种不同的数据,如普通文本、经过数字化处理的音频、视频数据等,应用具有很大的灵活性。
SIP 作为一个应用层的多媒体会话协议,可以用来创建、修改和终止一个或多个参加者参与的会话进程。这些会话包括 Internet 多媒体会议、Internet 电话、远程教学及远程医疗等。参加会话的成员可以通过组播方式、单播联网方式或者两者结合的方式进行通信。
网络地址转换(Network Address Translator,NAT)[3]是IETF为了解决IPv4地址紧缺而提出的一种解决方案。它位于公网和专用局域网间的网关中.NAT可以使同一局域网的多个内部地址共享单个的外部地址;同时又可隐藏局域网中的内部地址,从而提供一定的安全保障。现有的NAT主要分为四种类型。
2.1 Full Cone NAT
同一内部地址和端口发往外部的所有数据包,不管目的地址是多少,在NAT上都映射为同一个外部地址和端口;同时,任何外部主机发往NAT的该外部地址和端口的数据包将通过NAT被转发到相应的内部地址和端口。
2.2 Restricted Cone NAT
与Full Cone类似,同一内部地址和端口发往外部的所有数据包,在NAT上都映射为同一个外部地址和端口,但不同的是只有收到内网主机数据包的外部主机发的数据包才允许通过NAT被转发到相应的内网主机。
2.3 Port Restricted Cone NAT
与Restricted Cone类似,但比它更严格,只有接收到内网主机数据包的端口发出的包才被允许通过NAT到达相应的内网主机。
2.4 Symmetric NAT
前3种NAT的映射是与目的地址无关的。与前3种不同的是,Symmetric NAT是根据目的地址来进行映射的。也就是说,从同一地址和端口发往不同的目的地址的请求在NAT上所映射的公网地址或端口是不同的。同样,只有以前接收过内网主机的数据包的特定端口的主机发出的数据包才能穿越NAT到达内网主机。
3 隧道穿透技术
隧道穿透方案,实际上可以看成是使用了一种特殊的代理技术,它从逻辑上将代理设备划分为主代理(Server)和从代理(Client)。在通信过程中,Client 和 Server通过隧道协议建立一条隧道来实现信令和媒体流透,即在防火墙设备的内外架设专门的隧道来传送数据。通过把需要穿越的数据流封装在某种隧道中,从而绕过 NAT,这是隧道穿越技术的基本思想。可以考虑的隧道协议有 L2TP、IPSec、GRE以及L2F 等。
因为经过隧道封装的数据流在通过防火墙的时候,在通信双方之间都通过特定的隧道协议的端口,而不是原来数据流协议的端口。那么不论原来的应用协议是什么,只要隧道协议能够正常穿越过防火墙,就能完成任何应用协议的穿越。这样在很大程度上解决了对于不同应用协议需要开发不同穿越策略的办法。
4 GRE隧道穿透方案
前面已经说过隧道穿越方案所采用的隧道协议可以有很多种,如 L2TP、IPSec、GRE、L2F 等。在本文中,采用了 GRE(通用路由封装)协议作为隧道协议来实现 SIP通信中NAT的穿越。其原因就是,GRE 提供了将一种协议的报文封装在另一种协议报文中的机制,使报文能够在异种网络中传输。因 GRE 属于第三层协议,所以主要是对某些网络层协议(如:IP,IPX,AppleTalk 等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如 IP) 中传输。GRE 规定了如何用一种网络协议去封装另一种网络协议的方法。GRE 隧道由两端的源IP 地址和目的IP 地址来定义,允许用户使用 IP 包封装 IP、IPX、AppleTalk 包,并支持全部的路由协议(如 RIP、OSPF 等) 。通过 GRE,可以实现穿透目前的所以NAT类型。同时,在防火墙上开放GRE协议指定端口,还可以穿透防火墙。
4.1 GRE隧道穿透原理
隧道技术,是一种通过互联网络基础设施在网络之间传送数据的方式。使用隧道传送的数据可以是不同协议的数据包。在发送端,将一种协议的数据包封装成符合隧道协议的数据包进行发送。当封装的数据包到达目的地时,再将数据包还原,并将还原后的数据包交送到相应的服务上。这种方式能够使来自不同信息源的网络业务在同一个网络基础设施中传输。GRE通用路由封装定义了在任意一种网络层协议上封装任意一个其它网络层协议的协议。因此,我们可以采用GRE协议作为隧道协议,建立一条GRE隧道实现基于SIP的多媒体通信。在这里我们把这种GRE隧道技术,简称为GRE Tunnel,该系统在逻辑上包括两个构件Tunnel Client和Tunnel Server。Tunnel Client放置在防火墙/NAT之后的私网中,负责接收私网中的所有SIP2T终端的信令和媒体流。如果会话的另一方不在相同的私网内,Tunnel Client将所有的SIP消息封装成GRE消息的格式,交给Tunnel Server; 如果会话的双方在同一个私网内时,它起到重定向服务器的作用。同时,Tunnel Client监听来自Tunnel Server的报文,然后将其中携带的SIP消息进行适当的修改后转交给私网内的SIP用户。Tunnel Client是私网内的SIP终端与其在公网中的代理Tunnel Server之间沟通的桥梁。Tunnel Server处于公网中,具有公网IP地址。它负责接收Tunnel Client转交给它的GRE协议格式的报文,然后对给报文进行解包,并对所携带的SIP消息进行适当的修改,最后转发给其它SIP实体。同时Tunnel Server监听来自其它SIP实体的呼叫,并将收到的SIP消息进行适当的修改后转交给Tunnel Client。从公网上的SIP实体看来,Tunnel Server就是一个SIP用户代理,而Tunnel Server又相当于私网内的SIP终端在公网中的代理。任何私网内的SIP终端发送的SIP消息,都由Tunnel Server发送给公网中其它SIP实体,而任何目的地址为私网内的SIP终端的消息都将发送到Tunnel Server,然后由Tunnel Server通过与Tunnel Client配合工作转发给私网内的SIP终端。
4.2 GRE Tunnel系统结构设计
基于“GRE Tunnel”的防火墙/NAT 穿越方案的系统结构图如图1所示。

图1 基于“GRE Tunne防火墙/NAT 穿越方案的系统结构图
从图1可以看到,该方案由两种构件组成,Tunnel Client(下文简称 GC)和 Tunnel Server(下文简称 GS)。两个构件的功能简单介绍如下:
1)GC 构件
GC 放置在防火墙/NAT 之后的私网中,私网内的终端需要设置GC 为域 Proxy服务器。GC 负责接收私网内的所有 SIP 终端的 SIP 信令和 RTP 媒体流。如果会话的另一方不在相同的私网内,GC 将所有的 SIP 消息封装入 GRE格式的报文中,转交给GS;如果会话的双方在同一个私网内时,它起到重定向服务器的作用。同时,GC 监听来自GS 的报文,然后将 SIP 消息进行适当的修改后转交给私网内的用户。GC 是私网内的用户代理与其在公网中的代理GS 之间沟通的桥梁。
2)GS 构件
GS 处于公网中,具有公网 IP 地址。它负责接收 GC 转交给它的 GRE 格式的报文,然后对报文进行解包,并对 SIP 消息进行适当的修改,最后转发给其它 SIP实体;同时,GS 服务器监听来自其它 SIP 实体的呼叫,并将 SIP 消息进行适当的修改后转交给 GC。从公网 SIP 实体看来,GS 就是一个 SIP 终端,GS 相当于私网内的 SIP 终端在公网中的代理:任何私网内的终端发送的 SIP 消息,都由GS 发送给公网中其它 SIP 实体,而任何目的地址为私网内终端的消息都将发送到GS,然后由GS 通过与 GC 配合工作转发给私网内 SIP 终端。
GC 和 GS 之间创建的通道上传送的是 GRE 协议格式的报文,而不是标准的SIP 消息,SIP 消息封装到 GRE 报文内部,作为其负载。通过这个通道,GC 将所有用户的注册信息和呼叫控制信令转发到GS 上,再由GS 转发到公网的 SIP 实体。此外,音频、视频等媒体流数据也经过 GC 和GS 之间的这个通道来穿透防火墙/NAT。值得说明的是,SIP 实体发送到 GC 或GS 上的信令或媒体数据都必须经过打包处理,构成符合 GRE 协议要求的报文格式后才能进行转发。
5 结论
本文的创新之处在于,本方案无需对防火墙和 SIP 实体做任何的改动,而且只占用防火墙上 1723和47两个 端口,在 GC 和GS之间建立 GRE 连接,就像在防火墙/NAT 上凿开了一个洞,所有的信令消息和媒体数据都通过这个特殊的通道穿透防火墙/NAT。由于此通道是私网内的 GC 向GS 发起请求建立起来的,而且此后所有的数据都只经过这个通道穿越防火墙,所以这种穿透方案对于所有类型的防火墙/NAT 都是可行的。
参考文献
[1]Rosenberg J,H Schulzrinne. SIP: Session Initiation Protocol [J].IETF RFC3261,2002
[2]Rosenberg,Weinberger,Huitema. STUN- simple traversal of User datagram protocol (UDP) through network address translators(NATs).IETF RFC3489,2003.
[3]张正炳,王海波,李中年.一种SIP穿透NAT的解决方案【J】 微计算机信息 2007,第 23 卷第 4-3 期
[4] SIP通信支持隧道穿越防火墙机制的设计与实现,中国科学院硕士论文,2008.5
收稿日期:5 月 4 日 修改日期:1 月 19 日
|