IPsec的NAT穿越详解

news2024/11/26 11:29:53

问题场景

左边的支部,它的防火墙上联路由器,由于防火墙内部的接口使用的是私网地址,这就导致其无无法在公网上与对端防火墙进行IPsec的隧道建立 。所以必须在AR5上面不是NAT地址转换,由于一般使用的是NAPT,isakmp协议因为是UDP报文,且没有像AH或者ESP那样有对内容进行签名,所以可以正常地协商IKE SA以及IPsec SA,但是AH和ESP就没有那么简单了

 

 AH和ESP的认证范围如图所示,其实说是认证范围本质上来说应该是进行HASH运算的范围,如图所示,AH的签名范围是包括IP首部的,这就导致如若后续的AH报文在AR路由器上进行NAT转换后,目的端接收到该报文并进行hash值校验时会发现hash不匹配,所以将会导致数据包被丢弃。而对于ESP来说,虽然它的签名范围没有包括IP首部,但是如果在NAPT的场景下,也就是有进行端口复用的场景下,这也同样会导致目的端hash校验的不成功,但是在no-pat的场景下时可以的,但是一般不会这么做。所以就需要NAT穿越。

技术原理

说它是NAT穿越其实也是说的好听,其实又是一个套壳的技术,什么意思?如果你是传输模式,那么就是在IP首部和ESP之间再插入一个UDP首部,源目端口为4500,如果是隧道模式那么就是在新IP首部和ESP首部之间插入UDP首部,对于AH来说,因为它的校验范围是整个IP报文,所以它就和NAT无缘了。对于ESP来说,它的主要问题就是在进行NAPT的过程中端口被替换了,所以才会导致校验的时候出现问题,那么通过在IP首部和ESP首部之间插入UDP层来代替ESP里面的运输层首部进行端口替换就可以完美地解决这个问题。

部署场景和部署细节

场景1、一端做NAT,另一端没有做

在这种部署场景下,我大概说一下要部署的内容,首先左边的防火墙需要配置好IPsec的相关内容,要注意在定义ike peer的时候,要在ike peer视图下开启nat 穿越,输入nat traversal即可,同时需要指定好右边防火墙的地址,然后将相关的IPsec policy应用在接口上。AR路由器只要做NAPT转换即可。因为左边的防火墙使用的是NAT地址转换,有着屏蔽内网的作用,所以右边的防火墙可以直接做ipsec policy,此时指定的IP地址是AR路由器的出接口地址,即便如此右边的防火墙也只能被动的接受左边的防火墙的主动协商,因为NAT屏蔽了内网。也可以配置IPsec策略模板,自己不主动,被动接受协商就好了。右边的防火墙也要开启nat 穿越

场景2、两端都做NAT

 在这种两边都做NAT的情况下,我也大概说一下思路。因为在IPsec的协商过程中肯定是要有人主动进行协商的,所以在两边都被NAT屏蔽内网的情况下,肯定要有一端做nat server,否则协商报文过去后因为被NAT屏蔽了内网的缘故,路由器将无法响应该报文从而导致协商失败,所以我们需要在某一端上创建如下的nat server:

nat server protocol udp global 1.1.1.1 500 inside 192.168.0.1 500

上面这个nat server必须在被动接受协商的一端的路由器上配置

nat server protocol udp global 1.1.1.1 4500 inside 192.168.0.1 4500

这个必须在两端的路由器上都进行配置,如果不配置,那么会导致路由器上因为没有相应的NAT映射表从而导致报文的丢失。在没有开启nat keeplive的时候需要,如果不开启nat keeplive就需要在两端配置端口映射

那么为什么第一个不需要创建nat server?

首先因为左边的防火墙是隧道的主动协商者,且它也是处于NAT网关后的设备,所以虽然它的源地址和源端口会被修改,但是目的地址和目的端口都不会改变,也就是说相关协商报文到达右边的防火墙后是会被正常识别,所以右边的防火墙会正常的回复相关的协商报文,因为左边的防火墙主动发起报文,所以在AR路由器会存在相关的NAT表项,所以右边的防火墙回包的时候会被正常地进行地址转换并将报文转发给左边的防火墙,所以在这种情况下是不需要将500端口映射出去的,那么是否需要做第二条nat server呢?感觉要,但是其实不要,主要是防火墙默认开启了nat keeplive,在ipsec隧道建立之后,防火墙会周期性发送那条keeplive报文,这就使得路由器上的nat映射表得到了周期性的刷新,所以相对于做了一个隐形的端口映射,所以即便路由器上没有做4500端口的映射也可以保证流量的正常通信。

第一个nat sever的主要作用就是让路由器可以将响应的协商报文传递给内部的防火墙进行IPsec的隧道协商。第二个nat server的主要作用就是让esp报文可以进行正常的通过

那么两端的防火墙是如何发现存在NAT网关并将端口从500变为4500的呢?

IKE V1情况

因为ike v1不常用所以就大概说一下。在主模式的阶段一的一,二报文,双方会不仅协商ike sa,还会发送是否开启NAT穿越的标识。双方都知晓互相都开启了nat 穿越后,在阶段一的三,四报文中会携带local address and port hash和remote address and port hash,其含义是本地地址和端口的hash值,以及目的地址和端口的hash值,这些值是防火墙在发送的时候就定义在报文中的,如果对端在接收该报文的时候发现local的hash值以及remote的hash值都进行了改变,那么就说明在两个防火墙之间存在两个NAT网关,如果只是local变化了,那么就说明只有对端的防火墙的前面有NAT网关,如果是只有remote的hash值变化了,那么就说明只有本端的前面有NAT网关。防火墙在察觉了存在NAT网关的情况下,会将后续的五,六报文的源目端口修改为4500,同时后续的协商报文会在运输层首部后面多一层udp encapsulation层。

 

IKE V2的情况

在IKE v 2的IKE_SA_INIT报文中会直接携带NAT_DETECTION_SOURCE和NAT_DETECTION_DESTINATION这两个数据载荷,里面包含的值和IKEv1中的local和remote的hash值是一样的。如下图所示: 

 在后续IKE_AUTH的相互协商中同样也会将源目端口从500修改为4500,并在运输层首部后面多加了一层udp encapsulaion层

 

NAT和IPsec之间的冲突

如图所示目的地址和源地址转换是在VPN之前的,这就导致NAT的操作是先于VPN的,如果要进行VPN加密的报文先进行了NAT的地址转换,导致其原本该加密但是却因为地址转换后无法匹配相关感兴趣流,从而导致没有经过加密就将相关数据流发送出去。如果是nat server的情况下还有可能导致因为进行了nat server操作的缘故导致相关加密报文无法传达到防火墙上进行解封。所以在IPsec与NAT之间我们必须保证它们之间的流量没有任何交集。当然我们可以手动的进行合理的流量分离,也可以直接在nat 策略中明确指明要进行加密的流量是不进行nat操作的,且该策略是最优先匹配的,如下所示:

 在nat-policy中指明相关加密流量的action为no-pat即可

 

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

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

相关文章

ChatGPT评测

总结:ChatGPT很强大,用作学术方面的问答或者软件行业的辅助工具是有一定的作用,但是有些回答设置了限制,并且中文回答方面总是回答一半,需要一直让他继续说,篇幅不是很长,但是往往能说道精髓&am…

最新加装ChatGPT的New Bing申请流程(含出错解决办法)

两天获得New Bing测试资格流程记录 前言一、Microsoft Edge Dev浏览器下载二、Microsoft账号注册与登陆三、浏览器插件下载与添加四、加入候补名单五、写封信给Bing团队 前言 2023.03.08,下午收到了Microsoft Bing公司的邮件,提示测试资格申请成功&…

Qt Xlsx的基本使用

前言 在很多时候 ,我们需要将数据导出,之前我是将数据表导出为CSV格式,CSV文件虽然可以用Excel打开,但相对于真正的Xlsx文件,还是有许多不足的。偶然之间,发现了QtXlsx这个第三方库。 1、QtXlsx官网对QtX…

makefile工具的使用,编写一个或多个文件!(简单易上手)

一、make 和 makefile 是什么 1. make 是一个 命令。 2. makefile 是一个 文件,可以自动化的构建项目。 3. 编写 makefile 需要: (1)依赖关系 (2)依赖方法 二、什么是依赖关系、什么是依赖方法 下面我简单…

【Java】Java核心要点总结:60

文章目录 1. 乐观锁一定就是好的吗2. Synchronized和ReentrantLock有什么异同3. ReentrantLock是如何实现可重入性的4. 和Synchronized相比,可以重入锁ReentrantLock实现原理有什么不同5. AQS框架 1. 乐观锁一定就是好的吗 乐观锁并不一定好,它有自己的适…

chatgpt赋能python:Python实现将一张图片贴到另一张图片上

Python实现将一张图片贴到另一张图片上 在图像处理中,往往需要将多张图片合成一张图片。这里介绍使用Python实现将一张图片贴到另一张图片上的方法。 准备工作 在实现之前,我们需要安装Python的图像处理库Pillow和numpy。 可以通过pip进行安装&#…

创建一个SpringBoot项目

Spring的诞生是为了简化JAVA程序的开发的 快速开发Spring而诞生的 SpringBoot为了快速开发Spring而诞生的一个框架 1)什么是SpringBoot?为什么要学它?(重要) Spring是包含了众多工具方法的IOC容器 SpringBoot就是Spring框架的脚手架,它的存在就是为了快…

软考A计划-系统架构师-官方考试指定教程-(2/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

chatgpt赋能python:Python屏幕输入介绍:了解命令行输入的基本知识

Python屏幕输入介绍:了解命令行输入的基本知识 Python是一种使用广泛的编程语言,用于编写各种类型的应用程序,包括图形用户界面应用程序和基于命令行的应用程序。对于基于命令行的应用程序来说,屏幕输入非常重要。本文将介绍Pyth…

Object.assign用法

Object.assign用法 Object.assign是什么? 首先了解下Object.assign()是什么。我们先看看ES6官方文档是怎么介绍的? Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。简单来说,就是Obj…

stm32超声波测距代码

操作思路: 初始化时将trig和echo端口都置低,首先向给trig 发送至少10 us的高电平脉冲(模块自动向外发送8个40K的方波),然后等待,捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时…

(附源码)python音乐电台推荐系统的设计与实现 毕业设计 301210

音乐电台推荐系统 摘 要 随着人类向信息社会的不断迈进,风起云涌的信息时代正掀起一次新的革命,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的音乐电台推荐系统来管理音乐电台信息&#xff0…

OpenAI 接口文档-(中文版)-(一)

介绍 Introduction 您可以通过来自任何语言的 HTTP 请求、我们的官方 Python 绑定、我们的官方 Node.js 库或社区维护的库与 API 进行交互。 若要安装官方 Python 绑定,请运行以下命令: pip install openai 要安装官方的 Node.js 库,请在 No…

chatgpt赋能python:Python将空格改为换行符

Python将空格改为换行符 在Python编程中,经常需要对字符串进行处理,其中包括将空格替换为换行符。这篇文章将会介绍如何使用Python来实现这个目标,并分享一些关于字符串处理的技巧。 为什么要将空格改为换行符 将空格改为换行符可以让文本…

chatgpt赋能python:Python屏蔽一段代码

Python屏蔽一段代码 在Python编程中,有时我们需要屏蔽一段代码以便于调试或者测试。在很多情况下,我们可能不想删除这段代码,因为需要在将来的某个时间再次使用它。为了解决这个问题,我们可以使用Python中的注释语句或者条件语句…

Vue3中集成Unreal 5.2 像素流(Pixel Streaming插件)

目录 1. 创建一个Unreal项目2. 启用Pixel Streaming插件3. 下载Unreal 5.2对应的Pixel Streaming Infrastructure4. 创建一个Vue项目5. 推流方式一:使用Unreal Engine 5.26. 推流方式二:打包项目参考资源: 1. 创建一个Unreal项目 默认大家都…

机器人的免费使用方法

目录 一、机器人是什么? 二、机器人免费使用的方法: 第一点:电脑端 第二点:手机端 三、结语: 一、机器人是什么? 博主理解:方便生活,比Siri更加高级,能够智能的对我们…

chatgpt赋能python:Python就业前景分析

Python就业前景分析 Python已成为全球最流行的编程语言之一,因其易学、易用、高效、可扩展性强等特点,Python在各个领域都发挥着重要作用。Python的发展和应用迅猛,拥有Python编程经验的工程师在各个领域都面临着广泛的就业机会。 Python的…

推荐一个Edge浏览器中的一个好用问答插件。

目录 ChatGPT介绍:一、ChatGPT是什么?二、ChatGPT发展:三、ChatGPT 优点:四、Edge浏览器插件五、结语: ChatGPT介绍: 一、ChatGPT是什么? ChatGPT 是一个基于语言模型 GPT-3.5 的聊天机器人,ChatGPT模型是Instruct GPT的姊妹模型(siblingmodel&#x…

Sql Server 自动备份

Sql Server 自动备份 文章目录 Sql Server 自动备份1. 打开SQL Server,在管理下找到”维护计划”,右键点击”维护计划向导”,如图;2. 再次点击维护计划向导3. 在选择维护任务下勾选”备份数据库”、”清楚维护任务”4.选择需要备份…