当前位置: 首页 > news >正文

IPSec NAT穿越场景原理分析

作者:chen-true@qq.com

仅供学习交流,如有错误恳请指出!

===========================================

先说结论:

·AH协议不支持NAT穿越,无论是传输模式还是隧道模式,无论有无开启NAT-T功能;

·在未开启NAT-T功能前提下,ESP隧道模式和传输模式均支持穿越NAT设备,但是会有很多限制,导致使用起来不方便或产生问题;

·在开启NAT-T功能前提下,ESP隧道模式和传输模式均可以正常稳定的穿越NAT。

===========================================

IPSec(IP Security)是一组在IP网络层提供安全通信能力的协议族,主要依靠两种数据保护子协议(AH与ESP),对IP报文实施完整性校验、身份认证、加密以及抗重放等安全保护。

·认证头(Authentication Header,AH):IP协议号51。提供数据源认证与消息完整性保护,并支持抗重放;但是不提供加密,因此不具备保密性。

·封装安全载荷(Encapsulating Security Payload,ESP):IP协议号50。提供数据加密以实现保密性,并且可选提供数据源认证与消息完整性保护,同时支持抗重放。在实际工程中,ESP通常同时启用加密与完整性保护,应用也最为广泛。

AH与ESP均支持两种工作模式(Mode),用于决定对IP报文的保护范围:

·传输模式(Transport Mode):保留原始IP头,仅对上层负载(如 TCP/UDP/ICMP等数据)进行保护,常用于主机到主机的端到端安全通信。

·隧道模式(Tunnel Mode):将整个原始IP包封装为“内层报文”,再添加新的外层IP头并对内层整包进行保护,常用于网关到网关的站点互联以及远程接入VPN场景。

一、AH协议的保护范围

① AH传输模式的保护范围(即认证数据ICV的覆盖范围):

·上层数据:即TCP/UDP/ICMP头 + 数据;

·AH头(除ICV字段外):计算ICV时,将ICV字段本身置零参与计算;

·原始IP头中“不可变/端到端应保持一致”的字段:典型包括源/目 IP、协议号等这类不应在中途改动的字段。

而对于TTL、IP头校验和、DSCP、以及其它一些可能被中间设备改写的字段,计算ICV时,将它们置零(忽略)参与计算。

② AH隧道模式的保护范围(即认证数据ICV的覆盖范围):

·内层原始IP包整体:包括内层IP头部 + 上层数据(TCP/UDP/ICMP头 + 数据);

·AH头(除ICV字段外):计算ICV时,将ICV字段本身置零参与计算;

·外层IP头中“不可变/端到端应保持一致”的字段:典型包括源/目 IP、协议号等这类不应在中途改动的字段。

而对于TTL、IP头校验和、以及其它一些可能被中间设备改写的字段,计算ICV时,将它们置零(忽略)参与计算。

图 AH协议保护范围

二、ESP协议的保护范围

① ESP传输模式的保护范围(加密和认证范围):

1、加密范围

·上层数据:即TCP/UDP/ICMP头 + 数据;

·ESP尾(ESP Trailer):Padding + PadLen + NextHeader。

2、认证范围(若启用)

·ESP头(SPI + Sequence Number);

·全部加密区的密文;

② ESP隧道模式的保护范围(加密和认证范围):

1、加密范围

·内层原始IP包整体:包括内层IP头部 + 上层数据(TCP/UDP/ICMP头 + 数据);

·ESP尾(ESP Trailer):Padding + PadLen + NextHeader。

2、认证范围(若启用)

·ESP头(SPI + Sequence Number);

·全部加密区的密文;

图 ESP协议保护范围

三、AH协议不支持NAT穿越

如下图所示,主机A与主机B之间建立了基于IPSec AH的安全通信(可为传输模式或隧道模式),且路径中经过NAT网关。

图 AH传输模式穿越NAT失败举例

AH提供了消息完整性保护,其核心机制是:发送端在计算AH头部中的认证数据时,会把报文中需要被保护的内容纳入哈希计算,其中包括IP头部中那些按规范应保持端到端一致的字段(典型如源/目的IP等),并将计算得到的认证数据随AH报文一起发送给接收端。接收端收到AH报文后,会按同样规则对报文重新计算认证数据,并与报文携带的认证数据进行比对;若不一致,则认为报文被篡改或伪造,进而丢弃报文。

当AH报文经过NAT网关时,NAT会对报文进行地址转换(SNAT/DNAT),从而修改IP头部中的源/目IP等字段。由于这些字段属于AH认证计算所覆盖的范围,NAT的改写会导致接收端基于“被改写后的IP头”重新计算出的认证数据与报文中携带的认证数据不一致,最终触发AH完整性校验失败并造成丢包。因此,AH与NAT天生不兼容。

这一结论对两种模式均成立:

·AH传输模式下,AH直接保护原始IP头中的相关字段,NAT改地址必然破坏校验;

·AH隧道模式下,AH同样会认证外层IP头中应保持不变的字段,而NAT改写外层地址同样会导致校验失败。

综上,AH协议不支持穿越NAT,无论是传输模式还是隧道模式,只要路径中存在会修改IP头地址信息的NAT设备,都将导致AH认证失败。

四、ESP协议有限度的支持NAT穿越

以前示拓扑为例,若主机A与主机B之间建立IPSec ESP安全通信(可为传输模式或隧道模式),且路径中经过NAT网关。与AH不同,ESP的完整性校验(若启用)不覆盖外层IP头,而是覆盖ESP头 + ESP负载 + ESP尾(ESP Trailer),因此NAT对外层IP地址的改写不会直接导致ESP的认证数据校验失败。

1)ESP传输模式穿越NAT:认证不一定失败,但业务层面容易掉坑

在传输模式下,ESP会把上层协议头(TCP/UDP/ICMP等)也一起加密/认证。因此即便ESP本身不会因为NAT改外层IP头而导致认证数据校验失败,但仍然可能在以下方面出现问题:

·TCP/UDP校验和问题:NAT改写源/目的IP 后,按协议规则,TCP/UDP的校验和应随之更新;但传输模式下TCP/UDP头在ESP加密区内,NAT看不到也改不了,导致接收端解密后可能出现校验和不匹配,进而引发丢包、连接异常等现象。

注意:对于一些不依赖TCP/UDP校验和的IP流量(比如ICMP Ping),理论上ESP传输模式是可以穿越NAT的;但在真实网络里是否“真的能过”,强烈依赖NAT是否支持/放行ESP,以及是否存在多主机并发(PAT)等情况。

·ESP没有端口导致NAT/PAT复用困难:ESP是三层协议(IP协议号50),不像TCP/UDP有端口可用于NAT/PAT做多路复用。若多个内网主机共享一个公网地址并发建立ESP流量,许多NAT设备难以稳定区分和回送,常见现象包括“只能通一个”“并发冲突”“会话不稳定”等。

因此,ESP传输模式在密码学机制上不怕NAT改外层地址,但在承载TCP/UDP以及多对一PAT的场景下,经常因为校验和与复用问题而不够可靠。

2)ESP隧道模式穿越NAT:天然、稳定,但仍可能被“无端口复用”所限制

隧道模式的优势在于:

·内外层解耦,避免传输模式的TCP/UDP校验和问题:隧道模式把“原始内层IP包”整体加密/认证,内层TCP/UDP校验和依赖的是内层IP地址。NAT改写的是外层IP头,不会影响内层地址与内层校验和。

·ESP认证仍不覆盖外层IP头:NAT对外层地址的改写不会直接破坏ESP认证数据的校验(这一点与ESP传输模式一样)。

但隧道模式仍存在一个现实问题:

·纯ESP依旧没有端口,PAT多路复用依旧困难:当公网侧只有一个公网IP、且需要多台内网主机并发建立/维持ESP会话时,NAT设备仍可能因为“无端口”而复用能力受限,导致连接不稳定。

因此,ESP隧道模式更适合NAT环境,但如果不做额外处理,仍可能被NAT/PAT的会话复用能力卡住。

为解决“ESP无端口导致NAT/PAT难以复用”和“传输模式下TCP/UDP校验和难以更新”等问题,工程实践中通常启用NAT-T(NAT Traversal)功能。NAT-T的核心思想就是把ESP变成“看起来像普通UDP”的流量。并且,NAT-T功能只对ESP有效,对AH无效。

有关NAT-T功能原理,我会在后面单独详细描述。

http://www.cnnetsun.cn/news/42357.html

相关文章:

  • 速读顶会论文:GoodSpeed - 让分布式LLM推理既快又公平的自适应推测解码框架
  • 基于MATLAB的零件表面缺陷检测系统设计与实现
  • c++类和对象(上)
  • Windows11中使用VS2022编译运行libevent网络库
  • wgpu实例化渲染技术深度解析:从性能瓶颈到GPU并行计算优化
  • 构建下一代实时语音处理框架:dora-rs架构深度解析
  • cmark终极指南:高性能Markdown解析器的完整使用教程
  • 基于Java的安全检查巡视智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的安全生产指标智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的安全生产水利工程智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 极客时间-DeepSeek应用开发实战
  • Vue.Draggable高效拖拽排序实战指南:5分钟掌握核心用法
  • c语言学习打卡
  • LangChain 文档转换器与字符分割器组件的使用
  • 科研绘图不用愁!虎贲等考 AI 用算法代替画笔,手残党也能轻松搞定学术视觉表达
  • 告别论文恐惧!虎贲等考 AI 化身灵感合伙人,带你解锁课程论文的知识创造之旅
  • ComfyUI-SeedVR2视频超分项目FP8量化技术深度解析
  • 全网最全的软件测试面试八股文(含真题答案+文档)
  • OpenResume专业简历制作工具完整使用指南
  • springboot肿瘤患者康复回访系统_109a2sb0-
  • 【KL 散度】深入理解 Kullback-Leibler Divergence:AI 如何衡量“像不像”的问题
  • 5分钟掌握LIBERO:开启终身机器人学习的革命性平台
  • 文件上传革命:jQuery File Upload如何让开发效率飙升500%
  • SolidWorks三维模型与工程图差距分析介绍
  • COMSOL模拟锌离子电池锌负极电场模型教程:从零开始构建并详细解析源文件,适合初学者的电场建模教学
  • 终极指南:如何用PIKE-RAG打造领域专属的智能问答系统
  • 5分钟从文档小白到OCR专家:Zerox如何让文字识别变得像拍照一样简单
  • RocketMQ如何防止消息丢失?
  • CSS尺寸、盒子模型、定位、浮动与布局(Flex/Grid)
  • 《构建游戏实时流失预警模型的核心逻辑》