IPSec NAT穿越原理

一、IPSec VPN在NAT场景中存在的问题

当某些组网中,有的分支连动态的公网IP地址也没有,只能由网络中的NAT设备进行地址转换,才能访问互联网,然而IPsec是用来保护报文不被修改的,而NAT需要修改报文的IP地址,我们分析一下ISAKMP消息报文和数据流量。

协商是由ISAKMP消息完成的,ISAKMP经过UDP封装,源目端口为500,NAT设备可以转换消息的IP地址和端口,也就是ISAKMP消息可以顺利完成NAT转换。

数据流量有两种协议,AH和ESP,我们先分析一下AH协议。

AH协议,不管是传输模式还是隧道模式,都验证整个数据包,包括AH报文头和IP报文头,也就是NAT修改之后,必然破坏数据包完整性,无法通过对端的验证,最终被丢弃。

ESP协议认证范围不包括外部IP报文头或者新的报文头,因此进行NAT转换时,不会破坏数据包的完整性,由于ESP具有加密功能,分析一下加密是否有影响,ESP报文会对TCP/UDP报文进行加密,即NAT设备是无法修改端口,因此ESP主要是存在加密问题导致NAT无法与其共存。

采用AH安全协议完全不支持NAT穿越场景,ESP安全协议受限于端口,需要用额外端口实现。

二、NAT穿越功能及原理

1、NAT穿越功能

为了解决上述问题,引入了NAT穿越功能,即NAT-Traversal,简称NAT-T,开启NAT穿越功能后,VPN网关会探测NAT设备,当检测到NAT设备时,VPN网关把ESP报文封装到一个新的UDP报文头中,源目端口为4500。

这样,不管是传输模式还是隧道模式,IPsec报文中都有不用加密和验证的IP报文头和UDP报文头,当IPsec报文到达NAT设备时,NAT设备即可修改其IP报文头和UDP报文头中的IP地址和端口。

2、NAT穿越原理

①开启NAT穿越功能后,IKEv1协商的第一阶段会互相发送标识NAT穿越功能的Vendor ID载荷,用于确认彼此是否支持NAT穿越功能。

②主模式消息3和消息4中发送NAT-D ( NAT Discovery )载荷。NAT-D载荷用于探测两个要建立IPSec隧道的网关之间是否存在NAT设备以及NAT设备的位置。

Remote HASH: 指将发送报文中的目的IP地址和端口号进行HASH运算后的数值。

Local HASH: 指将发送报文中的源IP地址和端口号进行HASH运算后的数值。

通过对比Remote HASH和Local HASH值,可以判断网关之间是否存在NAT设备以及NAT网关的位置。

③发现NAT设备后,后续ISAKMP消息(主模式从消息5开始)的端口号转换为4500。

三、NAT穿越会话保活机制

如图所示为NAPT场景,网关1处在NAT设备之后。若网关1未主动发起访问,则NAT设备不存在NAT会话表项,此时网关2无法访问网关1。

为解决以上问题,需要网关1开启NAT会话保活功能。开启后,网关1会定期发送NAT Keepalive报文,使NAT设备上产生并维持NAT表项,使得网关2可以主动访问网关1。

NAT Keepalive报文格式非常简单,在UDP头部之后为两个十六进制F,用于刷新NAT设备会话表项。
华为防火墙检测出IPSec VPN处于NAT穿越场景后,NAT设备内侧设备(发起方网关1)会定期发送NAT Keepalive报文,保证中间NAT设备上的源NAT会话不老化。

四、NAT穿越场景

场景一:经过NAT的分支公网IP地址固定。

基础配置不再这里赘述,主要讲解安全策略以及IPsec的配置和NAT配置,由于转换后的公网地址是固定的,因此FW1可以采用模板方式或者使用ISAKMP方式来配置。即使使用了ISAKMP方式配置IPsec,此处总部也无法主动与分部建立IPsec隧道。

[FW1]firewall zone trust
[FW1-zone-trust]add interface g1/0/1
[FW1-zone-trust]quit
[FW1]firewall zone untrust
[FW1-zone-untrust]add interface g1/0/0
[FW1-zone-untrust]quit[FW1]acl number 3000
[FW1-acl-adv-3000]rule 5 permit ip source 192.168.0.0 0.0.0.255 destination 172.16.1.0 0.0.0.255[FW1]ike proposal 10[FW1]ipsec proposal pro1
[FW1-ipsec-proposal-pro1]transform esp
[FW1-ipsec-proposal-pro1]quit[FW1]ike peer fenzhi
[FW1-ike-peer-fenzhi]undo version 2
[FW1-ike-peer-fenzhi]pre-shared-key test
Info: The password you entered does not meet the minimum complexity requirement.
The password is suggested to contain at least three types of characters from thefollowing four groups: Uppercase letters <A-Z>; Lowercase letters <a-z>; Numera
ls <0-9>; Symbols (all characters not defined as letters or numerals), such as !
,$,#, and %.
[FW1-ike-peer-fenzhi]ike-proposal 10
[FW1-ike-peer-fenzhi]nat traversal 
[FW1-ike-peer-fenzhi]remote-address 2.2.2.10
[FW1-ike-peer-fenzhi]remote-address authentication-address 172.16.0.2[FW1]ipsec policy policy1 1 isakmp
Info: The ISAKMP policy sequence number should be smaller than the template poli
cy sequence number in the policy group. Otherwise, the ISAKMP policy does not ta
ke effect.
[FW1-ipsec-policy-isakmp-policy1-1]security acl 3000
[FW1-ipsec-policy-isakmp-policy1-1]proposal pro1
[FW1-ipsec-policy-isakmp-policy1-1]ike-peer fenzhi
[FW1-ipsec-policy-isakmp-policy1-1]quit
[FW1]interface g1/0/0
[FW1-GigabitEthernet1/0/0]ipsec policy policy1[FW1]ip route-static 0.0.0.0 0 1.1.1.2
[FW2]acl number 3000
[FW2-acl-adv-3000]rule 5 permit ip source 172.16.1.0 0.0.0.255 destination 192.168.0.0 0.0.0.255[FW2-acl-adv-3000]quit
[FW2]ike proposal 10
[FW2-ike-proposal-10]display this
2024-03-10 11:17:22.240 
#
ike proposal 10encryption-algorithm aes-256dh group14authentication-algorithm sha2-256authentication-method pre-shareintegrity-algorithm hmac-sha2-256prf hmac-sha2-256
#
return
[FW2-ike-proposal-10]quit[FW2]ipsec proposal pro1
[FW2-ipsec-proposal-pro1]transform esp
[FW2-ipsec-proposal-pro1]quit[FW2]ike peer zongbu
[FW2-ike-peer-zongbu]undo version 2
[FW2-ike-peer-zongbu]pre-shared-key test
Info: The password you entered does not meet the minimum complexity requirement.
The password is suggested to contain at least three types of characters from thefollowing four groups: Uppercase letters <A-Z>; Lowercase letters <a-z>; Numera
ls <0-9>; Symbols (all characters not defined as letters or numerals), such as !
,$,#, and %.
[FW2-ike-peer-zongbu]ike-proposal 10
[FW2-ike-peer-zongbu]remote-address 1.1.1.1
[FW2-ike-peer-zongbu]nat traversal
[FW2-ike-peer-zongbu]quit[FW2]ipsec policy policy1 1 isakmp
Info: The ISAKMP policy sequence number should be smaller than the template poli
cy sequence number in the policy group. Otherwise, the ISAKMP policy does not ta
ke effect.
[FW2-ipsec-policy-isakmp-policy1-1]security acl 3000
[FW2-ipsec-policy-isakmp-policy1-1]proposal pro1
[FW2-ipsec-policy-isakmp-policy1-1]ike-peer zongbu
[FW2-ipsec-policy-isakmp-policy1-1]quit[FW2]interface g1/0/0
[FW2-GigabitEthernet1/0/0]ipsec policy policy1
[FW2-GigabitEthernet1/0/0]quit[FW2]ip route-static 0.0.0.0 0 172.16.0.1
[FW1-policy-security]display this
2024-03-10 12:55:27.460 
#
security-policyrule name untr_to_localsource-zone untrustdestination-zone localsource-address 2.2.2.0 mask 255.255.255.0destination-address 1.1.1.0 mask 255.255.255.0action permitrule name untr_to_trsource-zone untrustdestination-zone trustsource-address 172.16.1.0 mask 255.255.255.0destination-address 192.168.0.0 mask 255.255.255.0action permit
#
return[FW2]security-policy
[FW2-policy-security]display this
2024-03-10 12:03:26.930 
#
security-policyrule name tr_to_untrsource-zone trustdestination-zone untrustsource-address 172.16.1.0 mask 255.255.255.0destination-address 192.168.0.0 mask 255.255.255.0action permitrule name untr_to_localsource-zone untrustdestination-zone localsource-address 1.1.1.0 mask 255.255.255.0destination-address 172.16.0.0 mask 255.255.255.0action permitrule name local_to_untrsource-zone localdestination-zone untrustsource-address 172.16.0.0 mask 255.255.255.0destination-address 1.1.1.0 mask 255.255.255.0action permit
#
return
[NAT]acl 2001
[NAT-acl-basic-2001]rule permit source 172.16.1.0 0.0.0.255
[NAT-acl-basic-2001]rule permit source 172.16.0.0 0.0.0.255
[NAT-acl-basic-2001]quit
[NAT]nat address-group 1 2.2.2.10 2.2.2.10
[NAT]interface g0/0/2
[NAT-GigabitEthernet0/0/2]nat outbound 2001 address-group 1

测试并抓包分析(防火墙G1/0/0抓包,此处源IP地址还未转换)。

抓包可知,主模式下,ISAKMP协商交换的包6个。(防火墙G1/0/0抓包,此处源IP地址还未转换

第一阶段会互相发送标识NAT穿越功能的Vendor ID载荷,用于检查通信双方是否支持 NAT-T。当双方都在各自的消息中包含了该载荷时,才会进行相关的 NAT-T 协商。(防火墙G1/0/0抓包,此处源IP地址还未转换

主模式消息3和消息4中发送NAT-D ( NAT Discovery )载荷。NAT-D载荷用于探测两个要建立IPSec隧道的网关之间是否存在NAT设备以及NAT设备的位置。

Remote HASH: 指将发送报文中的目的IP地址和端口号进行HASH运算后的数值。

Local HASH: 指将发送报文中的源IP地址和端口号进行HASH运算后的数值。

通过对比Remote HASH和Local HASH值,可以判断网关之间是否存在NAT设备以及NAT网关的位置。

FW2:

FW1:

两方计算的哪个Hash值不相等,表明哪个设备在NAT网关后面,由于FW2的LOCAL与FW1的REMOTE HASH不同,因此在FW2处有NAT设备。

发现NAT设备后,后续ISAKMP消息(主模式从消息5开始)的端口号转换为4500。

NAT穿越会话保活机制(防火墙G1/0/0抓包,此处源IP地址还未转换


参考资料:防火墙和VPN技术与实践——李学昭

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

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

相关文章

【DDPM】DDPM中为什么从xt到x_{t-1}还需要加上一个随机变量z?

这个伪代码是截取自DDPM这篇论文&#xff0c;请你解释这里的 δ t z \delta_tz δt​z 这一项的含义&#xff0c;为什么要加这一项呢&#xff1f; DDPM(Denoising diffusion probabilistic models) 这种模型通过一个逐渐增加噪声的过程来生成数据&#xff0c;然后再通过一个逆…

动态规划刷题总结(入门)

目录 什么是动态规划算法 如何判断题目中将使用动态规划算法&#xff1f; 动态规划题目做题步骤 动态规划题目解析 泰波那契数模型 第 N 个泰波那契数 三步问题 使用最小花费爬楼梯 路径问题 不同路径 不同路径 Ⅱ 珠宝的最高价值 下降最短路径和 地下城游…

以题为例 浅谈sql注入二次注入

什么是二次注入 二次注入可以理解为&#xff0c;攻击者构造的恶意数据存储在数据库后&#xff0c;恶意数据被读取并进入到SQL查询语句所导致的注入。防御者即使对用户输入的恶意数据进行转义&#xff0c;当数据插入到数据库中时被处理的数据又被还原&#xff0c;Web程序调用存…

Linux/Validation

Enumeration nmap 第一次扫描发现系统对外开放了22&#xff0c;80&#xff0c;4566和8080端口&#xff0c;端口详细信息如下 系统对外开放了4个端口&#xff0c;从nmap的结果来看&#xff0c;8080无法访问&#xff0c;手动尝试后4566也无法访问&#xff0c;只能从80端口开始 …

机器视觉中应用正态分布

笔记来源—— 【工程数学基础】9_阈值如何选取&#xff1f;&#xff1f;在机器视觉中应用正态分布和6-Sigma【这是一期不需要记笔记的轻松视频&#xff0c;简单的知识&#xff0c;重要的运用】 比如我们要识别我们的产品上面是否有保护膜&#xff0c;我们可以通过白色像素点的…

c# combox 行间距调整

初始化combox comboBox1.DropDownStyle ComboBoxStyle.DropDownList;comboBox1.ItemHeight 25; // 设置 combox 的行高comboBox1.DrawMode DrawMode.OwnerDrawVariable; 添加 DrawItem 事件 private void comboBox1_DrawItem(object sender, DrawItemEventArgs e){if (…

二次封装 element-plus的Table 表格组件,减少代码臃肿

为什么要二次封装element-plus的Table 表格组件&#xff0c;言简意赅&#xff1a;以后难免会在表格里面加一些统一的逻辑&#xff0c;可以在表格里面书写重复的方法或样式 封装后的使用方式 props 参数类型可选值默认值说明tableDataArray——表格数据tableConfigArray——表…

OpenStack安装步骤

一、准备OpenStack安装环境 1、创建实验用的虚拟机实例。 内存建议16GB&#xff08;8GB也能运行&#xff09;CPU&#xff08;处理器&#xff09;双核且支持虚拟化硬盘容量不低于200GB&#xff08;&#xff01;&#xff09;网络用net桥接模式 运行虚拟机 2、禁用防火墙与SELin…

【CSP】2022-03-3 计算资源调度器 stl大模拟使用map优化索引 完整思路+完整的写代码过程(遇到的问题)+完整代码

2022-03-3 计算资源调度器 stl大模拟使用map优化索引 2022-03-3 计算资源调度器 stl大模拟使用map优化索引思路写代码的过程&#xff08;遇到的问题&#xff09;完整代码 2022-03-3 计算资源调度器 stl大模拟使用map优化索引 在联系了之前那么多道stl大模拟题后&#xff0c;终…

揭秘PostgreSQL:超越传统数据库的无限可能!

介绍&#xff1a;PostgreSQL是一个功能强大的开源对象关系数据库系统。以下是对PostgreSQL的详细介绍&#xff1a; 开源性&#xff1a;PostgreSQL是完全开源的&#xff0c;这意味着任何人都可以自由地获取、使用和修改它的源代码。 可定制性&#xff1a;它具有高度可定制性&…

问题解决:NPM 安装 TypeScript出现“sill IdealTree buildDeps”

一、原因&#xff1a; 使用了其他镜像&#xff08;例如我使用了淘宝镜像 npm config set registry https://registry.npm.taobao.org/ &#xff09; 二、解决方法&#xff1a; 1.切换为原镜像 npm config set registry https://registry.npmjs.org 安装typescript npm i …

前端开发的发展史:框架与技术栈的演变

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

告别“死记硬背”,坐席助手让客服新手秒变大咖

在客服行业&#xff0c;新手客服人员常常面临着两大难题&#xff1a;一是需要死记硬背大量的标准答案&#xff0c;二是培训时间长&#xff0c;上岗速度慢。然而&#xff0c;随着科技的发展&#xff0c;这些问题正逐渐得到。今天&#xff0c;我们要为大家介绍一款革命性的客服工…

STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹

STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件新增工程文件夹前言第1章 添加文件夹第2章 添加文件路径2.1 相对路径方法2.2 绝对路径方法 总结 前言 在编程的过程中&#xff0c;如果需要在原有的工程基础上新增其它的…

哈希表|202.快乐数

力扣题目链接 int getSum(int n) {int sum 0;while (n) {sum (n % 10) * (n % 10);n / 10;}return sum; }bool isHappy(int n){int sum getSum(n);int hash[820] {0};while (sum ! 1) {if (hash[sum] 1) {return false;} else {hash[sum];}sum getSum(sum);}return true…

探索未来:2024年人工智慧驱动的 AI + 研发趋势

#2024 AI 辅助研发趋势# 当我们站在2024年的风口浪尖时&#xff0c;人工智慧辅助研发的格局即将发生翻天覆地的变化。2023年人工智慧的快速发展为各行业的突破性进步铺平了道路。从研发流程的数位转型&#xff0c;到 AI 开发工具2.0 的出现&#xff0c;未来充满了超越 Copilot…

基于数组的顺序表删除操作

删除算法需要注意&#xff1a; 1. 列表长度为0时不能再删除 2.每次删除后长度减一 3.输入删除的数据在原来列表中不存在&#xff0c;不需要改变原列表 #include <iostream> #define MAX 100; using namespace std;int search(int arr[],int len,int n) {for(int i0; i…

【2024泰迪杯】A 题:生产线的故障自动识别与人员配置 Python代码实现

【2024泰迪杯】A 题&#xff1a;生产线的故障自动识别与人员配置 Python代码实现 1 问题 一、问题背景 随着新兴信息技术的大规模应用&#xff0c;工业生产线的智能化控制技术日益成熟。自动生产线 可以自动完成物品传送、物料填装、产品包装和质量检测等过程&#xff0c;极…

LeetCode - 寻找数组的中心

先学习一下前缀和吧 LCR 012.寻找数组的中心LCR 012. 代码解析 在读题读到左侧元素之和等于右侧所有元素之和的时候&#xff0c;我觉得可以用前缀和&#xff0c;然后结合下面的示例&#xff0c;模拟了一下发现确实可以。 我的想法是搞两个数组&#xff0c;一个来存从左到右数…

微信小程序(五十六)逆地址解析示范

注释很详细&#xff0c;直接上代码 温馨提醒&#xff1a;记得给自己的key配额&#xff0c;基础操作与前提配置参考本专栏第五十四篇 新增内容&#xff1a; 1.逆地址解析基础示范 2.开放经纬度参数 3.只列举修改的js部分&#xff0c;前提配置请看 温馨提醒 源码&#xff1a; ind…