ike协商的过程最终是为了SA的建立, SA的建立后, 在底层中管理过程,也是相对比较复杂的. 这里边也经常会出现失败的情况.

我们以strongswan为例, 在strongswan的底层SA管理由linux kernel实现, 并通过netlink与strongswan进行交互.

当linux kernel收到sa的建立命令,并不幸失败后, 会给strongswan回复一个error消息.

我们现在将视角来回到ike协议的交互层面. 来观察一下.

发生〇中的情况时, 我们抓包观察如下:

可以看见, 经过四个包的协商之后. 发起端, 主动回复了一个Delete消息给响应端.

(我们是在发起端人为设置的kernel SA添加失败, 来模拟这个场景.)

现在来进行一下分析. 如下图:

1.  我们知道child sa的建立过程是在上边pcap那张图的包3和包4中进行的. 在下边这张手绘图里, pkt1表示包3, pkt2表示包4

2. 整个SA的建立与协商过程是这样的:

a, 为对方分配一个spi

b. 将该spi发给对方.

c. 对方通过收到的spi在本地建立sa

d, 对方为我方申请一个spi

e, 对方将申请到的spi发送给我方.

f. 我方收到spi后, 在本地建立sa.

3. 上边的过程里, 只讲到了建立出方向SA的过程. 实际上每端都需要管理两个方向SA. 对于我方来说,本地SA的建立需要至少在f之前完成, 对于对方来说, 本地SA的建立需要至少在d之前完成.

(无论本地SA的建立在什么情况下完成, 都不影响我们当前讨论的错误处理逻辑.)

如上图. 如果process #3中出现了错误, 发起方将发送Delete报文给响应方. 否则不发生, 如最上面的pcap截图.

另一种情况是, 如果process #2中发生错误, 响应方将在报文pkt 2中携带错误信息发送给发起方.  使用 notification 报文段.

见:https://tools.ietf.org/html/rfc7296#section-2.21

If the error occurred on the responder, the
notification is returned in the protected response, and is usually
the only payload in that response. Although the IKE_AUTH messages
are encrypted and integrity protected, if the peer receiving this
notification has not authenticated the other end yet, that peer needs
to treat the information with caution. If the error occurs on the initiator, the notification MAY be
returned in a separate INFORMATIONAL exchange, usually with no other
payloads. This is an exception for the general rule of not starting
new exchanges based on errors in responses.

基于之前的信息, 现在做一个测试,查看另一个例子.

修改掉协商一端的SPK(预共享秘钥), 这个时候,将导致身份认证的失败, 我们现在通过如下的截图, 来查看这样的例子.

从上图中, 我们可以看到如(三)中的描述, 响应方通过notification的信息段反馈了认证失败这样的报错信息.

另外, 观察发起方的strongswan日志, 发现如下日志信息:

Aug  ::06.321 [NET] received packet: from 192.168.8.129[] to 192.168.8.103[] ( bytes)
Aug ::06.321 [IKE] received AUTHENTICATION_FAILED notify error
Aug ::06.321 [CHD] CHILD_SA child-sun{} state change: CREATED => DESTROYING
Aug ::06.321 [KNL] deleting SAD entry with SPI c01e421a
Aug ::06.323 [KNL] deleted SAD entry with SPI c01e421a
Aug ::06.323 [IKE] IKE_SA conn-sun-[] state change: CONNECTING => DESTROYING

ipsec][strongswan] ipsec SA创建失败后的错误处理分析的更多相关文章

  1. spring-cloud-starter-hystrix(断路器)服务不通或者调用失败后的错误处理和回调

    雪崩效应 在微服务架构中通常会有多个服务层调用,大量的微服务通过网络进行通信,从而支撑起整个系统.各个微服务之间也难免存在大量的依赖关系.然而任何服务都不是100%可用的,网络往往也是脆弱的,所以难免 ...

  2. Socket创建失败:10093错误

    10093的错误,应用程序没有调用 WSAStartup,或者 WSAStartup 失败. 问题描述:Failed to create UDP socket:10093!Close and rest ...

  3. SQLServer中用户 'sa' 登录失败解决办法

    今天下午,很奇怪的网站突然就打不开了,报错如下: “/”应用程序中的服务器错误. 用户 'sa' 登录失败. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误 ...

  4. [ipsec][strongswan] strongswan源码分析--(一)SA整体分析

    strongswan SA分析(一) 1 概念 下面主要介绍两个本文将要阐述的核心概念.他们是SA和SP.注意,这不是一篇不需要背景知识的文章.作者认为你适合阅读接下来内容的的前提是,你已经具备了一下 ...

  5. [ipsec][strongswan] 使用VTI配置基于路由的ipsec

    之前写的一个:[dev][ipsec] 基于路由的VPrivateN 一 我们默认用strongswan的时候基于策略的. 也就是policy. 基于策略的ipsec中, policy承担了两部分功能 ...

  6. [ipsec][strongswan]strongswan源码分析--(零)引子

    目录 strongswan sa 资料 编译 启动 进程信息 结构 架构图与插件 配置运行 传统配置方法 新的配置方法 其他配置方法 详细的配置文档 配置示例 用法 加密库 libgmp libcry ...

  7. [ipsec][strongswan] strongswan源码分析--(五)plugin的配置文件的添加方法与管理架构解析

    前言 我们知道,strongswan是基于插件式管理的.不同的插件有不同的配置文件,在这下面, 我们以netlink的插件为例:etc/strongswan.d/charon/kernel-netli ...

  8. tomcat 运行异常Cannot create PoolableConnectionFactory (到主机 的 TCP/IP 联接失败)(用户sa登录失败)

    这是在java web中启动tomcat遇到的问题,因为这个问题,整整折腾了两天的时间,找了很都解决方案,但终究还是不能正常.现在整理下这个问题的解决方案: 首先,出这个问题之前,请检查一下的问题,这 ...

  9. 删除Windows中隐藏的物理网卡和网络虚拟化失败后的虚拟网卡

    Windows环境下,在更换硬件服务器主板和网卡等硬件.恢复操作系统或者网络虚拟化失败后,可能会出现网卡方面的问题.例如,设备管理器中多了不应该存在的网卡:因命名冲突无法重命名当前网络连接:IP地址冲 ...

随机推荐

  1. 使用ffmpeg -re循环推流(循环读取视频文件)推送EasyDSS RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器的方法

    需求分析 众所周知,EasyDSS与EasyNVR最大的区别是,EasyDSS被动接受前端设备的推流,将推送过来的直播流进行直播转码.智能处理.视频分发,在通过CDN分发节点分发到终端播放SDK.而E ...

  2. 图像处理软件ImageJ

    ImageJ是一个基于java的公共的图像处理软件,它是由National Institutes of Health开发的.可运行于Microsoft Windows,Mac OS,Mac OS X, ...

  3. vue-cli3 配置跨域并通axios进行数据请求

    在项目根目录下创建vue.config.js文件,配置信息: module.exports = { devServer: { proxy: { '/api': { target: 'http://19 ...

  4. tablespace表空间

    tablespace——表空间,便于理解,把oracle数据库看作一个实在房间,表空间可以看作这个房间的空间,是可以自由分配,在这空间里面可以堆放多个箱子(箱子可以看作数据库文件),箱子里面再装物件( ...

  5. ENSP静态链路聚合实验配置要点及实例

    链路聚合分为:静态链路聚合.动态链路聚合链路聚合的负载分担模式:对于二层数据流,系统会根据MAC地址(源mac地址和目的mac地址来计算),而对于三层数据流则会根据ip地址来进行负载分担计算. 静态链 ...

  6. 【转帖】MIPS构架之:我和龙芯有个约会

    MIPS构架之:我和龙芯有个约会 https://www.eefocus.com/mcu-dsp/364490 <处理器史话>之十二 2016-06-24 12:21 作者:付丽华预计 1 ...

  7. python基础 — 异常处理

    什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在Python无法正常处理程序时就会发生一个异常. 异常是Python对象,表示一个错误. 当Pyth ...

  8. xorm插入数据实例

    package main import ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/ ...

  9. wireshark抓包新手教程(win10空包问题)

    首先下载官网的wireshark,下载地址https://www.wireshark.org/ 下载完按照提示一步步安装 安装完打开wireshark,安装中文包 安装之前首先讲一下win10截图工具 ...

  10. Js学习04--对象

    1.如何辨别js中的对象 除了五种基本的数据类型,其他的都是对象.万物皆对象. 2.Js中对象的分类 1)内建对象 由ES标准定义的对象,在任何的ES实现中都可以使用. eg:String.Numbe ...