IPsec,IKEv2与ESP协议知识点汇总及详解 📅 2026/7/12 4:54:36 目录一、IPsecInternet Protocol Security详解1.1简介1.2安全通信简介1.3安全网关1.4IPsec 术语名词1.5伪随机数函数PRF与 PRF二、IKEv2Internet Key Exchange Version 2详解2.1简介2.2IKEv2 报文标准格式2.3IKE_SA_INIT 交换2.4IKE_AUTH 交换2.5CREATE_CHILD_SA 交换12.6CREATE_CHILD_SA 交换22.7CREATE_CHILD_SA 交换32.8INFORMATIONAL 交换2.9IKEv2 的 NAT 穿越检测2.10IKEv2 密钥交换与派生与 PFS 中的新密钥处理2.11IKEv2 身份认证2.12使用 EAP 认证的 IKEv2三、ESPEncapsulate Secure Payload详解3.1简介3.2ESP NAT-T 模式3.3ESP 报文封装标准格式3.4算法3.5ESP 出入站处理3.6基于策略与基于路由的隧道模式一、IPsecInternet Protocol Security详解1.1简介IPsecInternet Protocol Security互联网协议安全是一套工作在网络层的安全协议簇核心是为 IP 网络通信提供原生的端到端安全保障更独立的双通道分离是站点间 VPN、远程接入 VPN 最主流的底层实现技术之一。它还为两个通信实体提供了一种交换密钥的方法、一个加密套件以及一种镖局使用压缩的方法。通信实体可以是一台个人主机也可以是一个在受保护与不受保护网络区域提供界限的安全网关。它能为通信提供四项核心安全能力数据机密性加密防止内容泄露、数据完整性校验防止报文被篡改、数据源身份认证确认通信方身份可信、抗重放攻击防止历史合法报文被重复利用。IPsec 是一个协议族它主要包括 IKE、AH 和 ESP 三个协议本文不讲解 AH。1.2安全通信简介IPsec 为了建立一个安全通信首先需要一个对等方之间协商出一个 SA通常使用 IKE 进行协商得益于 IPsec 的双通道分离机制使用 IKE 协议维护控制通道与管理数据通道使用ESP 作为数据通道主流协议进行业务数据的封装。所有加密数据都需要经过 IPsec 内核的加密引擎进行加密IKE、ESP 等协议本质上主要用于维护、管理 IPsec 的操作。1.3安全网关IPsec 安全网关SG是部署在网络边界、代表身后整个内网网段执行 IPsec 加解密与隧道封装的网络设备。企业级防火墙、出口路由器、云厂商 VPN 网关、分支网关设备本质上都是承担 SG 的角色。SG 工作在 IP 转发模式默认使用 ESP 隧道模式保护背后的整个内网且内网对于 SG 的加密转发行为完全无感知。SG 的 ESP、IKE 工作流程与部署在主机上的IPsec 几乎无区别唯一的区别是 SG 开启了 IP 转发功能转发目的 IP 不是自己的流量并对流量执行 IPsec 正常流程。1.4IPsec 术语名词名称介绍SASecurity Association安全关联用于保存隧道或对等方之间协商出的安全参数如加密算法、密钥、工作模式等SPISecurity Parameter Index安全参数索引用于指示一个32位或64位的 SASGSecurity Gateway安全网关部署 IPsec 的网关SPDSecurity Policy Database安全策略数据库保存数据包的处理规则记录多条匹配规则如源/目的网段等用于确定一个包所需要进行什么操作如加密明文丢弃等SADSecurity Association Database安全关联数据库保存曾经协商成功的 SAIKEInternet Key Exchange VersionInternet 密钥交换一个用于建立一个 SA 的协议AHAuthentication Head认证头部用于封装业务数据仅提供完整性保护与数据源身份认证当前基本已被弃用ESPEncapsulate Secure Payload封装安全负载用于封装业务数据当前主流数据通道协议DHDiffie-Hellman 密钥交换算法一种可以在不可靠的公网上安全传输密钥的算法PRFPseudoRandom Function伪随机数函数一种伪随机数生成器a | b连接运算符用于连接ab两个数据段1.5伪随机数函数PRF与 PRF伪随机数函数是指那些在算法上无法区别于真正随机函数的函数它的输出结果在统计分布上与真随机没有区别攻击者即使看到大量输出样本也无法反推出密钥更无法预测下一个输出。 PRF 相当于一种由密钥驱动的确定性随机数生成器它有两个输入参数分别为密钥与种子格式为prf ( keyseed )只要两个函数中密钥与种子分别相同输出也相同但只要密钥未知这串数据在攻击者眼里就和真正的随机数毫无区别。它比较类似与哈希函数但哈希函数是无密钥的。PRF 通常用于密钥派生即使用一个已知的密钥通过 PRF 生成一个新的密钥以防止密钥相同也常用于 HMAC。PRF 则为 PRF 的递归通常用于解决一个 PRF 生成的随机数不够长的问题它通过反复调用底层的标准 PRF并把上一次计算的结果投递给下一次计算同时附加一个递增的数字它可以生成任意长度的伪随机数它的公式为prf ( keyseed ) T1 | T2 | T3 | ... | TnT1 prf ( keyseed | 0x01 )T2 prf ( keyT1 | seed | 0x02 )Tn prf ( keyT(n-1) | seed | 0x0n )。二、IKEv2Internet Key Exchange Version 2详解2.1简介IKEv2 协议属于一种混合型协议它综合了 ISAKMPInternet Security Association and Key Management Protocol、Oakley 协议和 SKEME 协议这三个协议。其中ISAKMP 定义了 IKE_SA 的建立过程Oakley 和 SKEME 协议的核心是 DHDiffie-Hellman算法主要用于在 Internet上安全地分发密钥、验证身份以保证数据传输的安全性安全地建立一个 CHILD_SA。IKE_SA 和 CHILD_SA 需要的加密密钥和验证密钥都是通过 DH 算法生成的它还支持密钥动态刷新以实现完美正向防护PFS。2.2IKEv2 报文标准格式2.2.1IKEv2 报文整体标准格式[HDR] [0个或多个负载]2.2.2IKEv2 主头部标准格式HDR长度28 Bytes名称长度用途SPIi发起者的IKE_SA的SPI8 Bytes记录发起者的IKE_SA的SPISPIi响应者的IKE_SP的SPI8 Bytes记录响应者的IKE_SP的SPINext Payload下一个负载1 Byte记录下一个负载的类型数值0为没有下一个负载Version版本号1 Byte分为主要版本与次要版本记录使用的IKE版本Exchange Type交换类型1 Byte记录当前正在进行哪一轮交换IKE_SA_INIT34IKE_AUTH35CREATE_CHILD_SA36INFORMATIONAL37Flags标志位1 Byte其中R位用于区分请求/响应报文I位用于区分是否是第一轮协商Message ID消息ID4 Bytes从0开始每一个报文段加一用于匹配请求与响应与防止重放攻击类似于TCP中的序列号Length总长度4 Bytes记录整个IKE报文包括头部的长度用于确定报文边界2.2.3IKEv2 负载头部标准格式长度4 Bytes名称长度用途Next Payload下一个负载1 Byte记录下一个负载的类型数值0为没有下一个负载RESERVED保留1 Byte保留字段全置为0Payload Length负载长度2 Bytes记录整个负载的长度2.2.4IKEv2 负载类型数值符号用途33SA安全关联负载包含一个 SPI 数值与一套提议发起者通常有多个响应者通常只有一个每个提议都有一个转换列表加密算法完整性保护算法、密码派生算法和DH组34KEDiffie-Hellman 负载包含 DH 组编号与公钥35IDi发起者身份负载包含发起者身份如IP地址、域名等36IDr响应者身份负载包含响应者身份如IP地址、域名等37CERT证书负载包含发起方的证书链38CERTREQ证书请求负载请求对方的证书链39AUTH认证负载双方对相同数据块签名用于认证双方身份向对方证明自己拥有合法密钥同时确保协商参数完整性40Ni,Nr随机数负载用于双方派生密钥的随机数提供密码学新鲜性保证每次协商生成的密钥都独一无二防止重放攻击41N通知负载用于传输错误信息消息码8192、IKE协商状态消息码16383以及IKE处理能力指示消息码16383如处理能力指示包含路径上是否包含NAT42D删除负载包含一个SA列表表示要删除的SA或用于关闭一个隧道43V厂商标识符负载包含每个扩展功能对应唯一的Vendor ID声明厂商私有扩展或协议扩展能力用于不同设备间的特性协商与兼容44TSi发起者流量选择器负载发起方包含自己意愿通过该 SA 发送数据的源流量选择器的匹配源网段响应者包含最终确定的源/目的网段45TSr响应者流量选择器负载发起方包含自己意愿通过该 SA 发送数据的目的流量选择器的匹配目的网段响应者包含最终确定的源/目的网段如果发起者的TSr的超过了响应者的最大接受网段范围则会进行 TS 收窄机制46SK{}控制通道加密与认证负载控制通道中所有需要加密与认证的负载如 IKE_AUTH 等交换的大部分负载都记录在 SK 负载中47CP配置负载用于远程访问 VPN 情况下服务端向客户端分配内网配置信息如 IP 地址、DNS、默认网关等客户端配置虚拟接口使用请求-响应方式在 IKE_AUTH 交换中使用类似 PPTP 中的 IPCP 协议48EAP可扩展身份认证协议负载封装 EAP 报文使得 IKE 支持使用 EAP 认证后缀加 i 表示来自发起方的负载后缀加 r 表示响应方的负载2.3IKE_SA_INIT 交换该交换主要用于协商并建立一个安全的控制通道IKE_SA以及协商出一个用于派生所有子密钥的根密钥其他交换必须要在该交换之后才能被任意一方发起。发起方响应方HDRSAi1KEiNi--1----2--HDRSAr1KErNrCERTREQ1 发起方通过 UDP 500 端口发送 IKE_SA_INIT 报文用于 IKE_SA 提议SKEYSEED 值协商与 NAT 检测NAT-DN负载的一种2 响应方通过 UDP 500 端口接收报文响应方通过UDP 500端口发送 IKE_SA_INIT 报文用于告知发起方选中的 IKE_SA 提议 IKE_SA的密钥交换请求发起方的证书链与NAT检测3 如果 NAT-D 负载检测到穿越过 NAT双方进入 NAT-TNAT穿越模式IKE 控制通道端口转为 UDP 4500否则保持源端口下文都以 UDP 4500 端口作为IKE控制通道端口2.4IKE_AUTH 交换正常形式使用 EAP 的认证参见 2.12 节该交换主要用于协商并建立首个安全的数据通道CHILD_SA认证双方身份TS协商与配置内网信息等发起方响应方HDRSK{ IDiCERTCERTREQAUTHSAi2TSiTSr }--1----2--HDRSK{ IDrCERTAUTHSAr2TSiTSr }1 发起方通过 UDP 4500 端口发送 IKE_AUTH 报文用于 CHILD_SA 提议证书链交换TS 提议认证双方身份请求内网配置信息等。2 响应方通过 UDP 4500 端口接收报文响应方通过 UDP 4500 端口发送 IKE_AUTH 报文用于告知发起方选中的 CHILD_SA 提议证书链交换最终 TS 认证双方身份与响应内网信息等2.5CREATE_CHILD_SA 交换新建 CHILD_SA该交换主要用于新建一个 CHILD_SA以创建多个数据通道以对应新的业务网段。发起方响应方HDRSK{ SAiNiKEiTSiTSr }--1----2--HDRSK{ SArNrKErTSiTSr }1 发起方通过 UDP 4500 端口发送 CREATE_CHILD_SA 报文用于新 CHILD_SA 提议DH 协商一个新的 CHILD_SA 密钥处理新密钥参见 2.10 节 PFS 新密钥处理TS协商与请求内网信息等2 响应方通过 UDP 4500 端口接收报文响应方通过 UDP 4500 端口发送 CREATE_CHILD_SA 报文用于用于告知发起方选中的 CHILD_SA 提议DH 协商一个新的 CHILD_SA 密钥最终 TS 与响应内网信息等执行新的 DH 密钥交换可选但推荐2.6CREATE_CHILD_SA 交换CHILD_SA 重密钥该交换主要用于 CHILD_SA 重密钥在 CHILD_SA 生命周期到期后更新密钥以实现数据通道的 PFS。重密钥请求报文仅比新建 CHILD_SA 的请求报文中添加一个 NREKEY_SA通知负载以向响应方表达重密钥的意愿响应报文同新建 CHILD_SA 的响应报文重密钥会新建 CHILD_SA但会覆盖原来的 CHILD_SA。执行新的 DH 密钥交换可选但推荐。处理新密钥参见 2.10 节 PFS 新密钥处理2.7CREATE_CHILD_SA 交换IKE_SA 重密钥该交换主要用于 IKE_SA 重密钥在 IKE_SA 生命周期到期后更新密钥以实现控制通道的 PFS不包含流量选择器负载使用旧 IKE_SA 进行安全传输。处理新密钥参见 2.10 节 PFS 新密钥处理发起方响应方HDRSK{ SAiKEiNi }--1----2--HDRSK{ SArKErNr }1 发起方通过 UDP 4500 端口发送 IKE_SA_INIT 报文用于新 IKE_SA 提议SKEYSEED 值协商与 NAT 检测NAT-DN负载的一种2 响应方通过 UDP 4500 端口接收报文响应方通过UDP 500端口发送 IKE_SA_INIT 报文用于告知发起方选中的新 IKE_SA 提议 IKE_SA的密钥交换RFC 强制规则IKE SA 重密钥必须执行全新的 Diffie-Hellman 交换禁止省略 KE 载荷严格保障完美前向保密。2.8INFORMATIONAL 交换该交换主要用于交换信息报告错误状态通知存活检测或删除一个 SA 或隧道主要包含 N 负载 D 负载或 CP 负载。发起方响应方HDRSK{ ND ... }--1----2--HDRSK{ N ... }2.9IKEv2 的 NAT 穿越检测IKE 使用 N 负载的 NAT_DETECTION_SOURCE_IP16388与 NAT_DETECTION_DESTINATION_IP16389分别用于检测源地址/端口与目的地址/端口是否被 NAT 修改它首先基于发起者的发起方视角看到的 SPIi | SPIr | 源 IP 地址 | 源端口号 计算哈希值并复制进 NAT_DETECTION_SOURCE_IP N负载再将发起方视角看到的 SPIi | SPIr | 目的 IP 地址 | 目的端口号 计算哈希值并复制进 NAT_DETECTION_DESTINATION_IP N负载一并发送至响应方响应方根据自己视角看到的地址/端口进行一样的哈希值计算如果两个值都一样说明两方都不在 NAT 之后如果其中至少一个值不一样就说明有至少有一方在 NAT 之后双方都进入 NAT-T 模式IKE控制通道端口转为 UDP 4500。2.10IKEv2 密钥交换与派生与 PFS 中的新密钥处理IKE_SA 或是 CHILD_SA 所需要的所有密钥都通过从 SKEYSEED 值派生协商 SKEYSEED 值发生在 IKE_SA_INIT 交换中的 KE 负载用于 DH 密钥协商与 NiNr 负载随机数用于密码学新鲜性与防重放攻击交换一旦交换完成两方都能计算出 SKEYSEED 值该值用来生成所有与 IKE_SA 相关的子密钥 两方分别需要派生出 7 个密钥SK_dSK_aiSK_arSK_eiSK_erSK_piSK_pr这些值将按照该公式进行计算SKEYSEED prf ( Ni | Nr , g^ir ){ SK_d | SK_ai | SK_ar | SK_ei | SK_er | SK_pi | SK_pr } prf ( SKEYSEED, Ni | Nr | SPIi | SPIr )在开启 PFS 的情况下新的 SKEYSEED prf( SK_d (old)g^ir (new) | Ni | Nr )其他所有密钥同时更新其中g^ir 为 Diffie-Hellman 的共享秘密值NiNr 的值取最近一次交换的值SK_d 用于派生 CHILD_SA 相关的子密钥SK_ai 与 SK_ar 分别作为双方用于完整性保护的密钥SK_ei 与 SK_er 分别作为双方用于加密与解密的密钥SK_pi 与 SK_pr 分别作为双方用于为 AUTH 负载签名的密钥使用生成密钥的 EAP 方法认证不使用该密钥签名参见 2.12 节。CHILD_SA 的所有密钥都需要从 SK_d 中派生在不开启 PFS 的情况下公式为KEYMAT prf ( SK_d, Ni | Nr )NiNr 的值取最近一次交换的值如 IKE_AUTH 或 CREATE_CHILD_SA 交换中的。如果开启 PFS公式变为KEYMAT prf ( SK_d, g^ir (new) | Ni | Nr)g^ir (new) 值为最近一次协商 CHILD_SA 重密钥的 Diffie-Hellman 共享秘密值其中KEYMAT 为密钥材料总输出后续会按规则拆分为不同方向不同协议的功能密钥发起方→响应方方向的密钥截取优先级高于响应方→发起方方向的密钥2.11IKEv2 身份认证当不使用 EAP 认证时双方通过交换对同一个数据段的签名完成身份认证双方均对对方的随机数进行签名这是保障交换过程安全性的核心设计。首先对于发起方它的待签名字节流生成规则为InitiatorSignedOctets RealMessage1 | NonceRData | MACedIDForI其中RealMessage1 为 IKE_SA_INIT 完整请求报文如果为 NAT-T 模式需要在前部补充 4 字节的 0 再参与拼接NonceRData 为 IKE_SA_INIT 交换中的 Nr 纯数值不包含头部MACedIDForI 为 发起方身份的 PRF 绑定值计算公式为MACedIDForI prf ( SK_piRestOfInitIDPayload )其中RestOfInitIDPayload 去掉头部后的 IDi 负载。对于响应方它的待签名字节流生成规则类似于发起方为ResponderSignedOctets RealMessage2 | NonceIData | MACedIDForR其中RealMessage2 为 IKE_SA_INIT 完整响应报文NonceIData 为 IKE_SA_INIT 交换中的 Ni 纯数值不包含头部MACedIDForR 为响应方身份的 PRF 绑定值计算公式为MACedIDForR prf ( SK_prRestOfInitIDPayload )其中RestOfInitIDPayload 去掉头部后的 IDr 负载特殊修改情况与发起方相同。当两方分别计算出自己的待签名字节流后便可进行签名签名主要有 3 种主流方式第一种方式使用预共享密钥PSK进行对称 HMAC 运算签名首先需要对 PSK 进行一次密钥派生避免密钥复用公式为AuthKey prf( PSK, Key Pad for IKEv2 )输入的种子为固定 17 字节的 ASCII 字符串之后便可计算最终 AUTH 负载值公式为AUTH prf ( AuthKey, 待签名字节流 )。第二种方法使用数字证书进行非对称数字签名首先根据本地私钥的类型决定使用的签名算法如 RSA 采用 RSASSA-PKCS1-v1_5 方案ECDSA 采用对应曲线的签名算法再使用与数字证书对应的私钥对待签名字节流签名最后将签名结果填入 AUTH 负载头部标记对应的认证方法编号如 RSA 签名为 1ECDSA 为 10 等即可。第三种方法使用 EAP 认证使用生成密钥的 EAP 方法认证用生成的 MSK 替换 PSK 公式中的共享密钥执行完全相同的两步运算即可。双方完全可以使用不同的认证方式。2.12使用 EAP 认证的 IKEv2除 IKEv2 原生公钥签名与共享密钥认证外还支持使用功能更丰富的 EAP 认证。发起方使用 EAP 认证的意愿通过在首个 IKE_AUTH 报文中不携带 AUTH 负载表达给响应方通过携带 IDi 负载而不携带 AUTH 负载发起方可以声明自己的身份但不对其进行证明。如果双方都接受 EAP那么响应方将会响应一个包含 EAP 负载的 IKE_AUTH 报文并响应方推迟开始协商 SA、TS 等直到基于 EAP 的认证完成。如果使用生成密钥的 EAP 方法认证生成的 MSK 经过 PRF 派生后用于对 AUTH 中的签名对象进行 PRF 签名不得用做其他任何用途。IKEv2 通常不建议使用不生成密钥的 EAP 方法认证若确实使用AUTH 载荷必须分别使用 SK_pi 与 SK_pr 生成。使用 EAP 认证的 IKE_AUTH 流程图例发起方响应方HDRSK{ IDiCERTCERTREQSAi2TSiTSr }--------HDRSK{ IDrCERTAUTHEAP }HDRSK{ EAP }--------HDRSK{ EAP }......----HDRSK{ EAP(success) }HDRSK{ AUTH }--------HDRSK{ SAr2AUTHTSiTSr }三、ESPEncapsulate Secure Payload详解3.1简介ESP 为 IP报文提供数据完整性校验、身份验证、数据加密以及重放攻击保护等。 除了 AH 提供的所有服务外还提供机密性服务。 ESP 可在传输模式以及隧道模式下使用。ESP 头部可以位于IP头与上层协议之间或者用它封装整个IP数据报。ESP 的 IP 协议号为 50。3.2ESP NAT-T 模式ESP NAT-T 模式一种用于 ESP 报文穿越 NAT 的模式。由于现代 NAT 普遍使用 PAT端口地址转换但 ESP 是三层封装协议不具备端口号的概念如果直接穿越 NATPAT无法对其改写端口号导致无法穿越 NAT。NAT-T 模式的解决方案是将 ESP 报文封装进 UDP 报文中进行传输即在 IP 头部与 ESP 头部之间插入一个 UDP 头部使用 UDP 4500 端口作为源和目的端口以便 NAT 识别以及改写端口号UDP头部同IP头部不被加密也不被认证。3.3ESP 报文封装标准格式蓝色被认证红色被认证且被加密3.3.1ESP 传输模式封装标准格式IPv4[IPv4公网头部][ESP头部][传输层头部] [业务数据] [ESP尾部][ESP ICV]3.3.2ESP 传输模式封装标准格式IPv6[IPv6公网头部] [IPv6扩展头部][ESP头部][IPv6目的选项扩展头部] [传输层头部] [业务数据] [ESP尾部][ESP ICV]3.3.3ESP 隧道模式封装标准格式IPv4[IPv4公网头部][ESP头部][IPv4原始头部] [传输层头部] [业务数据] [ESP尾部][ESP ICV]3.3.4ESP 隧道模式封装标准格式IPv6[IPv4公网头部] [IPv6公网扩展头部][ESP头部][IPv6原始头部] [IPv6原始扩展头部] [传输层头部] [业务数据] [ESP尾部][ESP ICV]3.3.5ESP 头部标准格式不被加密(长度8 Bytes)名称长度用途SPI入站SPI4 Bytes记录对方的入站 SPI用于匹配对方的入站 SASequence Numbe序列号4 Bytes从1开始每一个报文段加一用于匹配请求与响应与防止重放攻击3.3.6ESP 尾部标准格式被加密长度可变名称长度用途Padding填充可变若所采用的加密算法要求明文长度为某一字节数的整数倍如 AES-128 分组密码的分组长度则通过填充字段将明文由载荷数据、填充、填充长度、下一个头部字段共同组成补齐至算法要求的长度。Pad Length填充长度1 Byte指示填充字段的字节数Next Header下一个头部1 Byte标识内层载荷的协议类型和 IP 头的协议号字段语义完全一致TCP6UDP17IPv44IPv6413.3.7ESP ICV 标准格式不被加密长度可变名称长度用途ICV完整性校验值取决于完整性保护算法取决于完整性保护算法 校验整个ESP报文的完整性计算范围覆盖头部和整个加密区负载与尾部3.4算法ESP 中加密算法与完整性保护算法均为可选服务项以实现如仅需完整性保护算法的场景但至少必须选择其中一种服务因此两种算法不得同时设置为空NULL。3.4.1加密算法用于保护 ESP 报文机密性的算法由报文收发对应的 SA 指定ESP 既可以适配分组密码如 AES‑CBC也适配流密码如 AES‑CTR。由于 IP 报文可能乱序到达在使用分组密码的情况下可能无法获取其 IV因此 IV 可以显式承载在载荷字段中也可以从外层 IP 或 ESP报文头部的明文部分派生。3.4.2完整性保护算法用于保护 ESP 报文完整性的算法由报文收发对应的 SA 指定与加密算法同理所有适配 ESP 的完整性算法都必须支持对乱序到达、存在丢包的报文进行处理。3.4.3组合模式算法若使用组合模式算法将同时提供机密性与完整性服务。与加密算法同理组合模式算法必须支持逐包的密码学同步以适配乱序到达、存在丢包的报文解密场景。不同的组合模式算法对载荷、SPI 以及扩展序列号字段的完整性保护实现方式可能存在差异。为提供统一的、与算法无关的调用方式ESP 协议不为组合模式定义额外的载荷子结构。例如部分算法可能在密文封装范围内复制 SPI 与序列号字段也可能将 ICV 追加在 ESP 尾部这些实现细节对外都不可见。3.5ESP 出入站处理3.5.1ESP 出站处理IP 协议栈收到来自上层协议栈的报文正常封装后根据路由表先对原始报文进行路由在启用 IPsec 的情况下再投递给投递给 IPsec 内核处理IPsec 内核提取原始报文的五元组并查询出站 SPD如果命中规则则进入后续流程如果需要执行加密则查询 SAD 如果有对应出站 SA 则进行后续流程否则触发 IKEv2 建立 SA最后投递给 ESP 内核ESP 内核收到后查询 SAD根据对应的入站 SA 构造头部尾部执行加密计算 ICV 与计算序列号构造出完整 ESP 报文后投递给 IP 协议栈根据工作模式的不同如果是传输模式 SA那么直接投递给下层协议栈发送数据如果是隧道模式 SA投递 IP 协议栈并进入下一步IP 协议栈根据路由表对外层公网 IP 头部进行路由投递给下层协议栈发送数据3.5.2ESP 入站处理IP 协议栈收到来自下层协议栈的报文正常解封后根据协议字段 50 投递至 ESP 内核ESP 内核收到后查询 SAD根据对应的入站 SA 执行解密校验 ICV还原成原始 IP 报文后投递给 IP 协议栈根据工作模式的不同如果是传输模式 SA那么直接投递给上层协议栈处理数据如果是隧道模式 SA投递 IP 协议栈并进入下一步IP 协议栈正常解封原始 IP 报文根据协议字段投递给上层协议栈处理数据3.6基于策略与基于路由的隧道模式IPsec 中 ESP 的“基于策略”和“基于路由”的隧道模式是 VPN 的两种实现方式。它们在触发加密的方式、灵活性、以及支持的特性上有根本区别。3.6.1基于策略的隧道模式基于策略的隧道模式通常是通过安全策略如访问控制列表 ACL 或 SPD精确匹配“感兴趣流”的源/目的IP、协议等核心是“策略”将流量导入隧道是策略中的一个动作数据包匹配策略后触发加密但不支持动态路由协议配置简单一般系统默认3.6.2基于路由的隧道模式基于路由的隧道模式通常是创建一个虚拟的隧道接口如 VTI 或是 Tunnel 虚拟接口通过路由表决定哪些流量进入该接口隧道是一个独立的三层逻辑接口意思是进入该接口的所有流量都会进入 IPsec 内核进行加密等操作数据包匹配路由下一跳指向隧道接口后触发加密支持动态路由协议如 OSPFBGP 等配置稍复杂但扩展性和灵活性更好如有勘误欢迎指出