GRE协议(附华三实验)

embedded/2025/1/22 4:39:46/

 

概述

通用路由封装协议,可以对某些网络层协议(如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,记得启用接口管理,这样端口才会开启

 


http://www.ppmy.cn/embedded/155968.html

相关文章

SQL-leetcode—1084. 销售分析 III

1084. 销售分析 III 表: Product --------------------- | Column Name | Type | --------------------- | product_id | int | | product_name | varchar | | unit_price | int | --------------------- product_id 是该表的主键(具有唯一值的列&…

AWTK fscript 中的 输入/出流 扩展函数

fscript 是 AWTK 内置的脚本引擎,开发者可以在 UI XML 文件中直接嵌入 fscript 脚本,提高开发效率。本文介绍一下 fscript 中的 iostream 扩展函数 1.iostream_get_istream 获取输入流对象。 原型 iostream_get_istream(iostream) > object示例 va…

登录、注册、忘记密码、首页HTML模板

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>登录</title><style>body {display: fl…

Java 和php 在语法上有什么区别

从PHP转向Java开发时&#xff0c;你会遇到一些语法和概念上的差异。以下是Java和PHP在语法上的主要区别&#xff0c;以及一些需要注意的地方&#xff1a; 类型系统 PHP&#xff1a; 是一种弱类型语言&#xff0c;变量的类型是动态的&#xff0c;不需要显式声明。 可以在运行时…

【面试题】JVM部分[2025/1/13 ~ 2025/1/19]

JVM部分[2025/1/13 ~ 2025/1/19] 1. JVM 由哪些部分组成&#xff1f;2. Java 的类加载过程是怎样的&#xff1f;3. 请你介绍下 JVM 内存模型&#xff0c;分为哪些区域&#xff1f;各区域的作用是什么&#xff1f;4. JVM 垃圾回收调优的主要目标是什么&#xff1f;5. 如何对 Jav…

adb常用指令(完整版)

1、adb devices 查看是否连接到设备 2、adb install [-r] [-s] 安装app&#xff0c;-r强制&#xff0c;-s安装sd卡上 3、adb uninstall [-k] 卸载app&#xff0c;-k保留配置和参数 4、adb push 把本地文件上传设备 5、adb pull 下载文件到本地 6、cd D:\sdk\platform-tool…

STM32的DMA作用

STM32的DMA&#xff08;Direct Memory Access&#xff09;&#xff0c;即直接存储器存取&#xff0c;是一个重要的外设功能&#xff0c;它的主要作用是实现数据在外设和存储器之间或者存储器和存储器之间的高速传输&#xff0c;而无需CPU的干预。以下是对STM32的DMA作用的详细解…

【Flink系列】10. Flink SQL

10. Flink SQL Table API和SQL是最上层的API&#xff0c;在Flink中这两种API被集成在一起&#xff0c;SQL执行的对象也是Flink中的表&#xff08;Table&#xff09;&#xff0c;所以我们一般会认为它们是一体的。Flink是批流统一的处理框架&#xff0c;无论是批处理&#xff08…