GRE(通用路由封装)是一种封装方法的名称,而不是特指隧道
GRE只是一种封装方法。对于隧道和VPN操作的处理机制,例如如何建立隧道,如何维护隧道,如何拆除隧道,如何保证数据的安全性,当出现数据错误或意外发生时如何处理等等,GRE本身并没有做出任何规范。
GRE封装并不要求任何一种对应的VPN协议或实现
所谓的GRE实际上是指直接使用GRE封装,在一种网络协议上传送其他协议的一种VPN实现
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隧道像普通链路一样工作,路由器引入了一种称为Tunnel接口的逻辑接口。两个路由器上分别建立一个Tunnel接口,两个Tunnel接口之间建立点对点的虚拟连接,就形成了一条跨越公网的隧道
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 虚拟专用网 配置实验
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 3ip route-static 172.16.0.0 24 192.168.1.1
配置完成进行测试,PC4 ping PC5。发现能够正常通信
在R1的G0/0接口抓包查看就是隧道接口配置的源和目的