strongswan与xfrm之间的trap机制

0.

你必须同时知道,strongswan,xfrm,strongswan connect trap三个概念。

才有继续读下去的意义。

入门请转到:【TODO...】

1. 前言

strongswan的vici配置文件中,child_conn配置项下,有一个配置start_action。里边有三个可选的值。

分别为start,none,trap。none为默认。

其中start代表在load好配置之后就up该条conn。

然后,有关none与trap将做为本文的两个重点讨论场景,通过一下篇幅进行考察。

欢迎收看,@_@~~

2. 描述

基于前文。我们现在来解释一下none与trap的含义。

2.1 none

none,代表只加载配置,而不对连接进行任何操作。等于控制程序进行触发conn的up操作。

2.2 trap

trap,翻译成中文是陷阱,捕获的意思。就是说一旦它捕获了一个包,就要触发conn的up。

而捕获这个操作,是通过policy进行的。我们知道,在strongswan的配置信息一旦进行了加载之后,

它就会下发policy给xfrm,这个捕获动作正是通过这个预下发的policy来完成的。

3. 实验与过程

我们分别用none与trap配置做了两个实验。

3.1 trap实验

  1. 首先通过swanctl --load-all命令,将设置为trap的配置信息下发给strongswan。
  2. 这个时候,storngswan已经预先加载了policy给xfrm,为trap做准备。

    通过命令,我们在内核里可以查看到,类似如下的信息。
[root@T9 sbin]# ip xfrm po
src 10.9.0.0/16 dst 10.129.0.0/16
dir out priority 383615 ptype main
tmpl src 192.168.7.9 dst 192.168.7.129
proto esp spi 0xcbbb1290 reqid 1 mode tunnel
src 10.129.0.0/16 dst 10.9.0.0/16
dir fwd priority 383615 ptype main
tmpl src 192.168.7.129 dst 192.168.7.9
proto esp reqid 1 mode tunnel
src 10.129.0.0/16 dst 10.9.0.0/16
dir in priority 383615 ptype main
tmpl src 192.168.7.129 dst 192.168.7.9
proto esp reqid 1 mode tunnel
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0 ptype main
src ::/0 dst ::/0
socket in priority 0 ptype main
src ::/0 dst ::/0
socket out priority 0 ptype main
src ::/0 dst ::/0
socket in priority 0 ptype main
src ::/0 dst ::/0
socket out priority 0 ptype main
  1. 这个时候,作者在trap strongswan网关后面的子网里发了一个ping包给对方网络。

    可以观察到网络通了,是可以ping通的。然后通过ip xfrm命令也能查看到sa已经在kernel

    里边建立里起来。

  2. 用GBD启动charon进行,并重复上边的实验。

    我们能观察到,在发送第一个ping包之后,有如下现象:

    a。 xfrm发送了一条ACQUIRE event给strongswan。

    b。strongswan发送了一个NEWSA消息给xfrm。

    之后便建立了新的child sa。

3.2 none实验

很显然,该实验并没有什么好实验的。我们只观察一件事情,就是在load的config之后。xfrm里边的policy情况。

如下:

[root@T9 sbin]# ip xfrm po
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0 ptype main
src ::/0 dst ::/0
socket in priority 0 ptype main
src ::/0 dst ::/0
socket out priority 0 ptype main
src ::/0 dst ::/0
socket in priority 0 ptype main
src ::/0 dst ::/0
socket out priority 0 ptype main
[root@T9 sbin]#

我们可以看到只有默认policy,而没有任何connection相关的policy。

4 背景知识

这里,需要额外补充一条背景知识。

通过阅读netlink plugin与xfrm接口部分的源码。并没有任何与start_action相关的信息交互。

主要的数据结构中,也都没有start_action这样一个概念存在。

注:有关什么是netlink plugin,以及它在strongswan中的作用,以后补充。。。

5. 机制分析

通过第四小节中补充的知识,以及第三小节的实验。我们可以推断出。start_action这个事情是strongswan

在控制层面上的概念。它通过使用预下发不同的policy和xfrm的acquire机制,共同实现了这一概念。

5.1 什么是acquire

acquire是xfrm通过API向上推送给应用程序的一种消息,它的类型是ACQUIRE。

5.2 那么,什么时候发送acquire消息呢

当xfrm收到一个包的时候,这个包命中了某条policy。这条policy却没有对应的child sa的时候。

xfrm就会对所有注册进了xfrm netlink的应用程序广播这条消息。然后,你便看到了第三小节里的实验现象。

strongswan收到这个消息后,主动下发一个新的sa给xfrm。

6.

完了。希望你已经懂了。

[strongswan] strongswan是如何实现与xfrm之间的trap机制的的更多相关文章

  1. 用ssh建立机器之间的信任机制

    继续整理以前的博客,第二弹:用ssh建立机器之间的信任机制 #!/bin/bash #需要远程添加信任机制的机器 REMOTE[]=db-XXX-XXX1.db01 REMOTE[]=db-XXX-X ...

  2. [ipsec][strongswan] strongswan源码分析-- (三) xfrm与strongswan内核接口分析

    目录 strongwan sa分析(三) xfrm与strongswan内核接口分析 1. strongswan的实现 2. 交互机制 4. xfrm的消息通信的实现 strongwan sa分析(三 ...

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

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

  4. [ipsec][strongswan] strongswan源码分析--(〇)总体架构图

    history: 2019-06-05, 增加配置文件解析部分. 2019-06-05,增加plugin优先级排序部分. charon进程初始化阶段的流程图 约定: 实线代表流程图. 虚线代表调用栈, ...

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

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

  6. [ipsec][strongswan] strongswan源码分析--(四)plugin加载优先级原理

    前言 如前所述, 我们知道,strongswan以插件功能来提供各种各样的功能.插件之间彼此相互提供功能,同时也有可能提供重复的功能. 这个时候,便需要一个优先级关系,来保证先后加载顺序. 方法 在配 ...

  7. [ipsec][strongswan] strongswan源码分析-- (二)rekey/reauth机制分析

    目录 strongwan sa分析(二) 名词约定 rekey/reauth 机制分析 1 概述 2 reauth 3 CHILD SA rekey 4 IKE SA rekey 5 其他 stron ...

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

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

  9. [strongswan] strongswan METHOD宏

    使用METHOD宏的函数定义: METHOD(message_t, get_message_id, uint32_t, private_message_t *this) { return this-& ...

随机推荐

  1. LeetCode第十一题-可以装最多水的容器

    Container With Most Water 问题简介:通过一个给定数组,找出最大的矩形面积 问题详解:给定一个数组,包含n个非负整数a1,a2,…,an,其中每个表示坐标(i,ai)处的点,绘 ...

  2. 错误: H.264 bitstream malformed, no startcode found,

    使用命令 ffmpeg -i hbg.flv -c copy hbg.ts 时遇到如下错误: ffmpeg version 2.8.15-0ubuntu0.16.04.1 Copyright (c) ...

  3. Qt 图像缩放显示

    1. QImage Image; Image.load(":/images/f1.png"); QPixmap pixmap = QPixmap::fromImage(Image) ...

  4. 关于strcpy函数形参类型的解析和指针作为输入型输出型参数的不同

    在C语言中,字符串一直都是热点,关于strcpy函数大家都很熟悉,但是真正了解的很少,一旦用到总会报一大堆莫名其妙错误,今天我就来给大家详细剖析一下strcpy函数. 虽然不能看到strcpy的内部实 ...

  5. IT行业中文资源网址集绵

    1. IT网址:https://github.com/ityouknow/awesome-list 2.后端架构师网址:https://github.com/xingshaocheng/archite ...

  6. echarts的地图点击事件

    1.echarts的地图展示,有时候展示出的数据,虽然鼠标点击上去某个省份或者某个地方会有数据显示,但是点击一下地图没有任何动态效果,如何添加地图点击效果呢,这里自己也是坐下笔记,方便以后使用. 参考 ...

  7. spring boot slf4j日记记录配置详解

    https://blog.csdn.net/liuweixiao520/article/details/78900779

  8. .net core 2.x - 日志 - to elasiticsearch

    记录日志到elasticsearch(es),下面简写es,然后我们可以通过kibana可视化的观察日志信息以及统计分析等. 1.起源 年中旬时候,公司有个需求是需要分析用户的地址,需要先分词处理然后 ...

  9. Metaphor of topological basis and open set

    The definition of topological basis for a space $X$ requires that each point $x$ in $X$ is contained ...

  10. P1341 无序字母对 欧拉回路

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...