GRE(通用路由封装)是一种封装方法的名称,而不是特指隧道

GRE只是一种封装方法。对于隧道和VPN操作的处理机制,例如如何建立隧道,如何维护隧道,如何拆除隧道,如何保证数据的安全性,当出现数据错误或意外发生时如何处理等等,GRE本身并没有做出任何规范。

GRE封装并不要求任何一种对应的VPN协议或实现

所谓的GRE实际上是指直接使用GRE封装,在一种网络协议上传送其他协议的一种VPN实现

gre封装技术 gre模块_gre封装技术

GRE字节中有2字节长的Protocol type字段用于指示载荷协议的类型。

协议名

协议类型号(16进制)

SNA

0004

OSI network layer

00FE

XNS

0600

IP

0800

DECnet(Phase IV)

6003

Ethertalk(Appletalk)

809B

Novell IPX

8137

 

gre封装技术 gre模块_网络_02

为了使点对点的GRE隧道像普通链路一样工作,路由器引入了一种称为Tunnel接口的逻辑接口。两个路由器上分别建立一个Tunnel接口,两个Tunnel接口之间建立点对点的虚拟连接,就形成了一条跨越公网的隧道

gre封装技术 gre模块_gre封装技术_03

GRE隧道的工作流程

  • 隧道起点路由查找:查路由,匹配出站接口为Tunnel的路由表项,执行GRE封装和转发流程
  • 加封装:封装公网IP地址(需在tunnel接口内配置封装的源和目的)
  • 承载协议路由转发:根据GRE封装之后的数据继续查找路由表
  • 中途转发:中间设备只看到GRE封装之后的报文,正常转发
  • 解封装:是接口IP地址,解开第一层,无错误则解开GRE头,交给tunnel接口,就如同与tunnel接口收到的一样
  • 隧道终点路由查找:解开封装的报文就是私网IP地址,正常转发报文

 

GRE 虚拟专用网的特点

  • 可以用当前最普遍的IP网络(包括互联网)作为承载网络
  • GRE封装可以支持多种协议。GRE VPN可以承载多种上层协议载荷,从而可以跨越公共网使用一些传统和特殊协议
  • GRE VPN不局限于单播报文的传送。事实上,任何需要从tunnel接口发出的数据包均可以获得GRE封装并穿越隧道
  • 没有复杂的隧道建立和维护机制,因此可以说是最容易理解、最易于部署、最容易维护的VPN技术之一

GRE 虚拟专用网的不足

  • 是一种点对点隧道,在隧道两端建立点对点连接,隧道双方地位是平等的,因而只适合与站点对站点的场合
  • 要求在隧道的两个端点上静态配置隧道接口,并指定本端和对端地址。要想修改隧道配置,必须同时手工修改两端的参数
  • 部署复杂连接关系时,代价巨大
  • 只提供有限的差错校验、序列校验、验证等机制,不提供数据加密等服务,必须使用ipsec等其他技术才能获得足够的安全性
  • 从收到数据包开始,到数据包转发结束,GRE隧道终点路由器必须两次查找路由表。不能分隔地址空间

Tunnel接口虚假状态和静态路由

GRE本身不提供对隧道状态的检测和维护机制。默认情况下,系统根据隧道源物理接口状态设置Tunnel接口状态

隧道的中间链路可能发送故障,但是却检测不到,发送出去的报文全被丢包 解决办法:keepalive

Tunnel接口Keepalive功能允许路由器探测并感知隧道的实际工作情况,并随之修改Tunnel接口的状态

启动Keepalive功能后,路由器会从Tunnel接口周期发送Keepalive报文.默认情况下路由器连续3次收不到对方响应的Keepalive报文,即认为对到不可用,将状态改为down

H3C命令介绍

int tunnel 0 mode gre

创建tunnel接口模式选择gre

source 10.10.10.10 或者接口

指定tunnel的源端

destination 20.20.20.20

指定tunnel的目的端

ip address 10.0.0.1 24

设置tunnel接口的IP地址

gre checksum

设置两端进行端到端校验

gre key 0-4294967295

设置接口识别关键字,缺省不开启

Keepalive 10

匹配tunnel的Keepalive功能,缺省为10秒一次

dis int tunnel 0

查看信息

GRE 虚拟专用网 配置实验

gre封装技术 gre模块_gre封装技术_04

1.配置IP地址省略

2.配置缺省静态路由以达到公网可达

R1:ip route-static 0.0.0.0 0 10.0.0.2

R3:ip toute-static 0.0.0.0 0 20.0.0.1

3.GRE隧道关键配置

R1:

interface Tunnel0 mode gre      #创建并进入gre接口
 ip address 192.168.1.1 255.255.255.0 
 source 10.0.0.1       #设置封装的源IP地址
 destination 20.0.0.2   #设置封装的目的IP地址
 keepalive 10 3       #匹配tunnel的Keepalive功能,10秒一次,3次未收到报文隧道失效

ip route-static 172.17.0.0 24 192.168.1.2       #设置去往对方私网的路由发往tunnel隧道接口

R3:

interface Tunnel0 mode gre
 ip address 192.168.1.2 255.255.255.0
 source 20.0.0.2
 destination 10.0.0.1
 keepalive 10 3

 ip route-static 172.16.0.0 24 192.168.1.1

配置完成进行测试,PC4 ping PC5。发现能够正常通信

gre封装技术 gre模块_gre封装技术_05

在R1的G0/0接口抓包查看就是隧道接口配置的源和目的

gre封装技术 gre模块_IP_06