zoukankan      html  css  js  c++  java
  • [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实验

    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.

    完了。希望你已经懂了。

  • 相关阅读:
    delegate
    .net企业级架构实战之1——框架综述
    .net企业级架构实战之3——业务对象建模及codesmith模板
    ubuntu学习小记
    [导入]【翻译】WF从入门到精通(第六章):加载和卸载实例
    专注SilverLight
    常用JS验证函数总结
    星级评分jQuery插件 (转)
    Windows Server 2003安装最新版MSN的方法
    [导入]【翻译】WF从入门到精通(第七章):基本活动的操作
  • 原文地址:https://www.cnblogs.com/hugetong/p/10271736.html
Copyright © 2011-2022 走看看