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网络需要靠帧中继技术搭建,我们不去研究。)

原理

  1. 中心站点,固定的公有ip地址;建议定义为NHRP的server为中心站点;

  2. tunnel配置完成,所有的分支站点将自己当下的信息发送到NHRP的server处,生成映射列表;

  3. 此时中心站点可以直接和所有的分支站点进行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来获取未知网段的路由信息

  1. 只有获取到分支的路由信息,但是分支并没有获取到中心的路由信息

    • ---解决方案---在中心上开启伪广播。---通过给所有分支分别发送数据包达到类似广播的效果。

    • [r1-Tunnel0/0/0]nhrp entry multicast dynamic

  2. 分支在中心开启伪广播后,只能获取到中心的路由信息,但是无法获取分支之间的路由信息。

    • 主要是因为华为设备默认开启了RIP的水平分割,导致中心不会再从隧道接口将学来的分支路由发送给其他分支

    • 解决方案---关闭接口的水平分割

    • [r1-Tunnel0/0/0]undo rip split-horizon

综合练习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Http 协议和 RPC 协议有什么区别?

Http 协议和 RPC 协议有什么区别&#xff1f; 三个层面来述说&#xff1a; 从功能特性来说&#xff1a; HTTP是一个属于应用层的超文本传输协议&#xff0c;是万维网数据通信的基础&#xff0c;主要服务在网页端和服务端的数据传输上。 RPC是一个远程过程调用协议&#xff0…

AI+视频监控:EasyCVR安防平台赋能火电制造行业的视频智能管理方案

随着信息技术的飞速发展和智能制造的深入推进&#xff0c;火电制造行业作为国民经济的重要组成部分&#xff0c;正面临着智能化转型的迫切需求。为了提升生产效率、保障设备安全、优化管理流程&#xff0c;火电制造企业迫切需要引入先进的视频监控与人工智能技术。EasyCVR安防监…

TinyOS 点对基站通信

文章目录 一、前言1.1 发包的BlinkToRadio的数据包格式 二、混淆基站源码分析2.1 Makefile2.2 组件连接2.3 主逻辑代码 一、前言 1.1 发包的BlinkToRadio的数据包格式 如下&#xff0c;注意&#xff1a;AM层类型(1byte)即handlerID使可以在组件中修改的。 二、混淆基站源码…

《安富莱嵌入式周报》第343期:雷电USB4开源示波器正式发布,卓越的模拟前端低噪便携示波器,自带100W电源的便携智能烙铁,NASA航空航天锂电池设计

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程 【授人以渔】CMSIS-RTOS V2封装层专题视频&#xff0c;一期视频将常用配置和用法梳理清楚&#xff0…

【Mybatis篇】Mybatis的注解开发

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】&#xff0c;【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 文章目录 &#x1f3af; Select注解 …

自动猫砂盆有必要买吗?高性价比的自动猫砂盆怎么选通通看这篇

最近市面上又新出了很多款式的自动猫砂盆&#xff0c;有些铲屎官蠢蠢欲动&#xff0c;但又在犹豫&#xff0c;自己真的需要自动猫砂盆吗&#xff1f;作为养猫4年的资深铲屎官&#xff0c;在买过这么多猫咪智能用品的里面&#xff0c;最不后悔的就是自动猫砂盆了&#xff01;要知…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第二十五章 Source Insight 的安装和使用

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

ElasticSearch备考 -- Multi match

一、题目 索引task有3个字段a、b、c&#xff0c;写一个查询去匹配这三个字段为mom&#xff0c;其中b的字段评分比a、c字段大一倍&#xff0c;将他们的分数相加作为最后的总分数 二、思考 通过题目要求对多个字段进行匹配查询&#xff0c;可以考虑multi match、bool query操作。…

RabbitMQ的相关题

一、 MQ的作⽤及应⽤场景 类似问题: 项⽬什么场景下使⽤到了MQ, 为什么需要MQ? RabbitMQ 的作⽤?使⽤场景有哪些? RabbitMQ…

【JWT安全】portswigger JWT labs 全解

目录 1.利用有缺陷的 JWT 签名验证 ①接受任意签名 lab1:通过未验证的签名绕过 JWT 身份验证 ②接受无签名的token lab2:通过有缺陷的签名验证来绕过 JWT 身份验证 2.暴力破解密钥 ①使用hashcat lab3:通过弱签名密钥绕过 JWT 身份验证 3.JWT 标头参数注入 ①通过 jwk…

多模态大语言模型(MLLM)-InstructBlip深度解读

前言 InstructBlip可以理解为Blip2的升级版&#xff0c;重点加强了图文对话的能力。 模型结构和Blip2没差别&#xff0c;主要在数据集收集、数据集配比、指令微调等方面下文章。 创新点 数据集收集&#xff1a; 将26个公开数据集转换为指令微调格式&#xff0c;并将它们归类…

大数据新视界 --大数据大厂之 GraphQL 在大数据查询中的创新应用:优化数据获取效率

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【C++】--类和对象(3)

&#x1f911;个人主页: 起名字真南 &#x1f911;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 深入构造函数2 类型转换3 static成员4 友元函数5 内部类6 匿名对象 1 深入构造函数 之前我们实现构造函数的时候&#xff0c;初始化成员变量都是在函数体内赋值&#xff0c…

selenium有多个frame页时的操作方法(5)

之前文章我们提到&#xff0c;在webdriver.WebDriver类有一个switch_to方法&#xff0c;通过switch_to.frame()可以切换到不同的frame页然后才再定位某个元素做一些输入/点击等操作。 比如下面这个测试网站有2个frame页&#xff1a;http://www.sahitest.com/demo/framesTest.h…

5.toString()、构造方法、垃圾回收、静态变量与静态方法、单例设计模式、内部类

文章目录 一、toString()1. 优缺点2. 使用方法举例① Dos类里更省事的方法 ② Application里 二、构造方法1. 导入2. 什么是构造方法3. 怎么写构造方法① 无参的构造方法(无参构造器)② 有参的构造方法(有参构造器)③ 注意 4. 构造方法的重载 三、再探this1. 给成员变量用2. 给…

【用户管理 添加用户 超级用户 用户和组】

用户管理 添加用户超级用户用户和组 添加用户 介绍用户的管理操作 比如&#xff0c;添加一个用户 sudo useradd -m test1 其中&#xff0c;sudo表示管理员身份运行 修改用户密码 sudo passwd test1 删除用户 sudo userdel test 超级用户 1.首次使用时&#xff0c;需要给roo…

快速区分 GPT-3.5 与 GPT-4

问&#xff1a;鲁迅为什么暴打周树人&#xff1f; GPT3.5回答 各种稀奇古怪的理由 GPT4回答 正确区分鲁迅和周树人是同一个人 国内GPT入口 https://ai-to.cn/url/?ulihaimao

Android Preference的使用以及解析

简单使用 values.arrays.xml <?xml version"1.0" encoding"utf-8"?> <resources><string-array name"list_entries"><item>Option 1</item><item>Option 2</item><item>Option 3</item&…

初始Linux(二)基础命令

前言&#xff1a; 之前那一篇我们已经介绍了一部分的基础命令&#xff0c;当然那只不过是九牛一毛&#xff0c;本篇我们继续介绍一些比较重要且需要掌握的基础命令。 mv命令&#xff1a; 其实这个命令有两个功能&#xff0c;一个是移动&#xff08;剪切&#xff09;文件&#…

linux如何与网络时间对齐(雪花算法ID重复)

文章目录 前言一、可能引发什么问题&#xff1f;二、调整步骤1.查看当前系统时间2.修改为中国时区3.同步网络时间4. 雪花id重复 总结 前言 linux服务器是部署服务的不二之选,有个小问题不可忽略&#xff1a; 会发现默认的服务器时间并非中国时区,时间也是相差八小时,中国时区…