GRE 协议简介

来源:互联网 发布:util.java 编辑:程序博客网 时间:2024/05/03 14:58
通用路由选择封装(Generic Routing Encapsulation,GRE)是网络中通过隧道将通信从一个专用网络传输到另一个专用网络常用到的一个协议。

尽管GRE不提供加密服务,但它提供低开销隧道。本章通过GRE的RFC展示了GRE的不同实现并比较了其不同之处。我们将分析GRE头的各个域。在此基础上,讨论涉及GRE配置的实例研究。我们将关注GRE的更具普遍性的用法,诸如在通过GRE连接的网络上无缝地结合路由协议使用GRE以及使用GRE将非IP通信通过隧道传输。

11.1  GRE(1)

GRE被用来在任意一层协议之上封装另外任意一层协议。一般而言GRE允许使用特定的协议创建隧道,这将隐藏在隧道中传输的另外一个协议的内容。

我们主要讨论将其他任意层协议嵌入在GRE中并使用IPv4作为GRE传输机制的使用。


传输的头是IPv4的头。有效载荷分组可以是IPv4的头,或者是其他协议。GRE允许非IP协议在有效载荷中被传输。

使用IPv4头的GRE分组被归入IP协议,类型号为47。当为GRE生成过滤器时这是一条很重要的信息。当GRE中封装的分组是IPv4时,GRE头协议类型域被设为0x800。

  
在GRE领域中有两个主要实现一个基于RFC 1701,另一个基于较新的RFC 2784,它也是推荐的协议标准。RFC 2784的实现与RFC 1701的实现在某种程度上有互用的部分,但在RFC1701中提供的一些特性在RFC 2784中被摒弃了。我们将在讨论了RFC 2784的实现后讲述该互用性。我们还要讨论一个新的RFC,即RFC 2890,因为它介绍了对RFC 2784行为的一些修改。


  
头中重要的域如下所示:

标识位以下描述是从RFC 1701中摘录的,同时加了说明。

校验和存在位(第0位)当校验和存在位被置为1时,在分组中存在校验和域同时该域包含的信息有效。如果校验和存在位或路由存在位被置位,则在GRE分组中给出校验和与偏移域。

路由存在位(第1位)当路由存在位被置为1时,分组中给出偏移域和路由域并且包含有效信息。如果校验和存在位或路由存在位被置位,则在GRE分组中给出校验和与偏移域。

密钥存在位(第2位)当密钥存在位被置为1,在GRE头中给出密钥域。否则,在GRE头中不给出密钥域。

序号存在位(第3位)当序号present位被置为1时,分组中存在序号域。否则在GRE头中不给出序号域。

严格源路由(第4位)建议本位当且仅当路由信息由严格源路由组成时才置为1。

递归控制(第5~7位)递归控制是一个3位的无符号整数,该整数包含被允许附加封装的数目。它在默认情况下应当被置为0。

版本号(第13~15位)版本号域必须包含数值0。

协议类型协议类型域存放封装在GRE分组的有效载荷中的分组的协议类型。例如,当IP是GRE分组中运载的协议时,本域被置为0x800。

校验和本域被用来保证GRE头和有效载荷分组的完整性。它存放一个GRE头和有效载荷分组的IP校验和。

密钥密钥域存放一个用来认证已封装GRE分组的数字。这是GRE提供的一种形式上较弱的安全性。基本上,密钥域防止了误配置或是其他源地址的篡改。隧道的两端只接受密钥域正确的GRE分组。密钥域需要在隧道两端手动配置。很显然安全性不能依赖于它,因为当攻击者只需要简单地查看GRE分组就可以算出密钥域的值,他就可以产生一个可认证的GRE分组,如同原始封装一样。

密钥域的另一个用途是标识隧道中单独的通信流。例如,分组需要根据没有在封装的数据中出现的上下文信息来确定路由。密钥域提供了上下文信息并在封装与解封装之间定义了一个逻辑通信流。这方面的一个例子是不怎么广泛使用的多点GRE隧道。这些隧道需要定义一个密钥以区分通信。由于本章的缘故,我们将集中讨论更常见的点到点GRE隧道。


GRE(2)

序号网络两端可以使用序号跟踪接受到的分组顺序,并且可以选择性地丢弃乱序到达的分组。这部分在传输乘客通讯协议是有用的,但是在接受乱序分组时效果较差(如基于LLC2协议)。

路由路由域列出源路由入口(SRE)。此域不经常使用。只有需要对GRE分组作源路由时才用到它。

讨论完RFC 1701的GRE实现,再看看RFC 2784的实现。RFC 2784不赞同GRE中的三个可选域(序号、密钥和路由)并把它们和同在RFC 1701种使用的校验和域一同除去。在这些标识域的位置,使用0做替代。如果分组是由2784发出的并被1701接收到,这样就可保证2784和1701实现之间的互用性,。1701实现仅把0作为序号,密钥、路由选项没有使用来处理。不过,如果发送器使用RFC 1701实现时并且将那些2784废弃掉的某个域置为1,那么发出的分组必将被使用RFC 2784实现的接收器丢弃。

一个新的RFC,RFC 2890,针对RFC 2784又引入了两个标志位和两个可选域。它们是针对密钥和序号选项的。

最新版本的Cisco IOS 软件的12.2T代码实现了用RFC 2890增强后的RFC 2784。
GRE常用与其他加密协议一起使用以提供安全性。用GRE创建的VPN并不安全是因为GRE不提供对其有效负载加密的安全手段。提供加密的方法通常在应用层中使用,这样当应用层加密协议对数据加密时,GRE能产生连接专用网络的隧道。在这种情况下,GRE主要作为将通信从一个专用网络移到另一个的传输媒介。

在Cisco设备中,GRE有时也同网络层加密协议一同使用,如IPSec。通常这样做的理由是这样可以利用GRE协议的一些特性,或是可以克服网络层加密协议实现中的一些缺点。这方面的一个例子就是,用GRE协议来封装非IP通信并使用IPSec协议来加密GRE分组。这样做是因为IPSec协议不能对非IP通信加密。在GRE中封装非IP通信,如AppleTalk,可以使运行这些协议的专用网络用IPSec安全地连接。本章有一个这样的实现例子。同样,路由协议如使用多播通信进行路由更新的EIGRP协议也可以封装在GRE中并使用IPSec创建隧道以保证安全。IPSec不允许多播通信的封装。
原创粉丝点击