IPSec NAT穿越原理

news2024/11/30 8:39:50

在IPSec VPN部署中,如果发起者位于私网内部(如下图FW_C),而它希望与FW_A之间直接建立一条IPSec隧道,这种情况下NAT会对部署IPSec VPN网络造成障碍。

PC2发业务报文给PC1,IPSec先对IP包头或端口信息进行验证,报文到达NAT设备时,IP地址或端口号会被转换,报文到达FW_A的时候,FW_A进行IPSec数据包的验证,下面分别看一下IPSec使用 AH 和 ESP 两种安全协议时报文能否通过。

  • AH 协议:因为 AH 对数据进行完整性检查,会对包括 IP 地址在内的整个IP 包进行Hash运算。而NAT改变 IP 地址,从而破坏 AH 的 Hash 值。 因此 AH 报文无法通过 NAT 网关。

  • ESP 协议:ESP 对数据进行完整性检查,不包括外部的 IP 头, IP 地址转换不会破坏 ESP 的 Hash 值。但 ESP 报文中 TCP 的端口已经加密无法修改,那么NAT设备读不到端口号,不能进行正常的地址转换。

为了解决这个问题,必须在建立 IPSec 隧道的两个网关上同时开启 NAT 穿越功能(对应命令行 nat traversal)。开启 NAT 穿越功能后,当需要穿越 NAT 设备时, ESP 报文会被封装在一个 UDP 头中,源和目的端口号均是 4500。有了这个 UDP 头就可以正常进行转换。

NAT设备对于私网用户来说是不可见的,这里就有个问题,网络设备怎么知道是否有NAT的存在,什么时候该添加UDP报头,什么时候不该添加?

IPSec一般要先经过IKE协商,交互密钥之后才发送数据。NAT-T(NAT Traversal)技术在IKE协商阶段通过某种机制来发现是否有NAT的存在。有NAT存在的时候添加UDP报头,没有NAT的时候就不添加。

下面分别介绍一下采用 IKEv1 和 IKEv2 时是如何进行 NAT 穿越。

IKEv1 协商 NAT 穿越

  1. 开启 NAT 穿越时, IKEv1 协商第一阶段的前两个消息会发送标识 NAT 穿越(NAT Traversal,简称 NAT-T)能力的 Vendor ID 载荷(主模式和野蛮模式都是)。用于检查通信双方是否支持 NAT-T。


    当双方都在各自的消息中包含了该载荷时,才会进行相关的 NAT-T 协商。

  2. 主模式消息 3 和消息 4(野蛮模式消息 2 和消息 3)中发送 NAT-D(NAT Discovery)载荷。NAT-D 载荷用于探测两个要建立 IPSec 隧道的网关之间是否存在 NAT 网关以及 NAT网关的位置。
    通过协商双方向对端发送源和目的的 IP 地址与端口的 Hash 值,就可以检测到地址和端口在传输过程中是否发生变化。若协商双方计算出来的 Hash 值与它收到的 Hash 值一样,则表示它们之间没有 NAT。否则,则说明传输过程中对 IP 或端口进行了 NAT 转换。第一个 NAT-D 载荷为对端 IP 和端口的 Hash 值,第二个 NAT-D 载荷为本端 IP 和端口的 Hash。
     

  3. 发现 NAT 网关后,后续 ISAKMP 消息(主模式从消息 5、野蛮模式从消息 3 开始)的端口号转换为 4500。ISAKMP 报文标识了“Non-ESP Marker”。

  4. 在第二阶段会启用 NAT 穿越协商。在 IKE 中增加了两种 IPSec 报文封装模式:UDP 封装 隧 道 模 式 报 文 ( UDP-Encapsulated-Tunnel ) 和 UDP 封 装 传 输 模 式 报 文(UDP-Encapsulated-Transport)。通过为 ESP 报文封装 UDP 头,当封装后的报文通过NAT 设备时, NAT 设备对该报文的外层 IP 头和增加的 UDP 头进行地址和端口号转换。UDP 报文端口号修改为 4500。

IKEv2 协商 NAT 穿越

  1. 开启 NAT 穿越后, IKE 的发起者和响应者都在 IKE_SA_INIT 消息对中包含类型为NAT_DETECTION_SOURCE_IP 和 NAT_DETECTION_DESTINATION_IP 的通知载荷。这两个通知载荷用于检测在将要建立 IPSec 隧道的两个网关之间是否存在 NAT,哪个网关位于 NAT 之后。如果接收到的 NAT_DETECTION_SOURCE 通知载荷没有匹配数据包 IP 头中的源 IP 和端口的 Hash 值,则说明对端位于 NAT 网关后面。如果接收到的AT_DETECTION_DESTINATION_IP 通知载荷没有匹配数据包 IP 头中的目的 IP 和端口的 Hash 值,则意味着本端位于 NAT 网关之后。

  2. 检测到 NAT 网关后,从 IKE_AUTH 消息对开始 ISAKMP 报文端口号改为 4500。报文标识“Non-ESP Marker”。

  3. IKEv2 中也使用 UDP 封装 ESP 报文,当封装后的报文通过 NAT 设备时, NAT 设备对该报文的外层 IP 头和增加的 UDP 头进行地址和端口号转换。UDP 报文端口号修改为 4500。

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

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

相关文章

10 个用图表解释JavaScript 闭包的面试题

闭包是函数式编程中的核心概念之一,是每个 JavaScript 开发人员必备的知识。在这里,我准备了 10 个关于闭包的面试挑战题,这些基本都是面试中经常被问到的。 你准备好了吗?我们现在要开始了。 每个题目都有一个代码片段&#xf…

代码随想录算法训练营第五十天| LeetCode123. 买卖股票的最佳时机 III、LeetCode188. 买卖股票的最佳时机 IV

一、LeetCode123. 买卖股票的最佳时机 III 1:题目描述(123. 买卖股票的最佳时机 III) 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意…

小学生学Arduino---------点阵(一)静态图片显示

今天来看一下,点阵模块这一模块可以做出非常有意思的东西。 学习目标: 1、了解点阵原理 2、掌握图形绘制(心形、三角形等) 3、掌握图形显示器的功能 4、掌握led点阵屏幕的功能 5、搭建电路 6、编写程序 一、点阵的原理 LED点阵屏…

Functional Programming in Java venkat(16) Being Lazy part3

文章目录Functional Programming in Java venkat(16): Being LazyLeveraging the Laziness of StreamsIntermediate and Terminal OperationsMethod Evaluation OrderPeeking into the LazinessFunctional Programming in Java venkat(16): Being Lazy 这里是记录学习这本书 F…

linux权限详解

文章目录1.用户转换1.将普通用户转换成root1.su -2. su2.将root转换为普通用户2.文件的权限1.文件访问者的分类拥有者和other所属组2.rwx的含义3.修改权限第一种修改方式1.拥有者修改2.所属组的修改3.other的修改4.整体修改第二种修改方式666000777使用权限的修改1.拥有者用户的…

[事务]-事务概念/特性/并发问题/传播特性

1. 事务的概念 事务(Transaction)指的是一个操作序列,该操作序列中的多个操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位,由DBMS中的事务管理子系统负责…

爬虫工作流程、请求与响应原理、requests库讲解

爬虫工作流程、请求与响应原理、requests库讲解 爬虫分类主要分为两大板块 web爬虫(浏览器爬虫) APP爬虫(手机端爬虫) 在这两大板块中又可以把爬虫归类为聚焦爬虫和通用爬虫 聚焦爬虫:针对某一个接口(ur…

对话框被遮罩层挡住

element-ui 解决方法一: 在el-dialog中写去掉遮罩层 :modal"false" 解决方法二: 在el-dialog中写(遮罩层是否插入至 body 元素上,若为 false,则遮罩层会插入至 Dialog 的父元素上) :modal-ap…

[附源码]SSM计算机毕业设计医院挂号系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

专业硕士招生占比将达到三分之二,那么跟学术硕士有哪些区别?

近年来的研究生招生考试中,专业硕士的招生培养规模正稳步增长。据统计,2009年专业学位硕士招生人数在硕士招生总人数中的占比仅为15.9%,其后在2017年首次超过学硕招生人数,到2020年专硕招生人数占比已超60%。国务院学位委员会、教…

SpringBoot - 集成Actuator(应用信息显示、修改系统日志、增加账号密码登录)

文章目录Actuator概述官网入口支持的埋点信息查询、修改使用访问actuator埋点信息添加账号密码登录验证动态修改日志级别Actuator 概述 官网入口 官网: https://docs.spring.io/spring-boot/docs/2.7.6/reference/html/actuator.html#actuator.endpoints 支持的埋…

csdn中书写数学公式简单介绍

参考:https://www.zybuluo.com/codeep/note/163962#3%E5%9C%A8%E5%AD%97%E7%AC%A6%E9%97%B4%E5%8A%A0%E5%85%A5%E7%A9%BA%E6%A0%BC 常识、常用 一行公式使用$$开始和结尾,常用符号表示 符号功能$$多行公式的开始和结尾,一个$表示单行公式开…

Cisco ASA基础——安全算法与基本配置

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 本章重点 一.Cisco防火墙简介 1.什么是防火墙 2.防火墙的作用…

PHP表单处理的案例分析

目录 知识补充 实现过程 前端代码 后端代码 简单分析 知识补充 表单简介(来自Mr._Dang) action:提交的地址 method:提交的方式 get: 参数是在url中的,不安全,传输量比较少&#xff…

[附源码]Python计算机毕业设计Django的在线作业批改系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

[附源码]Python计算机毕业设计SSM力高灯饰线上交易平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

一言不合就重构

hello,大家好呀,我是小楼。 前段时间不是在忙么,忙的内容之一就是花了点时间重构了一个服务的健康检查组件,目前已经慢慢在灰度线上,本文就来分享下这次重构之旅,也算作个总结吧。 背景 服务健康检查简介…

短视频创作,变现的建议、变现方式和举例,建议收藏反复阅读-上

先说今天的纲要,有兴趣可以继续看下去,今天主要针对短视频变现这件事的讨论,有三个建议,①变现标准低、②变现天花板高、③可主动变现。 我们在选择变现形式的时候,尽可能满足这三个条件或其中两个。 中间我们再讨论下…

【LeetCode】895.最大频率栈

题目描述 设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。void push(int val) 将一个整数 val 压入栈顶。int pop() 删除并返回堆栈中出现频率最高的元素。 如果出现…

【问题思考总结】NAT的公有地址怎么转换为私有地址?【MAC地址和IP地址的转换】

问题起源 在做一道题的时候,涉及到了由内网到外网再到内网时的IP地址转换。在外网的时候,答案说的是不能够用私有IP地址作为源IP地址,然后疑问产生了:如果不能用私有IP地址作为目的地址,他又怎么能够找到那个主机呢&a…