• Author       :
  • Email         : vip_13031075266@163.com
  • Date          : 2021.01.23
  • Copyright : 未经同意不得转载!!!
  • Version    : openswan-2.6.51.5
  • Referencehttps://download.openswan.org/openswan/

目的:梳理ipsec如何解析配置文件,支持并添加多个保护子网

一、 流程梳理

启动ipsec服务时会自动解析/etc/ipsec.conf文件,因此从启动ipsec服务开始分析。

其中/etc/init.d/ipsec文件是一个shell脚本:

打开此shell脚本,发现启动时执行的函数是start()

eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量

因此与加载配置文件有关的命令是:ipsec addconn

其中ipsec命令信息如下:

同样是一个shell脚本。

ipsec脚本核心部分是:

这部分执行的命令格式如下所示:

将此命令重新输出到日志文件/home/ipsec.log中,方便查看调用的命令信息:

这里可以看到它使用的addconn命令解析配置文件并添加配置信息

因此,我们需要查看学习addconn它的原理,查看文件类型可知,它是一个可执行文件。

源码中的位置如下:openswan-latest\openswan-2.6.51.5\programs\addconn\addconn.c

直接执行此命令,结果没有添加上隧道,重新尝试进行添加,后来终于添加成功了

二、 addconn.c实现原理

addconn可能用到的参数:

static struct option const longopts[] =

{

{"config",                                required_argument,         NULL, 'C'},

{"defaultroute",                        required_argument,         NULL, 'd'},

{"defaultroutenexthop",         required_argument,         NULL, 'n'},

{"debug",                               no_argument,                 NULL, 'D'},

{"verbose",                             no_argument,                 NULL, 'D'},

{"warningsfatal",                       no_argument,                 NULL, 'W'},

{"addall",                              no_argument,                 NULL, 'a'},

{"listroute",                           no_argument,                 NULL, 'r'},

{"liststart",                           no_argument,                 NULL, 's'},

{"varprefix",                           required_argument,         NULL, 'P'},

{"ctlbase" ,                            required_argument,         NULL, 'c' },

{"search",                              no_argument,                 NULL, 'S'},

{"rootdir",                             required_argument,         NULL, 'R'},

{"configsetup",                         no_argument,                 NULL, 'T'},

{"checkconfig",                        no_argument,                 NULL, 'K'},

{"help",                                no_argument,                 NULL, 'h'},

{0, 0, 0, 0}

};

将ipsec服务启动过程中调用的命令保存到文件ipsec.log,然后查看与addconn相关的命令有如下几种:

挂上GDB学习下:

删除隧道重新加载配置文件:

查询状态信息:

添加隧道:

再次挂上GDB,直接使用以下命令添加隧道配置:

/usr/local/libexec/ipsec/addconn --defaultroute 192.168.1.13 --defaultroutenexthop 192.168.1.1 --addall --config /etc/ipsec.d/ipsec_vpn.conf3

运行后,停止在starter_permutate_conns函数中,打印conn信息如下:

starter_permutate_conns

根据添加的whack消息格式,修改配置文件,将隧道名字分别改为Tunnel-4/1x0, Tunnel-4/2x0,然后分别加载这两个配置:

添加后的结果如下:

但是无法删除两个连接,因此在pluto中可能认为这是两个不同的连接。so不是简单的通过隧道名字来实现多个保护子网的。

使用相同的隧道名添加两条隧道,发现会将第一次添加的隧道删除。因此也不是使用相同的隧道名添加多保护子网的。

但是属于不同的连接:

正确的结果应该是:

前两张图是正常的配置文件中多个保护子网是的whack msg消息:可以看出隧道名称分别有wm->namewm->connalias两个名称,其中connalias是主隧道名称,而name则是多保护子网的子隧道名称。

因此尝试在配置文件中添加connalias字段(我也不知道有没有)

分别修改这两个配置文件、并加载配置:

三、 pluto中多保护子网实现(逆向分析)

在使用whack命令查询状态时可以看到有连接相关信息:

/usr/local/libexec/ipsec/whack --status

显示时连接的名字是经过快排(qsort)的,因此显示很整齐。而快排的比较标准是:隧道名+实例序号

从这里可以知道多保护子网实际上是同一个连接的多个实例化而已。

从这里可以

算了,pluto中的代码分析放弃了。

ipsec.conf配置文件多个保护子网解析流程的更多相关文章

  1. 解析.conf配置文件

    解析.conf配置文件 解析.conf配置文件 解析.conf配置文件

  2. openswan一条隧道多保护子网配置

    Author       : Email         : vip_13031075266@163.com Date          : 2021.01.22 Copyright : 未经同意不得 ...

  3. Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统 nsswitch.conf配置文件

    Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统  nsswitch.conf配置文件 朋友们,今天我对你们说,在此时此刻,我们虽然遭受种种困难和挫折,我仍然有一个梦 ...

  4. php.ini与php-fpm.conf配置文件的区别

    php-fpm.conf是PHP-FPM特有的配置文件 php.ini是所以php模式中必须的配置文件 两者的区别是,php-fpm.conf是PHP-FPM进程管理器的配置文件,php.ini是PH ...

  5. ganglia-gmond.conf配置文件

    运行下列命令可以生成gmond默认配置文件: User@host:$ gmond -t 配置文件由大括弧括起来的几个section组成.这些section可以粗略划分为两个逻辑分类.第一类中的sect ...

  6. Apache httpd.conf配置文件 2(Main server configuration)

    ### Section 2: 'Main' server configuration # # The directives in this section set up the values used ...

  7. Redis:redis.conf配置文件 - 及配置详解

    配置文件详解(文章最后有完整的redis.conf文件) ###################################  NETWORK  ######################### ...

  8. Python-S13作业-day3-之编辑ha.conf配置文件

    Python-S13作业-day3-之编辑ha.conf配置文件 需求: 让用户输入字符串类型的字典,实现对配置文件指定,backend  www.oldboy.org下的内容进行 * 查询 * 增加 ...

  9. [原]生产环境下的nginx.conf配置文件(多虚拟主机)

    [原]生产环境下的nginx.conf配置文件(多虚拟主机) 2013-12-27阅读110 评论0 我的生产环境下的nginx.conf配置文件,做了虚拟主机设置的,大家可以根据需求更改,下载即可在 ...

随机推荐

  1. 一键设置WPS_Office_2019专业版的定时自动备份的批处理文件

    一键设置WPS_Office_2019专业版的定时自动备份的批处理文件 rem ================================================ rem 一键设置WPS ...

  2. SpringBoot系列——动态定时任务

    前言 定时器是我们项目中经常会用到的,SpringBoot使用@Scheduled注解可以快速启用一个简单的定时器(详情请看我们之前的博客<SpringBoot系列--定时器>),然而这种 ...

  3. 手脱UPX壳的方法

    0X00    了解 upx UPX作为一款元老级PE加密壳,在以前的那个年代盛行,著名病毒[熊猫烧香]就是使用这款加密壳. 0X01    单步跟踪法 就是使用ollydbg加载程序后,按F8进行单 ...

  4. 在STM32F401上移植uC/OS的一个小问题 [原创]

    STM32F401xx是意法半导体新推出的Cortex-M4内核的MCU,相较于已经非常流行的STM32F407xx和STM32F427xx等相同内核的MCU而言,其特点是功耗仅为128uA/MHz, ...

  5. Linux守护进程及Systemd

    当我们启动一个前台任务后,命令行窗口退出,应用也就一起退出,无法访问了.怎么才能让它变成系统的守护进程(daemon),成为一种服务(service),一直在那里运行呢? 守护进程 前台任务和后台任务 ...

  6. linux 源码搭建Kafka集群,100%有效

    kafka源码编译安装 准备三台服务器 192.168.xxx.xxx 192.168.xxx.xxx 192.168.xxx.xxx 安装kafka前需先安装JDK和zookeeper如下步骤: J ...

  7. Git-06-远程仓库

    本地仓库推送到远程仓库 1 创建ssh key 用户主目录下运行如下命令,然后一路回车 ssh-keygen -t rsa -C "1029612787@qq.com" 2 找到公 ...

  8. unserialize反序列化 安鸾 Writeup

    关于php反序列化漏洞原理什么,可以看看前辈的文章: https://xz.aliyun.com/t/3674 https://chybeta.github.io/2017/06/17/浅谈php反序 ...

  9. VsCode安装使用教程和插件安装方法

    许多渗透方式都python写脚本,比较方便,写一下vscode和插件的安装办法,虽然不是很复杂,但是写一下做一下笔记: Visual Studio Code (简称 VS Code / VSC) 是一 ...

  10. S3C2440—5.UART的使用

    文章目录 一.S3C2440中的UART介绍 1.1 电平匹配 1.2 UART数据帧与波特率 1.3UART框图 二.UART的配置 2.1 UART引脚的配置 2.2 波特率的配置 2.3 数据帧 ...