IPSec的NAT穿越

NAT-T:IPsec穿越NAT之道 目录 1. IPsec与NAT矛盾 2.  身份确认 3.  NAT-T 3.1 NAT-T流程 3.2 报文格式 4.  地址复用 4.1. 隧道模式下的冲突 4.2. 传输模式下的冲突  4.3. 同一个NAT下的冲突 Q And A 参考资料 1. IPsec与NAT矛盾 在文章《IPsec》及《NAT》中介绍了IPsec及NAT的基本知识。我们知道IPsec的协议... 阅读详情
参考资料:RFC3715,3947,3948

1. 前言

IPSec提供了端到端的IP通信的安全性,但在NAT环境下对IPSec的支持有限,AH协议是肯定不能进行NAT的了,这和AH设计的理念是相违背的;ESP协议在NAT环境下最多只能有一个VPN主机能建立VPN通道,无法实现多台机器同时在NAT环境下进行ESP通信。关于IPSec在NAT环境下的需求问题在RFC3715中进行了描述。

NAT穿越(NAT Traversal,NAT-T)就是为解决这个问题而提出的,在RFC3947,3948中定义,在RFC4306中也加入了NAT-T的说明,但并没废除RFC3947,3948,只是不区分阶段1和阶段2。该方法将ESP协议包封装到UDP包中(在原ESP协议的IP包头外添加新的IP头和UDP头),使之可以在NAT环境下使用的一种方法,这样在NAT的内部网中可以有多个IPSec主机建立VPN通道进行通信。

2. IKE协商使用UDP封装

RFC3947主要描述如何检测是否存在NAT设备,并如何在IKE中协商使用UDP来封装IPSec数据包。

2.1 检测

功能是检测通信中是否存在NAT设备和对方是否支持NAT-T。

正常的IKE协商使用的UDP包的源和目的端口都是500,如果存在NAT设备,大多数情况下该UDP包的源端口部分会改变,只有少数情况不改。接收方如果发现UDP源端口不是500,那可以确定数据是经过了NAT设备。另外,确定NAT的位置也是重要的,在检测对方失效(DPD)时,应该尽量由在NAT设备后面的一方主动进行DPD探测,而从另一方探测有可能会失败。

检测对方是否支持NAT-T是通过交换vendor ID载荷来实现的,如果自身支持NAT-T,在IKE开始交互就要发送这种载荷,载荷内容是“RFC 3947”的MD5值,也就是十六进制的“4a131c81070358455c5728f20e95452f”。

判断是否在NAT设备后面是通过发送NAT-D(NAT-Discovery)载荷来实现的,载荷内容是IP地址和UDP端口的HASH值,NAT-D载荷格式如下,载荷类型值是20:
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
+---------------+---------------+---------------+---------------+
| Next Payload | RESERVED     | Payload length           |
+---------------+---------------+---------------+---------------+
~           HASH of the address and port             ~
+---------------+---------------+---------------+---------------+

HASH值的计算方法如下,具体HASH是根据协商来确定的:
    HASH = HASH(CKY-I | CKY-R | IP | Port)
CKY-I和CKY-R是协商发起方和响应方的cookie。

协商中双方各自至少要发送两个NAT-D载荷,第一个载荷是对方的地址和端口的HASH,后面的载荷是自己的地址和端口,如果本地有多个地址,则要发送多个载荷,包括所有地址和端口的HASH,对方接收到载荷后重新根据收到的包的实际地址端口来计算HASH值后进行比较,就可以知道是否有NAT设备以及哪一方在NAT设备之后了。

有些的NAT设备具有端口固定的功能,也就是进行NAT转换后只改变地址而不改变端口,而且针对IKE通信使用cookie来区分内部各个IPSec设备的IKE连接,后续IKE协商如果继续用500端口协商就会出现问题。对于这类设备,解决方法是改变IKE协商端口从500到4500,因为这些设备只对500端口进行特殊处理而不对4500端口处理。在协商时,发现了自己在NAT设备之后的一方立即要将协商端口从500该为4500,源和目的端口都是4500,此时协商数据包格式为:
  IP UDP(4500,4500) <non-ESP marker> HDR*, IDii, [CERT, ] SIG_I
其中“non-ESP marker”为4字节,在后面介绍其值。

接收方接收此包解密并认证通过后,要改变自己的状态将原来处理500端口状态改为处理4500端口,后续的协商过程都使用4500端口进行,以后500端口收到的不是新协商的包都将被丢弃,协商过程为:
  Initiator                   Responder
  ------------                 ------------
  UDP(500,500) HDR, SA, VID -->
                          <-- UDP(500,X) HDR, SA, VID
  UDP(500,500) HDR, KE, Ni,
    NAT-D, NAT-D -->
                 
NAT-T技术原理简单分析及应用实验解析 1.首先我们就IPSEC VPN的部署场景来做简要分析: 场景1:如图所示,企业的总部与分支机构分别架设了VPN设备,分支机构的需求是同步企业内部的业务数据(属企业内部的机密信息),那麽就必须确保数据在公网上是安全包密传递的。这种情况下我们可以直接用IPSEC VPN的隧道工作模式或传输工作模式(用传输工作模式的前提是底层要有隧道),使用IPSEC VPN的ESP(封装安全载荷)协议(使用ESP... 阅读详情

相关推荐

防火墙—IPSec VPN(NAT 穿透-双侧 NAT)

奇安信防火墙 IPSEC VPN 详解

weixin_44080599的博客 5561

IPSec NAT穿越原理_ipsec配置为什么要配置nat

测试并抓包分析(抓包可知,主模式下,ISAKMP协商交换的包6个。第一阶段会互相发送标识NAT穿越功能的Vendor ID载荷,用于检查通信双方是否支持 NAT-T。当双方都在各自的消息中包含了该载荷时,才会进行相关的 NAT-T 协商。主模式消息3和消息4中发送NAT-D ( NAT Discovery )载荷。NAT-D载荷用于探测两个要建立IPSec隧道的网关之间是否存在NAT设备以及NAT设备的位置。Remote HASH: 指将发送报文中的目的IP地址和端口号进行HASH运算后的数值。

2401_84254530的博客 604

IPSec---NAT穿越实验配置

目录 FW1-FW2基础配置 FW1-FW2配置安全策略—只可以由FW2为主动端建立IPSec隧道 FW1-FW2配置IPSec NAT设备FW4的配置 安全策略 配置NAT策略 NAT 穿越 相关配置 ESP NAT 黑色是FW1和FW2相同的配置 绿色是FW1的配置 蓝色是FW2的配置 FW4的配置单独拿出来配置 FW1-FW2基础配置 按照图上要求配置好接口地址和安全区域,并配置相关路由 FW1-FW2配置安全策略—只可以由FW2为主动端建立IP.........

m0_49864110的博客 1888

ESP32Servo库驱动SG90舵机:从入门到精准控制

本文详细介绍了如何使用ESP32Servo库驱动SG90舵机,从硬件连接到软件环境搭建,再到编写示例程序实现精准控制。内容涵盖库安装、基础驱动代码解析、舵机校准方法以及平滑运动控制,帮助开发者快速掌握ESP32控制舵机的核心技能,并提供了电源管理、信号抗干扰等实用避坑指南。

ik678901的博客 895

模电(十四)差分放大电路

目录 差分放大电路 双端输入双端输出 Q点分析 抑制共模信号 放大差模信号 双端输入单端输出 Q点分析 差模信号分析 共模信号分析 单端输入双端输出 单端输入单端输出 四种接法比较 具有恒流源的差分放大电路 差分放大电路的改进 差分放大电路 采用引入支流负反馈,温度补偿来克服零点漂移(温度变化,直流电源波动,元器件老化产生的输入电压为零,输出电压不为零的...

weixin_43674847的博客 2万+

手把手教你用Simulink搭建PMSM FOC控制模型(附完整仿真文件下载)

本文手把手教你使用Simulink搭建完整的永磁同步电机(PMSM)磁场定向控制(FOC)仿真模型。内容涵盖从电机与逆变器建模、核心的坐标变换(Clark/Park变换)实现、电流环与速度环PID整定,到SVPWM调制与系统集成调试的全过程,并提供关键参数设置与实用调试技巧,帮助工程师快速掌握FOC的工程实现。

silver的专栏 862

Lmbench测试集 --- 延迟测试工具lat_mem_rd

lmbench测试集简介 以及 lat_mem_rd延迟测试工具: 如何测试、测试结果、源码分析

MonologueYY的博客 1万+

瑞萨单片机,把CS文件转换为CC

1、打开CC的软件: 点击坐上角的"START" 点击"Create New Project"的"GO": 导入工程: 如下图设置后,点击"Create" 2、进入到CC的开发界面: 可以看到原启动库文件以asm文件的方式直接出现在工程中: 删除新生成的main.c,保留导入的r_main.c(以你自己的代码为准): 注意添加所有的头文件路径: 点击"...

weixin_37611121的博客 1228

「UG/NX」BlockUI 树列表(回调函数)

官方对树控件提供了21种回调函数,树的一些操作可以在这些回调函数中进行操作。

何曾参静谧的博客 1330

云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库

基于前面搭建的3节点 Kubernetes 集群,今天我们使用 Registry2 搭建私有镜像仓库,这在镜像安全性以及离线环境下运维等方面具有重要意义。作为测试环境,本次使用 Registry2 搭建了私有镜像仓库,实际生产环境建议使用 Harbor;创建了一个 local-storage 的 StorageClass ,并使用本地磁盘的方式创建使用 PV ,实际建议使用 NFS 。

Heartsuit的博客 2461

educoder中Hive综合应用案例 — 用户搜索日志分析

Hive综合应用案例 — 用户搜索日志分析

weixin_46026136的博客 4764

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: shellcode初级_定位缓冲区
下一篇: ipsec驱动源代码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值