概述
通用路由封装协议,可以对某些网络层协议(如IPX、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在网络中传输,是一种三层协议,个人认为这是最简单的VPN技术
GRE提供了将一种协议的报文封装在另一种协议报文中的机制,使报文能够在异种网路中传输,而异种报文传输的通道称为Tunnel,这种设计极大提高GRE的灵活性
封装
在所要传输的报文里加入新的三层报头,经过封装后的报文结构如下图,但遗憾的是GRE不支持加密,所以一般搭配IPSEC进行使用
净荷数据(Payload packet)
需要传输,封装的数据报文以及协议类型,也被称为乘客协议(Passenger Protocol),可取任意协议
GRE头部(GRE header)
GRE协议对净荷数据进行封装所添加的报头,对净荷数据进行封装的GRE协议,也称为封装协议(Encapsulation Protocol)或者运载协议(Carrier Protocol)
相关字段解释如下
字段 | 长度 | 描述 |
---|---|---|
C | 1 bit | 校验和验证位。如果该位置1,表示GRE头插入了校验和(Checksum)字段;该位为0表示GRE头不包含校验和字段。 |
K | 1 bit | 关键字位。如果该位置1,表示GRE头插入了关键字(Key)字段;该位为0表示GRE头不包含关键字字段。 |
Recursion | 3 bits | 用来表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。 |
Flags | 5 bits | 预留字段。当前必须设为0。 |
Version | 3 bits | 版本字段,必须置为0。Version为1是使用在RFC2637的PPTP中。 |
Protocol Type | 16 bits | 乘客协议的协议类型。 |
Checksum | 16 bits | 对GRE头及其负载的校验和字段。 |
Key | 31 bits | 关键字字段,隧道接收端用于对收到的报文进行验证。 |
传输协议的报文头(Delivery header)
负责对封装后的报文进行转发的协议称为传输协议,一般封装ipv4或ipv6报文头
工作流程
虚拟接口
加入一个虚拟接口Tunnel作为隧道的起点或终点,想封装的流量发到此接口
原理非常简单,就是手工配置一个由两端Tunnel口搭建的隧道,Tunnel口间相互指定地址和协议,再配置相关路由告诉相关流量怎么走,当流量匹配,直接发送给Tunnel进行隧道发送
keepalive检测
默认关闭,启用可周期性发送keepalive报文,用于检测地址可达性,可配置时间间隔(缺省10s)和最大传送次数(缺省3次)
当收到对端的keepalive报文将自己的Tunnel口改为Up,如果超过最大传输次数仍未收到,将接口改为Down
keepalive检测可防止选择的对端不可达的GRE隧道,避免造成数据丢失,可及时告知管理员线路故障
但是一般来说如果作为VPN,GRE又一般在出口设备,外网路由都是做通的,个人感觉这个就有点鸡肋,而且还占用一部分网络带宽
安全机制
从上面的报文来看,GRE是提供认证的,可以通过双方配置key来达到一定的安全环境,但是GRE本身不提供加密,这种认证只能保障双方身份的合法性但无法保障传输数据的安全
应用
IPv6网络与IPv4网络通讯
通过GRE封装可实现两边IPv4网络相互通讯和IPv6网络相互通讯,就有点向QINQ技术
当然
扩大网络规模
拿RIP举例,其最大条数为15,16表示不可达,可以通过GRE隐藏一部分跳数,扩大网络规模
如下图,假设图片左右各接一台PC,此时这两台PC跳数为4,经过GRE可减少为3跳
搭建VPN
作为传统VPN的主力之一,在外层封装上公网IP实现VPN效果,不过其不支持加密,通常搭配其他VPN技术一起使用,如GRE over IPsec,L2TP等
GRE与IPsec
GRE与IPsec都是一种隧道的概念,二者的主要区别在于安全性。GRE旨在两种不同协议下的网络中,创建一个未加密的隧道;而IPsec可在IP网络中创建加密隧道,它的加密和身份验证机制可防止窃听和数据修改。但IPSec目前只能对单播报文进行加密保护,不能对组播报文进行加密保护,而GRE可以将组播报文封装成单播报文,但不能对报文进行加密保护,这就是为什么GRE经常和IPSec组合使用的原因
GRE与L2TP
GRE和L2TP都是一种隧道协议,其主要区别在于L2TP是一种用户接入协议,而GRE是一种网络协议,因此L2TP涉及到用户侧的接入,而GRE只关乎网络端的隧道连通。除此之外,二者的报文结构也有较大差异:GRE的报文结构比较简单,仅包含GRE头和隧道负载,而L2TP协议在用户接入端需要封装PPP协议和以太网帧
实验
这次我们用HCL做下实验
要求
Switch A 和 Switch B 分别连接 IPv4私有网络Group 1和Group 2。这两个私有网络都使用私网地 址,且属于同一个VPN
通过在Switch A和Switch B之间建立GRE隧道,实现两个私有网络的互联
拓扑
左边SWA,右边SWB,PC3IP地址10.1.1.1/24网关10.1.1.254,PC4IP地址10.1.3.1/24网关10.1.3.254,
配置
划分接口与配置IP地址(省略)
拓扑问题,这边要同一网段,建议中间加路由其做动态路由放通
配置GRE
创建业务回环组
[SWA]service-loopback group 1 type tunnel
[SWA]int g1/0/3
[SWA-GigabitEthernet1/0/3]port ser
[SWA-GigabitEthernet1/0/3]port service-loopback g
[SWA-GigabitEthernet1/0/3]port service-loopback group 1
All configurations on the interface will be lost. Continue?[Y/N]:y
创建Tunnel接口并配置Tunnel相关配置,写静态路由引导流量
[SWA]int Tunnel 1 mode gre
[SWA-Tunnel1]ip add 10.1.2.1 24
[SWA-Tunnel1]source 1.1.1.1
[SWA-Tunnel1]destination 1.1.1.2
[SWA-Tunnel1]qu
[SWA]ip route-static 10.1.3.0 24 Tunnel 1
镜像配置对端
[SWB]service-loopback group 1 type tunnel
[SWB-GigabitEthernet1/0/3]port service-loopback group 1
All configurations on the interface will be lost. Continue?[Y/N]:y
[SWB-GigabitEthernet1/0/3]%Jan 20 16:16:22:794 2025 SWB IFNET/3/PHY_UPDOWN: Physical state on the interface GigabitEthernet1/0/3 changed to up.
%Jan 20 16:16:22:795 2025 SWB IFNET/5/LINK_UPDOWN: Line protocol state on the interface GigabitEthernet1/0/3 changed to up.
qu
[SWB]int Tunnel 1 mode gre
[SWB-Tunnel1]ip add 10.1.2.2 24
[SWB-Tunnel1]source 1.1.1.2
[SWB-Tunnel1]destination 1.1.1.1
[SWB-Tunnel1]qu
[SWB]ip route-static 10.1.1.0 24 Tunnel 1
检验
查看Tunnel接口状态
接下来用PC3pingPC4,记得启用接口管理,这样端口才会开启