[strongswan] strongswan是如何实现与xfrm之间的trap机制的
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实验
- 首先通过swanctl --load-all命令,将设置为trap的配置信息下发给strongswan。
- 这个时候,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
这个时候,作者在trap strongswan网关后面的子网里发了一个ping包给对方网络。
可以观察到网络通了,是可以ping通的。然后通过ip xfrm命令也能查看到sa已经在kernel
里边建立里起来。用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机制的的更多相关文章
- 用ssh建立机器之间的信任机制
继续整理以前的博客,第二弹:用ssh建立机器之间的信任机制 #!/bin/bash #需要远程添加信任机制的机器 REMOTE[]=db-XXX-XXX1.db01 REMOTE[]=db-XXX-X ...
- [ipsec][strongswan] strongswan源码分析-- (三) xfrm与strongswan内核接口分析
目录 strongwan sa分析(三) xfrm与strongswan内核接口分析 1. strongswan的实现 2. 交互机制 4. xfrm的消息通信的实现 strongwan sa分析(三 ...
- [ipsec][strongswan] strongswan源码分析--(一)SA整体分析
strongswan SA分析(一) 1 概念 下面主要介绍两个本文将要阐述的核心概念.他们是SA和SP.注意,这不是一篇不需要背景知识的文章.作者认为你适合阅读接下来内容的的前提是,你已经具备了一下 ...
- [ipsec][strongswan] strongswan源码分析--(〇)总体架构图
history: 2019-06-05, 增加配置文件解析部分. 2019-06-05,增加plugin优先级排序部分. charon进程初始化阶段的流程图 约定: 实线代表流程图. 虚线代表调用栈, ...
- [ipsec][strongswan]strongswan源码分析--(零)引子
目录 strongswan sa 资料 编译 启动 进程信息 结构 架构图与插件 配置运行 传统配置方法 新的配置方法 其他配置方法 详细的配置文档 配置示例 用法 加密库 libgmp libcry ...
- [ipsec][strongswan] strongswan源码分析--(四)plugin加载优先级原理
前言 如前所述, 我们知道,strongswan以插件功能来提供各种各样的功能.插件之间彼此相互提供功能,同时也有可能提供重复的功能. 这个时候,便需要一个优先级关系,来保证先后加载顺序. 方法 在配 ...
- [ipsec][strongswan] strongswan源码分析-- (二)rekey/reauth机制分析
目录 strongwan sa分析(二) 名词约定 rekey/reauth 机制分析 1 概述 2 reauth 3 CHILD SA rekey 4 IKE SA rekey 5 其他 stron ...
- [ipsec][strongswan] strongswan源码分析--(五)plugin的配置文件的添加方法与管理架构解析
前言 我们知道,strongswan是基于插件式管理的.不同的插件有不同的配置文件,在这下面, 我们以netlink的插件为例:etc/strongswan.d/charon/kernel-netli ...
- [strongswan] strongswan METHOD宏
使用METHOD宏的函数定义: METHOD(message_t, get_message_id, uint32_t, private_message_t *this) { return this-& ...
随机推荐
- adb devices 报错处理
手机连接pc,cmd窗口输入命令adb devices报如下错误: adb server version (31) doesn't match this client (40)然后adb停止运行 这是 ...
- 3D Slicer中文教程(三)—数据加载及保存方式
1.打开数据与保存数据 (1)打开数据 ——可以将数据拖拽到3D Slicer应用窗口或者从菜单栏工具栏打开. ——多种方式加载大量数据. 有关DICOM数据,请参阅DICOM模块文档. 对于几乎所有 ...
- Dos.Common
引言: Dos.Common是一个开发中的常用类库,如HttpHelper.LogHelper.CacheHelper.CookieHelper.MapperHelper等等.与Dos.WeChat. ...
- 【easy】110. Balanced Binary Tree判断二叉树是否平衡
判断二叉树是否平衡 a height-balanced binary tree is defined as a binary tree in which the depth of the two su ...
- 【原创】大叔经验分享(20)spark job之间会停顿几分钟
今天遇到一个问题,spark应用中在一个循环里执行sql,每个sql都会向一张表写入数据,比如 insert overwrite table test_table partition(dt) sele ...
- nginx+iis使用
一.nginx的介绍 nginx是由俄罗斯人开发的一款高性能的http和反向代理服务器,也可以用来作为邮件代理.相比较于其他的服务器,具有占用内存少,稳定性高等优势 Nginx相关地址 源码:http ...
- 使用numpy 将0-1000 中所有偶数转成0 所有奇数转成1
- TCP报文首段格式
参考:https://www.bilibili.com/video/av9876107?from=search&seid=5217429010533979778 TCP(Transmissio ...
- vs调试的时候,指定的参数已超出有效值的范围。参数名:sit ,先仔细看看错误和我的一样不一样
https://www.cnblogs.com/pei123/p/7694947.html 指定的参数已超出有效值的范围.参数名:sit ,先仔细看看错误和我的一样不一样 更新了1709就这样了,的确 ...
- fastadmin表单验证
Unexpected token < in JSON at position 0 注意: if (!form.is("form"))//form的选择器不是form直接返回所 ...