1. 协议简介
gre(generic routing encapsulation,通用路由封装)协议是对某些网络层协议(如ip 和ipx)的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议(如ip)中传输。gre 是vpn(virtual private network)的第三层隧道协议,在协议层之间采用了一种被称之为tunnel(隧道)的技术。tunnel 是一个虚拟的点对点的连接,在实际中可以看成仅支持点对点连接的虚拟接口,这个接口提供了一条通路使封装的数据报能够在这个通路上传输,并且在一个 tunnel 的两端分别对数据报进行封装及解封装。
一个报文要想在tunnel中传输,必须要经过加封装与解封装两个过程,下面以图3-1的网络为例说明这两个过程:
(1) 加封装过程
连接novell group1 的接口收到ipx 数据报后首先交由ipx 协议处理,ipx 协议检查ipx 报头中的目的地址域来确定如何路由此包。若报文的目的地址被发现要路由经过网号为1f 的网络(tunnel 的虚拟网号),则将此报文发给网号为1f 的tunnel端口。tunnel 口收到此包后进行gre 封装,封装完成后交给ip 模块处理,在封装ip 报文头后,根据此包的目的地址及路由表交由相应的网络接口处理。
(2) 解封装的过程
解封装过程和加封装的过程相反。从tunnel 接口收到的ip 报文,通过检查目的地址,当发现目的地就是此路由器时,系统剥掉此报文的ip 报头,交给gre 协议模块处理(进行检验密钥、检查校验和及报文的序列号等);gre 协议模块完成相应的处理后,剥掉gre 报头,再交由ipx 协议模块处理,ipx 协议模块象对待一般数据报一样对此数据报进行处理。
系统收到一个需要封装和路由的数据报,称之为净荷(payload),这个净荷首先被加上gre 封装,成为gre 报文;再被封装在ip 报文中,这样就可完全由ip 层负责此报文的向前传输(forwarded)。人们常把这个负责向前传输ip 协议称为传输协议(delivery protocol 或者transport protocol)。
封装好的报文的形式如下图所示:
举例来说,一个封装在ip tunnel 中的ipx 传输报文的格式如下:
2. 应用范围
gre 主要能实现以下几种服务类型:
(1) 多协议的本地网通过单一协议的骨干网传输
上图中,group1 和group2 是运行novell ipx 协议的本地网,term1 和term2 是运行ip 协议的本地网。通过在routera 和routerb 之间采用gre 协议封装的隧道(tunnel),group1 和group2、team1 和team2 可以互不影响地进行通信。
(2) 扩大了步跳数受限协议(如ipx)的网络的工作范围
若上图中的两台终端之间的步跳数超过15,它们将无法通信。而通过在网络中使用隧道(tunnel)可以隐藏一部分步跳,从而扩大网络的工作范围。
(3) 将一些不能连续的子网连接起来,用于组建vpn
运行novell ipx 协议的两个子网group1 和group2 分别在不同的城市,通过使用隧道可以实现跨越广域网的vpn。
GRE(Generic Routing Encapsulation)通用路由封装:是对某些网络层协议(如IP和IPX)的报文进行封装,使这些被封装的报文能够在另一网络层协议(如IP)中传输。GRE可以作为第三层隧道协议,在协议层之间采用隧道(Tunnel)技术。Tunnel是一个虚拟的点对点的连接,可以看成仅支持点对点连接的虚拟接口,这个接口提供了一条通路,使封装的数据报能够在这个通路上传输,并在一个Tunnel的两端分别对数据报进行封装及解封装。
我们使用两台AR28进行互联,并在之间创建GRE最简单的隧道。互联拓扑图如下:
AR28-31<++++++++++>AR28-31
【AR28-1】
#
sysname AR28-1
#
interface Ethernet2/0
ip address 202.101.1.2 255.255.255.0 /公网IP/
#
interface Ethernet2/1
ip address 192.168.1.1 255.255.255.0 //内部私网IP
#
interface Tunnel0 //创建GRE隧道 tunnel 0
ip address 192.168.0.1 255.255.255.252 // tunnel IP和对方tunnel IP在同一网段
source 202.101.1.2 //GRE隧道源地址
destination 202.101.2.2 //GRE隧道目的地址
#
ip route-static 0.0.0.0 0.0.0.0 202.101.1.1 preference 60
//到公网的默认路由
ip route-static 192.168.2.0 255.255.255.0 Tunnel 0 preference 60
//通过tunnel访问对方私网的路由
#
【AR28-2】
#
sysname AR28-2
#
interface Ethernet2/0
ip address 202.101.2.2 255.255.255.0 //内部私网IP
#
interface Tunnel0 //创建tunnel 0
ip address 192.168.0.2 255.255.255.252 //tunnel IP和对方tunnel IP在同一网段
source 202.101.2.2 /源地址
destination 202.101.1.2 //目的地址
#
ip route-static 0.0.0.0 0.0.0.0 202.101.2.1 preference 60
//到公网的默认路由
ip route-static 192.168.1.0 255.255.255.0 Tunnel 0 preference 60
//通过tunnel访问对方私网的路由
GRE
GRE(Generic Routing Encapsulation)通用路由封装:是对某些网络层协议(如IP和IPX)的报文进行封装,使这些被封装的报文能够在另一网络层协议(如IP)中传输。GRE可以作为第三层隧道协议,在协议层之间采用隧道(Tunnel)技术。Tunnel是一个虚拟的点对点的连接,可以看成仅支持点对点连接的虚拟接口,这个接口提供了一条通路,使封装的数据报能够在这个通路上传输,并在一个Tunnel的两端分别对数据报进行封装及解封装。
我们使用两台AR28进行互联,并在之间创建GRE最简单的隧道。互联拓扑图如下:
AR28-31<++++++++++>AR28-31
【AR28-1】
#
sysname AR28-1
#
interface Ethernet2/0
ip address 202.101.1.2 255.255.255.0 //公网IP
#
interface Ethernet2/1
ip address 192.168.1.1 255.255.255.0 //内部私网IP
#
interface Tunnel0 //创建GRE隧道 tunnel 0
ip address 192.168.0.1 255.255.255.252 // tunnel IP和对方tunnel IP在同一网段
source 202.101.1.2 //GRE隧道源地址
destination 202.101.2.2 //GRE隧道目的地址
#
ip route-static 0.0.0.0 0.0.0.0 202.101.1.1 preference 60
//到公网的默认路由
ip route-static 192.168.2.0 255.255.255.0 Tunnel 0 preference 60
//通过tunnel访问对方私网的路由
#
【AR28-2】
#
sysname AR28-2
#
interface Ethernet2/0
ip address 202.101.2.2 255.255.255.0 //内部私网IP
#
interface Tunnel0 //创建tunnel 0
ip address 192.168.0.2 255.255.255.252 //tunnel IP和对方tunnel IP在同一网段
source 202.101.2.2 /源地址
destination 202.101.1.2 //目的地址
#
ip route-static 0.0.0.0 0.0.0.0 202.101.2.1 preference 60
//到公网的默认路由
ip route-static 192.168.1.0 255.255.255.0 Tunnel 0 preference 60
//通过tunnel访问对方私网的路由
GRE隧道建立之后,我们在任何一台AR28上面都可以Ping通对方的私网地址,这个就是GRE隧道发挥的作用。GRE隧道还有更加复杂的应用,我们将陆续介绍基于华为路由器、华为交换机设备进行的GRE各种应用配置。