[strongswan] strongswan是如何实现与xfrm之间的trap机制的

目录

  • strongswan与xfrm之间的trap机制

    • 0.
    • 1. 前言
    • 2. 描述
      • 2.1 none
      • 2.2 trap
    • 3. 实验与过程
      • 3.1 trap实验
      • 3.2 none实验
    • 4 背景知识
    • 5. 机制分析
      • 5.1 什么是acquire
      • 5.2 那么,什么时候发送acquire消息呢
    • 6.

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将做为本文的两个重点讨论场景,通过一下篇幅进行考察。

欢迎收看,@[email protected]~~

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做准备。

    通过命令,我们在内核里可以查看到,类似如下的信息。

[[email protected] 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情况。

如下:

[[email protected] 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
[[email protected] 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.

完了。希望你已经懂了。

原文地址:https://www.cnblogs.com/hugetong/p/10271736.html

时间: 2024-10-19 22:43:34

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

多封装,少开放。强烈建议C++标准添加class之间的注入机制

近日在改动了一下下引擎代码(为了自己的组件),发现有些接口是仅仅有特定类及其内部函数才去訪问,却不使用友元声明的形式进行数据訪问--当然使用了普通非virtual的形式也就是意味着不建议重载. 故此: 1.建议派生类(或同意)重载的声明为虚函数即virtual类型, 2.强制派生类实现的声明为纯虚函数 3.不希望派生类重载或覆盖的函数则为普通类,假设訪问群体有限定范围或者范围比較少.能够考虑添加友元+protected的方式进行訪问控制,从而实现有效设计信息传达.可是有的时候我们不能保证可能须要

CentOS 6.3下Strongswan搭建IPSec VPN

一.软件说明 IPsec 是 虚拟私密网络(VPN) 的一种,用于在服务器和客户端之间建立加密隧道并传输敏感数据之用.它由两个阶段组成,第一阶段(Phrase 1, ph1),交换密钥建立连接,使用互联网密钥交换(ike)协议; 第二阶段(Phrase 2, ph2),连接建立后对数据进行加密传输,使用封装安全载荷(esp)协议.参考:维基百科 IPsec 词条. 其中,第一阶段和第二阶段可以使用不同的加密方法(cipher suites).甚至,第一阶段 ike 协议的第一版(ikev1)有两

Strongswan+freeradius+daloradius+ad认证实现ikev2接入服务一

Strongswan+freeradius+daloradius+ad认证实现ikev2接入服务一 Centos7 strongswan安装配置支持 Windows7  ikev2 eap-machapv2模式.计算机证书模式 实验时间:2018年8月6日-2018年8月6日 拓扑图: 环境:     防火墙1:USG2200                 IP地址外网:10.99.101.170    域名:strongswan.test.com     IP地址内网:192.168.20.

【单页应用之通信机制】view之间应该如何通信

前言 在单页应用中,view与view之间的通信机制一直是一个重点,因为单页应用的所有操作以及状态管理全部发生在一个页面上 没有很好的组织的话很容易就乱了,就算表面上看起来没有问题,事实上会有各种隐忧,各种坑等着你去跳 最初就没有一定理论上的支撑,极有可能是这么一种情况: ① 需求下来了,搞一个demo做交待 ② 发现基本满足很满意,于是直接在demo中做调整 上面的做法本身没有什么问题,问题发生在后期 ③ 在demo调整后应用到了实际业务中,发现很多地方有问题,于是见一个坑解决一个坑 ④ 到最

Prism 4 文档 ---第9章 松耦合组件之间通信

当构建一个大而负责的应用程序时,通用的做法时将功能拆分到离散的模块程序集中.将模块之间的静态引用最小化.这使得模块可以被独立的开发,测试,部署和升级,以及它迫使松散耦合的沟通. 当在模块之间通信时,你需要知道不同通信方式之间的区别,那样你才能确定哪种方式对于你的特定的场景最合适,Prism类库提供了以下几种通信方式: 命令.当希望对于用户的交互马上采取动作时使用. 事件聚合.用于ViewModel,展现层,或者控制之间没有所期望的直接动作时. 区域上下文.使用它可以提供宿主和宿主区域的View之

【转】微服务与SOA之间差了一个ESB

本文来自 dockone 编辑:yan 微服务只是最近提出的概念,实际上很多巨头公司(FB.Twitter.AWS等)已经在亲身实践.微服务并不是银弹,但是我们可以参考它的思想来解决自己遇到的问题.对于已经找准市场,业务即将或者马上就要急剧发展的创业公司,适合使用基于微服务的软件架构. 今天阅读了两篇关于微服务的文章,总结一些笔记,简单翻译了一篇文章.说明:并没有严格按照原文一字语句翻译,有部分自己的理解,还有部分是意译. 微服务(micro services)这个概念不是新概念,很多公司已经在

Go语言通道(chan)——goroutine之间通信的管道

Go语言通道(chan)——goroutine之间通信的管道 如果说 goroutine 是 Go语言程序的并发体的话,那么 channels 就是它们之间的通信机制.一个 channels 是一个通信机制,它可以让一个 goroutine 通过它给另一个 goroutine 发送值信息.每个 channel 都有一个特殊的类型,也就是 channels 可发送数据的类型.一个可以发送 int 类型数据的 channel 一般写为 chan int. Go语言提倡使用通信的方法代替共享内存,当一

Centos 7 搭建 IKEv2 VPN 服务

1.安装依赖组件 1 yum -y install gpm-devel pam-devel openssl-devel make gcc 2.安装EPEL 1 yum -y install epel-release 3.安装Strongswan 1 yum -y install strongswan 4.为Strongswan添加别名 ipsec 1 alias ipsec='strongswan' 5.生成CA私钥,并使用此私钥自签名生成CA证书 1 cd /etc/strongswan &&a

2016年3月7日作业 信息化基础知识、信息系统服务管理

1 信息化基础.信息系统服务管理 信息化 信息的概念存在两个基本的层次,即本体论层次和认识论层次. 1.1.3 国家信息化体系要素 国家信息化体系包括信息技术应用.信息资源.信息网络.信息技术和产业.信息化人才.信息化法规政策和标准规范6个要素 1 信息技术应用 是国家信息化建设的主阵地,是信息化体系六要素中的龙头. 2 信息资源 信息资源开发利用是国家信息化的核心任务,是国家信息化建设取得实效的关键,也是我国信息化的薄弱环节,信息资源的开发和利用的程度是称量国家信息化水平的一个重要标志. 3