GRE 简述(为cisco路由器配置GRE隧道举例) 收藏

GRE(通用路由协议封装)是由Cisco和Net-smiths等公司于1994年提交给IETF的, 标号为RFC1701和RFC1702。目前有多数厂商的网络设备均支持GRE隧道协议。
GRE规定了如何用一种网络协议去封装另一种网络协议的 方法。GRE的隧道由两端的源IP地址和目的IP地址来定义,允许用户使用IP包封装IP、IPX、AppleTalk包,并支持全部的路由协议(如 RIP2、OSPF等)。通过GRE,用户可以利用公共IP网络连接IPX网络、AppleTalk网络,还可以使用保留地址进行网络互连,或者对公网隐 藏企业网的IP地址。
----GRE在包头中包含了协议类型,这用于标明乘客协议的类型;校验和包括了GRE的包头和完整的乘客
协议与数据;密钥用于接收端验证接收的数据;序列号用于接收端数据包的排序和差错控制;路由用于
本数据包的路由。
----GRE只提供了数据包的封装,它并没有加密功能来防止网络侦听和***。所以在实际环境中它常和IP
sec在一起使用,由IPsec提供用户数据的加密,从而给用户提供更好的安全性。
       GRE协议的主要用途有两个:企业内部协议封装和私有地址封装。在国内,由于企业网几乎全部采用的是TCP/IP协议,因此在中国建立隧道时没有对企业内 部协议封装的市场需求。企业使用GRE的唯一理由应该是对内部地址的封装。当运营商向多个用户提供这种方式的×××业务时会存在地址冲突的可能性。 
为Cisco路由器 配置GRE隧道
路由封装(GRE)最早是由Cisco提出的,而目前它已经成为了一种标准,被定义在RFC 1701, RFC 1702, 以及RFC 2784中。简单来说,GRE就是一种隧道协议,用来从一个网络向另一个网络传输数据包。

如果你觉得它和虚拟专用网(×××)有些类似,那只是因为:从技术上讲,GRE隧道是某一类型的×××,但是并不是一个安全隧道方式。不过 你也可以使用某种加密协议对GRE隧道进行加密,比如×××网络中常用的IPSec协议。
实际上,点到点隧道协议(PPTP)就是使用了GRE来创建×××隧道。比如,如果你要创建Microsoft ×××隧道,默认情况下会使用PPTP,这时就会用到GRE。
为什么要用GRE?
为什么要使用GRE进行隧道传输呢?原因如下:
有时你需要加密的多播传输。GRE隧道可以像真实的网络接口那样传递多播数据包,而单独使用IPSec,则无法对多播传输进行加密。多播传输的例子 包括OSPF, EIGRP, 以及RIPV2。另外,大量的视频、VoIP以及音乐流程序使用多播。
 
你所采用的某种协议无法进行路 由,比如NetBIOS或在IP网络上进行非IP传输。比如,你可以在IP网络中使用GRE支持IPX或AppleTalk协议。
 
你需 要用一个IP地址不同的网络将另外两个类似的网络连接起来。
 
如何配置GRE隧道?
在Cisco路由器上配置GRE隧道是一个简单的工作,只需要输入几行命令即可实现。以下是一个简单的例子。
路由器A:
interface Ethernet0/1
ip address 10.2.2.1 255.255.255.0
interface Serial0/0
ip address 192.168.4.1 255.255.255.0
interface Tunnel0
ip address 1.1.1.2 255.255.255.0
tunnel source Serial0/0
tunnel destination 192.168.4.2
路由器B:
interface FastEthernet0/1
ip address 10.1.1.1 255.255.255.0
interface Serial0/0
ip address 192.168.4.2 255.255.255.0
interface Tunnel0
ip address 1.1.1.1 255.255.255.0
tunnel source Serial0/0
tunnel destination 192.168.4.1
在这个例子中,两个路由器均拥有虚拟接口,即隧道接口。这一接口属于各自的网络,就好像一个点到点的T1环路。跨越隧道网络的数据采用串行网络方式 传输。
对于每个路由器都有两种途径将数据传递到另一端,即通过串行接口以及通过隧道接口(通过隧道传递数据)。该隧道可以传输非路由协议的数据,如 NetBIOS或AppleTalk。如果数据需要通过互联网,你可以使用IPSec对其进行加密。
从下面的信息反馈可以看出,路由器B上的隧道接口和其他网络接口没有什么不同:
RouterB# sh ip int brie
Interface   IP-Address   OK?  Method  Status                 Protocol
Ethernet0   10.1.1.1     YES  manual  up                     down
Serial0     192.168.4.2  YES  manual  up                     up
Serial1     unassigned   YES  unset   administratively down  down
Tunnel0     1.1.1.1      YES  manual  up                     up
RouterB#
解决GRE隧道的问题
由于GRE是将一个数据包封装到另一个数据包中,因此你可能会遇到GRE的数据报大于网络接口所设定的数据包最大尺寸的情况。接近这种问题的方法是 在隧道接口上配置ip tcp adjust-mss 1436。
另外,虽然GRE并不支持加密,但是你可以通过tunnel key命令在隧道的两头各设置一个密钥。这个密钥其实就是一个明文的密码。
由于GRE隧道没有状态控制,可能隧道的一端已经关闭,而另一端仍然开启。这一问题的解决方案就是在隧道两端开启keepalive数据包。它可以 让隧道一端定时向另一端发送keepalive数据,确认端口保持开启状态。如果隧道的某一端没有按时收到keepalive数据,那么这一侧的隧道端口 也会关闭。