华为HCIE课堂笔记第十七章 广域网互联技术
第十七章 广域网互联技术
17.1 GRE VPN
GRE VPN用于分支与分支通过私网地址互联,通过在私网报文上添加一个GRE的头部,以及添加一层外层的IP头部,通过外层头部中的目IP地址使得报文到达隧道对端接口,并解封装得到原始的私网报文。隧道的两个源目IP地址就相当于是形成了一个隧道。
17.1.1 报文格式
格式:外层的帧头+外层IP头部+GRE头部+内层的IP头部+载荷部分
外层帧头:由报文外层目的IP地址及查找路由的下一跳决定。
外层IP头部:Tunnel接口中配置的隧道远端IP地址和隧道目的端IP地址决定
GRE头部:
- 1、C bit位:如果置1,表示该头部中携带校验和字段(可变字段),置0不携带
- 2、K bit位:如果置1,表示该头部中携带Key字段(主要是用于隧道通信时进行隧道合法性验证),置0不携带。
- Recursion:该字段表示报文经过了几层GRE的封装,防止报文进行无限次数封装。GRE头部最多3层,设备收到超过3层GRE的封装的报文,则丢弃。
- Protocol type字段:乘客协议,是指GRE报文内部中封装的私网报文是何种协议。
私网IP头部:源目IP地址是互访的两条私网设备自身地址。
GRE隧道是承载3层数据通信的L3VPN,支持广播、组播、单播、因此该隧道中可以传递动态路由协议,可以承载IPv4和IPv6报文。
17.1.2 GRE功能
1、Keepalive机制
GRE默认不开启Keepalive 机制,手动开启后,设备将按照默认5s的周期发送Keepalive报文给隧道对端的接口,如果重传3次,对端仍为未回复Keepalive报文,则认为隧道Down。
2、校验和机制
GRE头部中Cbit位置1,表示携带校验和字段,校验和根据载荷部分报文hash计算得来,一起发送给对端,对端收到报文之后,对载荷部分重新按照相同算法再进行一次校验,得出校验值与报文GRE头部中的校验和进行比较,相同则接受,不同则丢弃。
- Key功能
GRE隧道两端设备都隧道接口都设置相同的关键字(key),收发报文关键字必须一致,否则就丢弃报文。Kbit位置1,携带Key字段。
- 动态路由:支持IGP协议直接通过隧道学习分支路由表
- 在私网的IGP中通告GRE Tunnel接口的本身的IP地址,但是不同通告隧道的源地址。
- 如果通告了隧道的源地址(公网地址),公网地址也通过隧道封装,会导致报文重复进行GRE封装,而封装失败。(隧道接口网络层协议平繁的up和down)
- 应用场景:MPLS VPN 中CE设备和PE设备非直连,通过GRE隧道在CE和PE之间建立GRE VPN,PE上创建实例在Tunnel 接口下绑定。
17.2 L2TP VPN
- 概念:
- NAS:网络接入服务器,连接的终端的拨号网络(也是LAC)
- LAC:网络接入客户端,发起L2TP连接的设置(一般为出差员工的终端设备)
- LNS:L2TP网络服务器,与LAC是一对,接收L2TP的连接请求的服务器。(一般总部的出口设备)
- 组网模型:三种,常用远程办公连接
- 远程办公设备作为LAC直接向LNS进行拨号
- 分支的出口设备作为LAC向总部LNS进行拨号
- 分支的终端设备通过PPPoE向ISP的NAS进行拨号,NAS作为LAC向总部的LNS进行L2TP拨号连接。
- 消息类型:控制消息和数据消息
- 控制消息:主要是用于隧道建立,会话建立拆除等
- 公网IP头部+UDP头部+L2TP头部+控制消息部分
- 数据消息
- 公网IP头部+UDP头部+L2TP头部+PPP头部+私网IP头部+数据部分
- 控制消息:主要是用于隧道建立,会话建立拆除等
-
- IPsec VPN
17.3.1 IPsec的功能:
-
-
- 加密、认证,提供报文的安全
- 防重放机制:防止恶意大量复制IPsec报文并发送给IPsec目标设备,消耗目标设备系统资源
- 不可否认性:通过对通信双方身份进行信息认证。
-
17.3.2 加密方式
对称加密:用于数据传输过程中对报文的加密,加密和解密使用相同的密钥进行。
加解密需要用密钥算法和密钥(密码)。DES、3DES算法,AES算法。
非对称加密:用于身份认证,保护对称密钥,加密和解密使用不同的密钥进行。DH算法,RSA算法。公钥和私钥,公钥是公开的,所有人可以得到该用户的公钥,私钥用户自己保存,不能泄露。
- 数据认证:主要作用是报文被篡改后能够及时发现
- A将报文和报文hash计算之后的hash值一起发送给B
- B将报文的内容重新进行hash计算,得出的hash值与报文携带的hash值进行比较,相同则说明报文未被修改,接收。不同则说明报文被篡改,丢弃不接受。
17.4 IPsec 工作原理
- 加密思路:
- 通信报文通过对称密钥A进行加解密,需要保障密钥A交互的过程中必须要安全
- 使用对端的公钥B1进行加密对称密钥A,得到密钥A的密文X
- 对端收到密文X后,通过自己的私钥B2进行解密,得到对称密钥A,用于数据通信加密。
- IPsec SA(安全联盟):用于隧道建立的一些要素的约定,包含了加密算法、认证算法、封装的类型(隧道模式封装,传输模式封装)。两个方向,对于同一个通信的两个点,本端设备上会存在两个IPsec SA(inbound和outbound方向)。Ipsec隧道的建立过程,就是SA的建立过程。两种方式:手工和IKE自动建立。
- IPsec加密和认证
- 认证:本端根据加密算法,将自己的报文A加密得到A1,在根据认证算法将A1进行hash计算,得到hash值ICV,ICV与A1一起发送给对端。
- 对端将根据相同的认证算法,对报文进行hash计算,得到ICV与报文后携带ICV进行比较,相同则进行解密,不同,则丢弃。
- 解密:对端根据解密算法,将报文A1进行解密得到原始报文A
- 两种传输协议:AH(支持认证)、ESP(认证、加密)
- 两种封装模式:隧道封装、传输模式封装
- 隧道封装报文:AH
- 原报文:私网IP+Data部分
- AH封装后报文:外层IP+AH头部(ICV)+私网IP头部+Data部分
- AH认证的部分:外层IP头部到Data部分(包含这两个部分)
- 隧道封装报文:ESP
- 原报文:私网IP头部+Data部分
- ESP封装后的报文:外层IP头部+ESP头部+私网IP头部+Data部分+ESP尾部+ESP认证数据
- ESP加密后的报文:私网IP头部+Data部分+ESP尾部
- ESP认证范围:ESP头部+私网IP头部+Data部分+ESP尾部
- 对加密后的报文进行认证,将认证后计算的Hash值放入到ESP认证数据部分,报文格式:外层IP头部+ESP头部+私网IP头部+Data部分+ESP尾部+ESP认证数据
- 传输模式封装报文:AH
- 原报文:私网IP+Data部分
- AH封装后:私网IP+AH头部+Data部分
- 认证范围:私网IP+AH头部+Data部分
- 传输模式封装报文:ESP
- 原报文:私网IP+Data部分
- ESP封装后:私网IP头部+ESP头部+数据部分+ESP尾部+ESP认证数据
- 认证范围:ESP的头部+数据部分+ESP的尾部,认证数据放到报文尾部ESP认证数据字段
- 加密范围:数据部分+ESP尾部
- 总结:AH的认证范围是包含外层IP头部;ESP的加密范围是ESP头部之后的数据(隧道模式包含内层的IP头部)+ESP尾部;ESP认证范围是ESP的头部到ESP尾部中间(包含头尾)。
- 隧道封装报文:AH
17.5 IPsec 隧道动态建立过程
17.5.1 IKE 协议动态建立IPsec SA
IKE两个版本:v1版本和V2版本
- IKE V1版本:两种模式,主动模式和野蛮模式,两个阶段
- 主动模式:第一阶段,6个报文,三次交互
- 1,2个报文进行IKE提议的交互,确定IKE SA
- 3,4个报文交互密钥材料,生成相同的密钥,生成飞对称密钥。
- 5,6个报文使用第2步生成密钥对身份认证和过程的认证报文交互进行加密保护
- 野蛮模式:第一阶段,3个报文
- 1,2个携带IKE 提议、身份和验证信息,交互报文确定IKE SA
- 发送验证数据
- 快速模式:第二阶段,主要的任务协商IPsec SA,该过程使用第一阶段生成的密钥进行加密保护。
- 1,2报文进行IPsec 提议的交互,协商IPsec SA
- 发送方发送确认信息,确认与响应方可以通信,协商结束。
17.5.2 IKE v2
除了初始交换过程开始两个报文不加密,其他报文均加密
1、初始交换:用于协商IPsec SA的,4个报文,其中两个报文用于交互IKE参数,2个报文用于进行身份和过程认证。
2、子SA交换过程,如果需要协商过个IPSec SA,每增加一个SA,增加一次子SA交换过程即可
3、通知交换过程:用于交换查错信息,消息信息等。
17.6 IPsec NAT穿越
AH协议由于要对报文的外层IP头部进行认证,经过了NAT设备后,IP头部发生改变,会导致对端接受到报文后,认证失败,因此AH不支持NAT穿越
ESP协议,新增加封装UDP头部,则可以支持NAT穿越。
NAT-T 功能,开启NAT-T,检测数据包的源IP地址和端口号,将源IP地址与源端口号hash计算,传递给对端,对端收到报文后,将报文的IP源IP地址和与源端口再次hash计算,得出的结果不同,则认为报文经过了NAT设备。
NAT穿越只能通过分部发起IPsec协商,如果需要总部发起IPsec协商可以在NAT设备上,将端口500和4500一起映射到公网。总部发起IPsec协商的地址是分部的公网地址。如果不映射,分部发起IPsec协商,总部采用策略模版配置。
NAT-T场景,IPsec网关在分支的NAT设备后面,分支访问总部,在NAT设备上创建NAT会话表,总部回包根据NAT会话,NAT设备进行向内部转发。总部无法主动访问分支,因为NAT设备上不存在NAT会话表。但是如果存在NAT会话表,总部也可以主动访问分支IPsec网关。
NAT会话保活:分支IPsec网关周期默认20s一次发送NAT保活报文,用于保留NAT设备上的NAT映射表,此时总部和分支都可以主动任意互访。
17.7 NAT穿越
17.7.1 NAT的类型
- 圆锥型:同一个内部tuple转换为同一个外部tuple
- 完全圆锥型:收到报文检查报文的目的地址与映射表中的外部tuple是否相同,相同则转发
- 限制圆锥型:收到报文之后,检查报文的目的地址与映射表中的外部tuple是否相同,还检查报文的源地址是否与映射表中的目的tuple是否相同。
- 端口限制圆锥型:收到报文之后,检查报文的目的地址与因设备表的外部tuple是否相同,还检查报文的源地址与端口号是否与目的tuple相同。
- 对称型:同一个内部tuple加上同一个目的tuple转为同一个外部tuple,否则不同的外部tuple;收到报文后检查项和端口限制圆锥型相同。
17.7.2 映射表
存在三个tuple:
-
- 内部tuple:私网IP地址和私网端口号(转换前的IP地址和端口号)
- 外部tuple:转换后的IP地址和端口号(公网IP地址和端口号)
- 目的tuple:私网设备经过NAT设备访问公网设备,报文的目的IP地址和端口号。
17.7.3 NAT穿越
NAT ALG技术:对应用层报文的内容进行识别,并修改应用层报文的内容,提前建立映射表。实现NAT穿越。典型应用是FTP协议。
参考命令:
[Huawei]nat alg all enable //使能所有可以支持的应用层协议支持ALG功能。
STUN技术:作用主要适用于获取NAT地址转换映射关系
- 内网设备发送绑定请求消息,给到STUN服务器,服务器收到请求消息后,从消息中读取设备的源地址(私网地址和端口号),以及报文的源地址(公网地址和端口号)的映射关系。将绑定关系回复给内网设备(客户端)
- 通过BGP协议相互学习对方的NAT信息,从而或者对方的映射信息,私网之间设备通信访问映射消息中的公网地址和端口号即可。
- 必须是要完全圆锥型NAT才能支持。
相关文章:
华为HCIE课堂笔记第十七章 广域网互联技术
第十七章 广域网互联技术 17.1 GRE VPN GRE VPN用于分支与分支通过私网地址互联,通过在私网报文上添加一个GRE的头部,以及添加一层外层的IP头部,通过外层头部中的目IP地址使得报文到达隧道对端接口,并解封装得到原始的私网报文…...
代码随想录算法训练营第17天(二叉树5)| 找树左下角的值二叉树的路径总和从中序与后序遍历序列构造二叉树从前序与中序遍历序列构造二叉树
513.找树左下角的值 leetcode题目地址 题目链接/文章讲解/视频讲解 如果使用递归法,如何判断是最后一行: 其实就是深度最大的叶子节点一定是最后一行。 //迭代法 class Solution { public:int findBottomLeftValue(TreeNode* root) {queue<TreeNod…...

代码随想录 Leetcode106. 从中序与后序遍历序列构造二叉树
题目: 代码(首刷看解析 2024年1月30日): class Solution { public:TreeNode* recursion(vector<int>& inorder, vector<int>& postorder, int longthOfLeft, int longthOfRight) {if (postorder.size() 0) …...
Log4j Log4j2
前言 今天抽时间来把这个日志框架学学,毕竟经常用,虽然不用自己写,但是书到用时方恨少,技多不压身。而且最近我的 GUI 软件中有一个关于日志问题的希望学完能够感觉解决掉。 Log4j & Log4j2 Log4j2 是 Log4j 的升级版&#x…...

C语言——如何进行文件操作
大家好,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流 本文由:残念ing原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客,欢迎各位→…...
python中for循环的几个现象
1. 运行如下代码 l [{}, {}, {}] for k in l:k[1] 1 print(l) 输出为 [{1: 1}, {1: 1}, {1: 1}]2. 运行如下代码 l [{}, {}, {}] for k in l:k {1:1} print(l) 输出为 [{}, {}, {}] 3. 运行如下代码 l [1,2,3] for k in l:k k * 2 print(l)输出为 [1, 2, 3…...

openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板
文章目录 openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板概述笔记工程中需要的openssl的库实现补充 - 最终的模板工程END openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板 概述 openssl3.2 - 测试程序的学习 整了几个test.c, 每开一个新的测试工…...

Delphi.cz采访Embarcadero捷克共和国办事处经理:理查德·库巴特 - 第一部分
Embarcadero捷克办事处主任理查德库巴特(Richard Kubt,55 岁)接受了我的采访。 Radek Červinka (RČ):库巴特先生您好,感谢您抽出时间访问 delphi.cz。 一开始:我在某处听说您是一名程序员,从…...

AI投资或成科技裁员罪魁祸首
最近的科技裁员让许多人对这个行业的稳定性产生了疑问。然而,仔细观察发现,这些裁员并不是经济困境的迹象,而是科技公司为了重新调整优先事项并投资未来而进行的战略举措。科技行业正投入数十亿美元用于人工智能(AI)&a…...

解读BEVFormer,新一代自动驾驶视觉工作的基石
文章出处 BEVFormer这篇文章很有划时代的意义,改变了许多视觉领域工作的pipeline[2203.17270] BEVFormer: Learning Birds-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers (arxiv.org)https://arxiv.org/abs/2203.17270 BEV …...

【React教程】(1) React简介、React核心概念、React初始化
目录 ReactReact 介绍React 特点React 的发展历史React 与 Vue 的对比技术层面开发团队社区Native APP 开发 相关资源链接 EcmaScript 6 补充React 核心概念组件化虚拟 DOM 起步初始化及安装依赖Hello World React React 介绍 React 是一个用于构建用户界面的渐进式 JavaScrip…...

云计算中的弹性是什么?
云弹性是指当客户需求增加或减少时,自动从数据中心配置和取消配置资源。这使得云资源(包括计算、存储和内存资源)能够根据需求变化快速重新分配。CPU/处理、内存、输入/输出带宽和存储容量等计算资源可以根据需要增加或减少,而不会影响系统性能。 它旨在…...
Vue3基础:pnpm是什么?npm和pnpm的区别?如何使用pnpm?
pnpm 是一个流行的 JavaScript 包管理器,类似于 npm 和 yarn。它是 performant npm 的缩写,意在表明它是一个更高效的 npm 替代品。pnpm 的主要特点和优势包括: 高效的存储空间使用 pnpm 使用称为“内容寻址存储”的机制来存储 npm 包。这意…...
vue中父组件直接调用子组件方法(通过ref)
目录 1、vue2 中,父组件调用子组件的方法 2、vue3 中,父组件调用子组件的方法 1、vue2 中,父组件调用子组件的方法 在Vue 2中,父组件可以通过使用ref属性来引用子组件的实例,然后通过该实例调用子组件的方法。 首先…...

Gunicorn性能优化:提升Python Web应用的服务效率
在Python Web开发中,Gunicorn作为WSGI HTTP服务器,常常作为Web应用(如Django或Flask)与反向代理或负载均衡器之间的桥梁。为了充分发挥其性能,本文将提供一些实用的Gunicorn配置建议。 Gunicorn架构 Gunicorn采用了预…...
如何使用ssh key免密码登录服务器?
以下是使用密钥对免密码登录服务器的具体指令操作步骤: 步骤一:生成密钥对 在本地电脑上打开终端或命令提示符,运行以下命令生成密钥对: ssh-keygen -t rsa -C "your_emailexample.com" 该命令会提示您选择保存密钥…...

macos Android平台签名证书(.keystore)
一、申请appid的使用说明(有appid的请忽略申请appid) 创建应用 申请的appid在源码视图填写后会自动生成一个对应的包名 ⚠️注意:申请appid的时候应用名称和项目名称保持一致。 二、 Android如何使用自用证书进行打包 1.找到安装jdk的路径…...

Kotlin快速入门系列2
Kotlin的基本数据类型 Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。 Java和kotlin数据类型对照如下: Java基本数据类型 Kotlin对象数据类型 数据类…...

单片机之keil软件环境搭建
简介 Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。 目前软件对中文的支持不友好,不建议安装网上的一些汉化包…...

数学公式OCR识别php 对接mathpix api 使用公式编译器
数学公式OCR识别php 对接mathpix api 一、注册账号官网网址:https://mathpix.com 二、该产品支持多端使用注意说明(每月10次) 三、api 对接第一步创建create keyphp对接api这里先封装两个请求函数,get 和post ,通过官方…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...