ipsec.conf配置文件多个保护子网解析流程
|
目的:梳理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->name和wm->connalias两个名称,其中connalias是主隧道名称,而name则是多保护子网的子隧道名称。
因此尝试在配置文件中添加connalias字段(我也不知道有没有)
分别修改这两个配置文件、并加载配置:
三、 pluto中多保护子网实现(逆向分析)
在使用whack命令查询状态时可以看到有连接相关信息:
/usr/local/libexec/ipsec/whack --status
显示时连接的名字是经过快排(qsort)的,因此显示很整齐。而快排的比较标准是:隧道名+实例序号
从这里可以知道多保护子网实际上是同一个连接的多个实例化而已。
从这里可以
算了,pluto中的代码分析放弃了。
最新文章
- kali基本设置
- Android视频播放之VideoView
- web安全及防护
- 转帖不会乱码的,powershell网络蜘蛛
- [转]z-order引出的问题
- mongodb的监控与性能优化
- JAVA基础英语单词表(下)
- 动态规划(水题):COGS 261. [NOI1997] 积木游戏
- Java基础知识强化60:经典查找之二分查找
- Android(工具・集成)
- POST多个参数到Web API控制器
- logstash 内置匹配IP
- linux下JDK,tomcat的安装与环境变量配置
- MySQL中group_concat函数-和group by配合使用
- redmine的邮件配置
- openssl ca(签署和自建CA)
- post请求参数Json字符串包含数组的校验和处理 -工作随记-备查工具
- Spring Boot自定义Banner
- 一些Js操作
- JDK 1.8 ->; 1.7
热门文章
- anyRTC iOS端屏幕录制开发指南
- 为ScrollView增加圆角的三种方式,及自定义属性【在Linearlayout中新增ScrollView支持滚动 后续】
- 小白自学vue的第一天,加油!
- C++ //拷贝构造函数调用时机//1.使用一个已经创建完毕的对象来初始化一个新对象 //2.值传递的方式给函数参数传值 //3.值方式返回局部对象
- Burp - Turbo Intruder
- 树莓派3B/3B+/4B 刷机装系统烧录镜像教程
- OpenCV 之 特征匹配
- zookeeper的集群搭建
- 01 CTF从0到。。。。
- DrJava试用笔记