[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-& ...
随机推荐
- JavaSE笔记-集合
Java集合大致可分为:List,Set,Map,Queue List:有序,可重复 Set:无序(输出和插入顺序不一定一致),不可重复 Map:映射关系,根据key去访问value Queue:队列 ...
- Jumpserver(堡垒机)的安装与应用
官网:http://docs.jumpserver.org/zh/docs/introduce.html 作者:邓聪聪 环境 系统: CentOS 7.6 IP: 172.16.16.2 关闭 sel ...
- C++设计模式——迭代器模式
前言 最近非常感伤,总是怀念大学的日子,做梦的时候也常常梦到.梦到大学在电脑前傻傻的敲着键盘,写着代码,对付着数据结构与算法的作业:建立一个链表,遍历链表,打印链表.现在把那个时候声明的链表的头文件拿 ...
- adb.exe 已停止工作解决办法
最近因为工作原因,接触了下Android Studio,在使用真机调试的时候碰到了adb.exe 已经停止工作的错误. 虽然网上有很多和我一样的教程,但是我觉的还是记录一下自己的情况比较好,毕竟每个人 ...
- bootstrap 解决弹出窗口(modal) 常见问题
无法使用键盘esc关闭窗口方法: 首先在modal容器的div中增加属性tabindex="-1",其次设置键盘ESC属性keyboard为true: 方法1:使用js打开窗口时 ...
- 【原创】运维基础之Docker(1)简介、安装、使用
docker 18.09 官方:https://docs.docker.com/ 一 简介 Docker is a platform for developers and sysadmins to d ...
- ES6 语法学习(二)
1.类的建立与继承 constructor方法是类的构造函数是默认方法,通过new命令生成对象实例时,自动调用该方法.一个类必须有constructor方法,如果没有显式定义,一个默认的constru ...
- js分析 邮箱地址加密 [email protected]
0.参考 https://segmentfault.com/q/1010000000117476 javascript里function之前加上感叹号 ' ! ' 会怎么样? // 这么写会报错,因为 ...
- css常用布局
1.一列布局 html: <div class="header"></div> <div class="body">< ...
- Vs2017 typescript 开发小问题
最近想写点ts的东西,以前用vs2015很方便,直接创建一个ts app项目就折腾了. Vs2017打开,居然发现这个项目模板不见了. 于是研究了一下,由于原来的ts app项目就是一个asp.n ...