HCIP——GRE和MGRE
目录
VPN
GRE
GRE环境的搭建
GRE的报文结构
GRE封装和解封装报文的过程
GRE配置编辑
R1
R2
GRE实验编辑
MGRE
原理
MGRE的配置
R1
R2
R3
R4
查看映射表
抓包
MGRE环境下的RIP网络
综合练习编辑
VPN
说到GRE,我们先来说个大家熟悉一点的,那就是VPN技术。
·
-
背景需求
-
企业、组织、商家等对专用网有强大的需求。
-
高性能、高速度和高安全性是专用网明显的优势。
-
物理专用网价格高昂,物理架设实施有难度。传统的通过租用专线或拨号网络的方式越来越不适用。(性价比较低)
-
-
VPN ---Vitual Private Network,虚拟私有网)︰是指依靠ISP或其他NSP在公用网络基础设施之上构建的专用的安全数据通信网络,只不过这个专线网络是逻辑上的而不是物理的,所以称为虚拟专用网。
-
虚拟:用户不再需要拥有实际的长途数据线路,而是使用公共网络资源建立自己的私有网络。
-
专用:用户可以定制最符合自身需求的网络。
-
核心技术:隧道技术
-
GRE
VPN技术的核心其实是隧道技术。而我们今天要讲的这个GRE(General Routing Encapsulation)其实就是一种隧道封装技术。
-
隧道技术∶在隧道的两端,通过封装及解封装技术在公网上建立一条数据通道,使用这条通道进行数据传辑
GRE --- 通用路由封装,标准的三层隧道技术,是一种点对点的隧
GRE环境的搭建
这里可以先使用ENSP搭建一个GRE的工作环境进行演示讲解。
搭建如上的示意拓扑。我们现在的需求就是通过GRE技术保证左边的1.0网段可以正常的访问右边2.0网段。
我们先按照现在所学的把我们该配的都配好。R1,R2,R3的IP,及R1,R3上应该配置到达ISP路由器的缺省路由以及配置nat,配置完后,126.0.1应该可以ping通23.0.0.1。当然,两边的私网IP地址肯定是不可能通的。
其实这个隧道的原理很简单,就是我们假装中间有一个虚拟的链路将两边的路由器连接。这个虚拟的链路也需要在一个内网的网段当中。当然我们这样配,肯定没问题,问题是,你配好了数据包也没办法去走这个虚拟的链路啊,因为他本身就不存在。数据还是只能从真实的接口中出走真实的链路。
所以,这中间就需要GRE帮忙搬运流量。
GRE的报文结构
-
GRE在封装数据时,会添加GRE头部信息,还会添加新的传输协议头部信息。
-
GRE封装报文时,封装前的报文成为净荷,封装前的报文协议称为乘客协议.然后GRE会封装GRE头部,GRE称为封装协议,也叫运载协议.最后负责对封装后的报文进行转发的协议称为传输协议。
GRE封装和解封装报文的过程
-
设备从连报私网的接口接受到报文后,检查报文头部中的目的IP地址字段,在路由表查找出接口,如果发现出接口是隧道接口,则将报文发送给隧道模块来处理。
-
隧道模块接收到报文后会首先根据乘客协议的类型和当前GRE隧道配置的校验和参数,对报文进行GRE封装,即添加GRE报头。
-
然后,设备给报文添加传输协议报文头.即IP报文头。该IP报文头的源地址就是隧道源地址,目的地址就是隧道目的地址。
-
最后,设备根据新添加的IP报文头目的地址,在路由表中查找相应的出接口,并发送报文,之后,封装后的报文将在公网中传输。
-
接受端设备从连接公网的接口收到报文后,首先分析IP报文头,如果发现协议类型字段的值为47(GRE的协议号),表示协议为GRE协议,于是出接口将报文交给GRE模块处理。GRE模块去掉IP报文头和GRE报文头,并根据GRE报文头部的协议类型字段,发现此报文的乘客协议为私网中运行的协议,于是将报文交给该协议处理。
GRE配置
将R1,R2,R3 的IP配好,R1,R3 配好缺省nat
R1
[R1]interface Tunnel 0/0/0 // 创建隧道接口 [R1-Tunnel0/0/0]tunnel-protocol gre // 定义封装方式 [R1-Tunnel0/0/0]ip address 10.0.0.1 24 // 配置隧道IP [R1-Tunnel0/0/0]source 12.0.0.2 // 定义封装源IP [R1-Tunnel0/0/0]destination 23.0.0.2 //定义封装目的IP [R1]ip route-static 192.168.2.0 24 Tunnel 0/0/0 // 配置静态让其从tunnel0/0/0接口发出
R2
[R3]interface Tunnel 0/0/0 [R3-Tunnel0/0/0]tunnel-protocol gre [R3-Tunnel0/0/0]ip address 10.0.0.2 24 [R3-Tunnel0/0/0]source 23.0.0.2 [R3-Tunnel0/0/0]destination 12.0.0.2 [R3]ip route-static 192.168.1.0 24 Tunnel 0/0/0
GRE实验
MGRE
当然,GRE本身还是存在缺陷的,主要是他创建的通道是一个点到点的隧道,导致其扩展性较差。要是存在多个分公司需要和总部连接,融为一个私网时,利用GRE技术需要打通的通道就太多了。
这种场景就可以使用另一种技术,MGRE,即多点通用路由封装协议。
在这种场景下,如果想要将四个私网融合成一个私网的话,使用GRE隧道,则需要四个私网之间彼此打通一条隧道,这样显然是不方便的。我们希望所有可以像MA网络一样,用一个网段将所有的私网连接起来。虚拟链路的逻辑图应该如下所示。
但这样有个问题,我们GRE是点到点的虚拟隧道,他在发送的时候必须要指定要封装的源IP和目标IP。而现在这种场景下,他是没有办法指定一个具体的目标IP的。所以MGRE的核心任务就是需要想办法将这个过程变成动态的,我和谁通信,目标地址就修改成谁。
这里就需要用到一个协议的辅助,那就是NHRP协议。
NHRP.…下一跳解析协议…妳原理也很简单,我们在这些私网中选择一个出口物理IP不会变的作为NHRP的中心(NHS-下一跳服务器)。这样,剩下的分支就都可以知道中心的隧道IP和物理IP。然后,NHRP要求所有分支都需要将自己物理接口IP6159IP发给NHS。(发生变化就需要重新发送。)这样我们的NHS会将所有的分支的地址映射关系动态的记录在本地。发送信息时查询即可。分支之间需要发送信息也需要获取这个映射关系,就需要先问NHS要。
我们发现我们用MGRE搭建的这个逻辑拓扑也是网络中存在多个节点,但是本身他在发送的时候还是一个点到点的发送,并不存在广播或者组播行为,所以,这样的网络我们可以近似的看作是NBMA网络(这是逻辑上的NBMA,也就是靠技术模拟的。真实的物理上的NBMA网络需要靠帧中继技术搭建,我们不去研究。)
原理
-
中心站点,固定的公有ip地址;建议定义为NHRP的server为中心站点;
-
tunnel配置完成,所有的分支站点将自己当下的信息发送到NHRP的server处,生成映射列表;
-
此时中心站点可以直接和所有的分支站点进行GRE通讯;分支站点间直接GRE,通讯时,需要先到NHRP的server处下载映射列表,之后再进行GRE通讯。
MGRE的配置
在MGRE网络中会存在中心站点和分支站点,分支站点站点需要向中心站点注册自己的隧道信息,当站点间联系时就会先发向中心站点,分支站点查表后再发网目标站点
R1为中心站点其他为分支站点
首先配置好IP,nat及缺省 R5只配IP
R1
[R1]interface Tunnel 0/0/0 // 创建tunnel口 [R1]ip address 10.0.0.1 255.255.255.0 // 配置隧道接口ip地址 [R1]tunnel-protocol gre p2mp // 先修改接口模式为多点GRE [R1]source 15.0.0.2 // 定义公有的源IP地址 [R1]nhrp network-id 100 // 这一步就可以了,这里面需要注意的是这个域ID是具有全局意义的,配置相同的域ID则可以加入到同一个nhrp域中,类似于ospf的进程号。 // 静态路由 [R1]ip route-static 192.168.2.0 24 10.0.0.2 [R1]ip route-static 192.168.3.0 24 10.0.0.3 [R1]ip route-static 192.168.4.0 24 10.0.0.4
R2
[R2]interface Tunnel 0/0/0 // 创建tunnel口 [R2]ip address 10.0.0.2 255.255.255.0 // 配置隧道接口ip地址 [R2]tunnel-protocol gre p2mp // 先修改接口模式为多点GRE [R2]source 25.0.0.2 // 定义公有的源IP地址 [R2]nhrp network-id 100 // 这一步就可以了,这里面需要注意的是这个域ID是具有全局意义的,配置相同的域ID则可以加入到同一个nhrp域中,类似于ospf的进程号。 [R2]nhrp entry 10.0.0.1 15.0.0.2 register // 去往中心站点注册 分别为 中心 隧道IP 物理IP // 静态路由 [R2]ip route-static 192.168.1.0 24 10.0.0.1 //可以时隧道口 [R2]ip route-static 192.168.3.0 24 10.0.0.3 [R2]ip route-static 192.168.4.0 24 10.0.0.4
R3
[R3]interface Tunnel 0/0/0 // 创建tunnel口 [R3]ip address 10.0.0.3 255.255.255.0 // 配置隧道接口ip地址 [R3]tunnel-protocol gre p2mp // 先修改接口模式为多点GRE [R3]source 35.0.0.2 // 定义公有的源IP地址 [R3]nhrp network-id 100 // 这一步就可以了,这里面需要注意的是这个域ID是具有全局意义的,配置相同的域ID则可以加入到同一个nhrp域中,类似于ospf的进程号。 [R3]nhrp entry 10.0.0.1 15.0.0.2 register // 去往中心站点注册 分别为 中心 隧道IP 物理IP // 静态路由 [R3]ip route-static 192.168.2.0 24 10.0.0.2 [R3]ip route-static 192.168.1.0 24 10.0.0.1 [R3]ip route-static 192.168.4.0 24 10.0.0.4
R4
[R4]interface Tunnel 0/0/0 // 创建tunnel口 [R4]ip address 10.0.0.4 255.255.255.0 // 配置隧道接口ip地址 [R4]tunnel-protocol gre p2mp // 先修改接口模式为多点GRE [R4]source 45.0.0.2 // 定义公有的源IP地址 [R4]nhrp network-id 100 // 这一步就可以了,这里面需要注意的是这个域ID是具有全局意义的,配置相同的域ID则可以加入到同一个nhrp域中,类似于ospf的进程号。 [R4]nhrp entry 10.0.0.1 15.0.0.2 register // 去往中心站点注册 分别为 中心 隧道IP 物理IP // 静态路由 [R4]ip route-static 192.168.2.0 24 10.0.0.2 [R4]ip route-static 192.168.3.0 24 10.0.0.3 [R4]ip route-static 192.168.1.0 24 10.0.0.1
查看映射表
<R1>display nhrp peer all
抓包
这里是 R3 在 ping R4 R3会先向R1下载映射信息(初次联通的时候)
MGRE环境下的RIP网络
这里补全路由的过程可以采用最简单的静态路由来完成,那自然也可以通过动态路由协议来完成,这里,我们先通过RIP协议来完成MGRE环境下的路由获取,至于OSPF协议,之后我们在学习了OSPF的细节知识之后,我们再去尝试。
注意,在做RIP宣告的时候,只需要宣告环回网段(私网网段),以及隧道网段即可,公网接口可以不用激活,因为并不需要他去收发RIP数据。也不需要其路由信息,这部分路由我们走的是缺省,我们一开始就配置好了。
当然,在执行完RIP的配置操作之后,我们会发现,这也环境下的网络存在一些问题,并没有完全的按照我们预想的结果来。我们做如下总结︰
在MGRE环境下使用RIP来获取未知网段的路由信息
-
只有获取到分支的路由信息,但是分支并没有获取到中心的路由信息
-
---解决方案---在中心上开启伪广播。---通过给所有分支分别发送数据包达到类似广播的效果。
-
[r1-Tunnel0/0/0]nhrp entry multicast dynamic
-
-
分支在中心开启伪广播后,只能获取到中心的路由信息,但是无法获取分支之间的路由信息。
-
主要是因为华为设备默认开启了RIP的水平分割,导致中心不会再从隧道接口将学来的分支路由发送给其他分支
-
解决方案---关闭接口的水平分割
-
[r1-Tunnel0/0/0]undo rip split-horizon
-
综合练习
相关文章:

HCIP——GRE和MGRE
目录 VPN GRE GRE环境的搭建 GRE的报文结构 GRE封装和解封装报文的过程 GRE配置编辑 R1 R2 GRE实验编辑 MGRE 原理 MGRE的配置 R1 R2 R3 R4 查看映射表 抓包 MGRE环境下的RIP网络 综合练习编辑 VPN 说到GRE,我们先来说个大…...

微信小程序——音乐播放器
一、界面设计 播放页面: 显示当前播放歌曲的封面图片、歌曲名称、歌手名称。有播放 / 暂停按钮、上一首、下一首按钮。进度条显示播放进度,可以拖动进度条调整播放位置。音量调节滑块。 歌曲列表页面: 展示歌曲列表,包括歌曲名称、…...

OceanBase 4.x 部署实践:如何从单机扩展至分布式部署
OceanBase 4.x 版本支持2种部署模式:单机部署与分布式部署,同时支持从单机平滑扩展至分布式架构。这样,可以有效解决小型业务向大型业务转型时面临的扩展难题,降低了机器资源的成本。 以下将详述如何通过命令行,实现集…...

大数据新视界 --大数据大厂之TeZ 大数据计算框架实战:高效处理大规模数据
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

docker详解介绍+基础操作 (三)
1.docker 存储引擎 Overlay: 一种Union FS文件系统,Linux 内核3.18后支持 Overlay2:Overlay的升级版,docker的默认存储引擎,需要磁盘分区支持d-type功能,因此需要系统磁盘的额外支持。 关于 d-type 传送…...

【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers
【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers 目录 文章目录 【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers目录0. 引言1. 简介2 相关工作2.1 基于特征的无监督方法2.2 无监督微调方法2.3…...

【Java】集合中单列集合详解(一):Collection与List
目录 引言 一、Collection接口 1.1 主要方法 1.1.1 添加元素 1.1.2 删除元素 1.1.3 清空元素 1.1.4 判断元素是否存在 1.1.5 判断是否为空 1.1.6 求取元素个数 1.2 遍历方法 1.2.1 迭代器遍历 1.2.2 增强for遍历 1.2.3 Lambda表达式遍历 1.2.4 应用场景 二、…...

【Fine-Tuning】大模型微调理论及方法, PytorchHuggingFace微调实战
Fine-Tuning: 大模型微调理论及方法, Pytorch&HuggingFace微调实战 文章目录 Fine-Tuning: 大模型微调理论及方法, Pytorch&HuggingFace微调实战1. 什么是微调(1) 为什么要进行微调(2) 经典简单例子:情感分析任务背景微调 (3) 为什么微调work, 理论解释下 2…...

清华系“仓颉”来袭:图形起源:用AI颠覆字体设计,推动大模型商业化落地
大模型如何落地?又该如何实现商业化?这一议题已成为今年科技领域的焦点话题。 在一个鲜为人知的字体设计赛道上,清华创业公司“图形起源”悄然实现了商业变现:他们帮助字体公司将成本降低了80%,生产速度提升了10倍以上…...

分布式一致性协议的深度解析:Paxos与Raft
分布式系统的复杂性源于节点失效、网络分区、消息丢失等诸多不确定性。在这种背景下,分布式一致性问题应运而生,成为解决这些问题的核心。本文将从理论到实践,深入探讨两种经典的一致性协议:Paxos与Raft。文章适合有一定分布式系统…...

ai写作,五款软件助你快速写作!
在这个信息爆炸的时代,内容创作成为了连接用户、传递价值的桥梁。然而,面对日益增长的创作需求,如何在保证质量的同时提升效率,成为了每位创作者面临的难题。幸运的是,随着人工智能技术的飞速发展,AI写作软…...

解决JavaScript 数学运算精度丢失的问题
JavaScript 中执行浮点数运算时可能会遇到精度丢失的问题。这通常是因为浮点数的表示遵循IEEE 754标准,而这种表示法只能精确地表示有限的数字。对于大多数程序员来说,这不是一个问题,因为它允许计算机处理超出精度范围之外的数字。然而&…...

mysql学习教程,从入门到精通,SQL窗口函数(38)
1、SQL窗口函数 SQL窗口函数(Window Functions)是一种强大的数据分析工具,它们允许你在结果集的行上执行计算,而不需要将这些行分组到单独的输出行中。窗口函数通常与OVER()子句一起使用,该子句定义了窗口或分区&…...

gbase8s数据库实现黑白名单的几种方案
1、借用操作系统的黑白名单 2、使用数据库 TRUSTED CONTEXT 机制 CREATE TRUSTED CONTEXT tcx1USER rootATTRIBUTES (ADDRESS 172.16.39.162)ATTRIBUTES (ADDRESS 172.16.39.163)ENABLEWITH USE FOR wangyx WITHOUT AUTHENTICATION; 如上创建 可信任上下文对象 tcx1 在 jdb…...

Qt-窗口布局按钮输入类
1. 窗口布局 Qt 提供了很多摆放控件的辅助工具(又称布局管理器或者布局控件),它们可以完成两件事: 自动调整控件的位置,包括控件之间的间距、对齐等; 当用户调整窗口大小时,位于布局管理器内的…...

Apache DolphinScheduler社区9月进展记录
各位热爱 Apache DolphinScheduler 的小伙伴们,社区 9 月月报更新啦!这里将记录 Apache DolphinScheduler 社区每月的重要更新,欢迎关注! 月度 Merge Star 感谢以下小伙伴上个月为 Apache DolphinScheduler 做的精彩贡献&#x…...

在docker中安装并运行mysql8.0.31
第一步:命令行拉取mysql镜像 docker pull mysql:8.0.31查看是否拉取成功 docker images mysql:latest第二步:运行mysql镜像,启动mysql实例 docker run -p 3307:3307 -e MYSQL_ROOT_PASSWORD"123456" -d mysql:8.0.313307:3307前…...

C++ | Leetcode C++题解之第458题可怜的小猪
题目: 题解: class Solution { public:int poorPigs(int buckets, int minutesToDie, int minutesToTest) {if (buckets 1) {return 0;}vector<vector<int>> combinations(buckets 1,vector<int>(buckets 1));combinations[0][0] …...

【万字长文】Word2Vec计算详解(三)分层Softmax与负采样
【万字长文】Word2Vec计算详解(三)分层Softmax与负采样 写在前面 第三部分介绍Word2Vec模型的两种优化方案。 【万字长文】Word2Vec计算详解(一)CBOW模型 markdown行 9000 【万字长文】Word2Vec计算详解(二࿰…...

【分布式微服务云原生】探索Dubbo:接口定义语言的多样性与选择
目录 探索Dubbo:接口定义语言的多样性与选择引言Dubbo的接口定义语言(IDL)1. Java接口2. XML配置3. 注解4. Protobuf IDL 流程图:Dubbo服务定义流程表格:Dubbo IDL方式比较结论呼吁行动Excel表格:Dubbo IDL…...

SAP将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4]
将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4] 有时需要将Spool中的内容导出成PDF文件,sap提供了一个标准程序RSTXPDFT4可以实现此功能。 1, Tcode:SP01, 进入spool requests list 2, SE38 运行程序RSTXPDFT4 输入spool reqeust号码18680,然后…...

DNS能加速游戏吗?
在游戏玩家追求极致游戏体验的今天,任何可能提升游戏性能的因素都备受关注,DNS(域名系统)便是其中一个被探讨的对象。那么,DNS能加速游戏吗? 首先,我们需要了解DNS的基本功能。DNS就像是互联网…...

Raspberry Pi3B+之C/C++开发环境搭建
Raspberry Pi3B之C/C开发环境搭建 1. 源由2. 环境搭建2.1 搭建C语言开发环境2.2 工程目录结构2.3 Makefile2.4 Demo (main.c) 3. 测试工程3.1 编译3.2 运行 4. 总结5. 参考资料 1. 源由 为了配合《Ardupilot开源飞控之FollowMe验证平台搭建》,以及VINS-Fusion对于图…...

[笔记] 仿射变换性质的代数证明
Title: [笔记] 仿射变换性质的代数证明 文章目录 I. 仿射变换的代数表示II. 仿射变换的性质III. 同素性的代数证明1. 点变换为点2. 直线变换为直线 IV. 结合性的代数证明1. 直线上一点映射为直线上一点2. 直线外一点映射为直线外一点 V. 保持单比的代数证明VI. 平行性的代数证明…...

遥感影像-语义分割数据集:sar水体数据集详细介绍及训练样本处理流程
原始数据集详情 简介:该数据集由WHU-OPT-SAR数据集整理而来,覆盖面积51448.56公里,分辨率为5米。据我们所知,WHU-OPT-SAR是第一个也是最大的土地利用分类数据集,它融合了高分辨率光学和SAR图像,并进行了充…...

极狐GitLab 发布安全补丁版本 17.4.1、17.3.4、17.2.8
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...

汽车管理系统中使用函数
目录 setupUisetEnabledcurrentText()setTextsetFocus()query.exec(...)addWidgetconnect setupUi setupUi() 是 ui 对象的一个成员函数,它的作用是根据 .ui 文件中的设计,将设计好的组件(如按钮、文本框、布局等)添加到当前的窗…...

大数据分析入门概述
大数据分析入门概述 本文旨在为有意向学习数据分析、数据开发等大数据方向的初学者提供一个学习指南,当然如果你希望通过视频课程的方式快速入门,B站UP主戴戴戴师兄的课程质量很高,并且适合初学者快速入门。本文的目的旨在为想要了解大数据但…...

提示工程、微调和 RAG
自众多大型语言模型(LLM)和高级对话模型发布以来,人们已经运用了各种技术来从这些 AI 系统中提取所需的输出。其中一些方法会改变模型的行为来更好地贴近我们的期望,而另一些方法则侧重于增强我们查询 LLM 的方式,以提…...

自动化测试中如何高效进行元素定位!
前言 在自动化测试中,元素定位是一项非常重要的工作。良好的元素定位可以帮助测试人员处理大量的测试用例,加快测试进度,降低工作负担。但是在实际的测试工作中,我们常常遇到各种各样的定位问题,比如元素定位失败、元…...