![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
openswan源码分析
文章平均质量分 90
主要用来记录openwan源码学习记录以及个人在学习过程中的心得和注意事项
叨陪鲤
哈
展开
-
IPSec 专栏目录锦集(openswan)
为了方便查阅现有的文章,特准备一个目录页供后续查询使用1. openswan任务调度基础知识之信号原创 2020-12-23 00:09:46 · 40491 阅读 · 17 评论 -
IKE协商过程中Commit位的作用
Commit位的作用在ISAKMP协议的头部中有一个commit标记位, 这个commit位是干什么用的?这个问题比较有意思, 虽然做了2年的IPsec,但是这个标志位我并没有注意过。问题来源是这样的:我看到第一张图的时候,注意到报文发送之间差了将近10s, 因此第一感觉是报文丢了(没更具体到最后一个包),重发导致的。但是当我看到第二个图的时候,好像出问题了:这个明显不是由于报文丢弃重发的。不过这个时候,我依然没有上心,只是感觉可能是环境或者抓包出错导致的;因为我以前也遇到过更奇葩的情况,例原创 2022-05-28 00:31:35 · 467 阅读 · 0 评论 -
openswan性能初步分析
openswan性能初步分析这里相对openswan的性能做个简单的说明。为什么要介绍这个话题呢?其实最主要的原因还是想openswan的性能到底如何、极限是多少隧道、会有哪些瓶颈等等? 比如某个项目,客户需要设备支持1000条隧道,那么首先要考虑自己的产品能否支持到这么多?也就是说需要知道自己的实力。如果不考虑这些实际的问题,只一味的接项目,那么最可能的结果就是白白投入这么多的人力物力时间,最终对于公司来说收效甚微。另一个原因:openswan的官方也没有给出明确的性能参数,比如说最大能支持多少原创 2022-05-19 22:18:00 · 890 阅读 · 2 评论 -
RSA 算法图解+数学证明
1. RSA交互流程我下面以使用最为广泛的RSA算法(三位发明者名字的缩写)为例来介绍公钥密码的原理,并通过数学公式做一个简要的证明。当然这个需要的数学定理和公式有点多,我也不太擅长高等数学┭┮﹏┭┮,哦,高等数学中也没有讲mod运算呀,它是数论的概念,也是数论里的最重要的工具。2. RSA的加密RSA的加密过程可以通过一个公式来表示: 加密过程中用到了两个数:E, N。他们是什么呢?从上面的加密公式可以看出,加密报文只需要知道E,N便可以完成,因此只需要知道原创 2022-01-09 09:26:11 · 8831 阅读 · 3 评论 -
SSL/TLS 与 IPSec 对比
SSL/TLS 与 IPSec 对比文章目录SSL/TLS 与 IPSec 对比1. 前言2. 握手阶段上的区别2.1 IPSec 握手流程2.1.1 第一阶段主模式协商流程2.1.2 第二阶段快速模式协商流程2.2 SSL/TLS握手流程2.2.1 基于ECDHE的握手流程2.2.2 基于RSA的握手流程2.3 ????IPSec与SSL/TLS的对比????2.3.1 密钥配送2.3.2 协商流程2.3.3 协商依赖的协议2.3.4 保护对象2.3.5 端认证2.3.6 NAT兼容性1. 前言原创 2021-10-03 12:43:55 · 3973 阅读 · 2 评论 -
推荐一款非常好用的:Windows 虚拟网卡接口驱动
前一段时间,一直在找寻windows操作系统上的虚拟网卡接口,为了搭建隧道使用。但是windows操作系统不像Linux操作系统,它的代码不开源,导致这方面的资料很少,因此也找寻了很长时间,最终找到了两款开源项目的虚拟接口驱动:Wireguard项目的Wintun接口 openVPN的Tap接口...原创 2021-05-29 19:32:21 · 8603 阅读 · 0 评论 -
Linux内核之UDP处理流程
原创 2021-04-16 22:25:25 · 3961 阅读 · 0 评论 -
IKE~多预共享密钥问题~解决方案
原文链接:Configuring more than one Main-Mode Pre-Shared Key (PSK) *dialup* IPSec phase1可能需要梯子来翻过高墙。文章内容如下:Technical Note :Configuring more than one Main-Mode Pre-Shared Key (PSK) *dialup* IPSec phase1 on a FortigateDescriptionThis article explains原创 2021-02-02 22:41:40 · 7112 阅读 · 0 评论 -
命令行解析函数:getopt_long、getopt
一、前言在学习一些项目代码时,尤其涉及到命令行传参的代码,经常遇到getopt相关的函数,对这一类函数可以说是既陌生又熟悉。陌生是因为不知道它是干啥的,熟悉呢,是因为经常遇到。于是乎在追踪了多天ipsec配置文件解析流程之后,准备学习下这一类命令行解析利器。这么多命令行参数,需要解析,想象都让人头大,如果再没有一个好的解析方式,那就雪上加霜了。辛亏有了一类命令行解析函数,可以让这些解析操作变得容易一点点。下面就简单的介绍下这一类函数,主要有getopt、getopt_long、getopt_l...原创 2021-01-30 22:39:35 · 4672 阅读 · 0 评论 -
ipsec.conf配置文件多个保护子网解析流程
Author : Email : vip_13031075266@163.com Date : 2021.01.23 Copyright: 未经同意不得转载!!! Version : openswan-2.6.51.5 Reference:https://download.openswan.org/openswan/ 目的:梳理ipsec如何解析配置文件,支持并添加多个保护子网...原创 2021-01-30 19:36:09 · 7486 阅读 · 0 评论 -
为何GRE可以封装组播报文而IPSEC却不行?
Author : Email : vip_13031075266@163.com Date : 2021.01.23 Copyright: 未经同意不得转载!!! Version : ubantu-18.04.02 Reference: 目录一、前言二、明确两个问题三、GRE封装原理四、IPsec为什么不行?五、结论一、前言这个问题可能是在学习...原创 2021-01-24 11:24:27 · 8684 阅读 · 11 评论 -
ubantu与CentOS虚拟机之间搭建GRE隧道
Author : Email : vip_13031075266@163.com Date : 2020.01.23 Copyright: 未经同意不得转载!!! Version : openswan-2.6.51.5 Reference:https://download.openswan.org/openswan/ 目录0. 前言1. Linux内核支持的隧道类型2. G...原创 2021-01-23 15:27:25 · 6018 阅读 · 2 评论 -
openswan一条隧道多保护子网配置
Author : Email : vip_13031075266@163.com Date : 2021.01.22 Copyright: 未经同意不得转载!!! Version : openswan-2.6.51.5 Reference:https://download.openswan.org/openswan/ 在学习IKE协商过程中,一般都知道IKE支持这种配置:“一个IK...原创 2021-01-22 23:32:26 · 7617 阅读 · 2 评论 -
openswan框架和编译时说明
刚开始学习openswan项目代码时,自己尝试了在虚拟机上编译、安装、运行openswan代码,由于当时刚开始学习openswan代码,因此对于其构成并不清楚,在编译、运行过程中有了问题,基本是通过百度来解决的。当时遇到的问题虽然不多,最终花了两天时间成功在两台虚拟机之间可以成功协商ipsec隧道,但是对于编译过程中的部分问题也一直不清楚。(关于在虚拟机中编译安装openswan,搭建ipsec环境,我当时写了一篇博客用来记录当时的问题和解决办法openswan源码ubantu下编译、安装、...原创 2021-01-21 23:58:17 · 5857 阅读 · 4 评论 -
openswan中DH算法说明
Author : Email : vip_13031075266@163.com Date : 2021.01.11 Copyright: 未经同意不得转载!!! Version : openswan-2.6.51.5 Reference:https://download.openswan.org/openswan/1. openswan源码中支持的DH组如下:2. DH组编号如下: DH组编号 ...原创 2021-01-11 23:48:03 · 15707 阅读 · 2 评论 -
DH算法图解+数学证明
前几天和同事讨论IKE密钥交换流程时,提到了Diffie-Hellman交换。DH算法最主要的作用便是在不安全的网络上成功公共密钥(并未传输真实密钥)。对于DH算法的数学原理则不清楚,因此私下对DH算法进行一个简单学习。学习基本原理比较容易,关于其中的大质数、对数离散、原根等可以不理解,但是如果对于它提及到的数学公式也不理解的话,总感觉get不到要领和精髓。因此半夜凌晨1点从刚暖热乎的被窝又爬了出来,想要证明下他们给的公式是否正确( 其实当成定理记住也就OK了,不过我嘛,还是爬起来了)。...原创 2021-01-07 23:03:09 · 21314 阅读 · 7 评论 -
ipsec 加密流程(四):封装状态机和发送流程
1. ipsec封装状态机:ipsec封装状态机是一个很经典有限状态机实现:(当前状态,执行动作,下一个状态),同时它的核心调度流程也是比较简单:如果当前状态执行成功,则跳转至下一状态。此外在ipsec状态机中,可以通过实际参数配置(如ESP封装、IP隧道封装、AH封装等)来自动选择下一状态,这个是在ipsec_xmit_cont()函数中实现的。我们直接来看状态机和核心调度流程: struct { enum ipsec_xmit_value (*action)(struc.原创 2020-11-30 23:07:46 · 4082 阅读 · 0 评论 -
ipsec 加密流程(三):ESP加密、AH认证处理流程
《openswan》专栏系列文章主要是记录openswan源码学习过程中的笔记。Author : Toney Email : vip_13031075266@163.com Date : 2020.11.24 Copyright:未经同意不得转载!!! Version : openswan-2.6.51.5 Reference:https://download.openswan.org/openswan/在前两篇文章里...原创 2020-11-24 00:33:10 · 4868 阅读 · 0 评论 -
ipsec 加密流程(二):ipsec初始化操作
《openswan》专栏系列文章主要是记录openswan源码学习过程中的笔记。Author : Toney Email : vip_13031075266@163.com Date : 2020.11.22 Copyright:未经同意不得转载!!! Version : openswan-2.6.51.5 Reference:https://download.openswan.org/openswan/1. 加...原创 2020-11-22 16:57:16 · 5843 阅读 · 0 评论 -
ipsec 加密流程(一):ipsec策略匹配
《openswan》专栏系列文章主要是记录openswan源码学习过程中的笔记。Author: Toney Email: vip_13031075266@163.com Date: 2020.11.22 Copyright: 未经同意不得转载!!! Version:2.6.51.5 Reference:https://download.openswan.org/openswan/1. ipsec策略匹配流程(ipsec_tunnel_start_xmit)注:open...原创 2020-11-22 12:27:27 · 8787 阅读 · 2 评论 -
IKEv2协议协商流程: (IKE-SA-INIT 交换)第二包
IKEv2协议协商流程: (IKE-SA-INIT 交换)第二包1. IKEv2 协商总体框架IKEv1协议建立一对IPSec SA,使用主动模式需要9个报文,使用野蛮模式需要使用6个报文方能协商成功。IKEv2对IKEv1协议进行了优化,IKEv2只需要进行两次交互,使用 4 条消息就可以完成一个 IKEv2 SA 和一对 IPsec SA 的协商建立。IKEv2 定义了三种交互: 初始交换、 创建子 SA 交换 通知交换。下图简单介绍一下 IKEv2 协商过程中的初始交换过程,原创 2020-10-13 22:49:22 · 12993 阅读 · 7 评论 -
IKEv2协议协商流程: (IKE-SA-INIT 交换)第一包
文章目录1. IKEv2 协商总体框架2. 第一包流程图3. openswan源码学习3.1 ikev2parent_outI1()3.2 ikev2parent_outI1_withstate()3.3 ikev2_parent_outI1_common()4. 注意事项4.1 关于此报文中涉及的对IKEv2引入的“新特性”说明4.2 在IKEv1与IKEv2在SA载荷结构上的不同之处:1. IKEv2 协商总体框架IKEv1协议建立一对IPSec SA,使用主动模式需要9个报文,使用野蛮模式需原创 2020-10-12 20:16:46 · 11655 阅读 · 0 评论 -
快速模式第三包收尾之quick_inI2()
快速模式第三包收尾之quick_inI2()1. 序言快速模式有三个报文交换,四个核心函数入口。我们已经对前三个函数处理流程对了一个简单的学习和这里,下面对第四个函数入口quick_inI2()的处理流程做一个简单的介绍。首先需要说明的是快速模式的前两个报文是为了协商感兴趣流的相关参数(如使用的加密算法、认证算法、封装方式、感兴趣流以及生成相关的密钥信息等),而第三个报文则简单了很多:只是为了对前两个报文做认证。那么自然而然引出一个问题:为什么需要第三个报文呢?前两个报文不是已经包含HASH杂凑载荷原创 2020-09-13 17:28:43 · 4349 阅读 · 0 评论 -
快速模式第三包:quick_inR1_outI2()
快速模式第三包:quick_inR1_outI2()1. 序言在上一篇中博客中长话短说了第二包的处理流程,前两个报文的交互是快速模式的关键交互,用来协商会话参数(加解密算法、会话秘钥等),而第三包则是对前两个报文的认证,流程上简单了很多 。quick_inR1_outI2()处理流程实现的功能如下: 解析SA载荷(对端选择的加解密算法信息)、KE载荷(pfs)、Nonce载荷。 构造第三个报文 生成密钥生成材料keymats 建立完整的IPsec SA 发起端建立的为完整IPSec SA原创 2020-09-13 11:18:00 · 4595 阅读 · 6 评论 -
快速模式第二包: quick_inI1_ouR1()
快速模式第二包: quick_inR1_outI2()文章目录快速模式第二包: quick_inR1_outI2()1. 序言2. quick_inR1_outI2()流程图3. 快速模式消息②数据包格式4. 源码分析4.1 quick_inI1_outR1()4.2 quick_inI1_outR1_authtail()4.3 quick_inI1_outR1_cryptocontinue1()4.4 quick_inI1_outR1_cryptotail()5. 小结1. 序言在介绍第②原创 2020-09-08 00:07:47 · 4730 阅读 · 2 评论 -
快速模式第一包: quick_outI1()
文章目录1. 序言2. quick_outI1()流程图3. quick_outI1()源码分析4. quick_outI1_continue()源码分析5. quick_outI1_tail()源码分析5.1 out_sa()5.2 emit_subnet_id()5.3 encrypt_message()5.4 out_modify_previous_np()6. 小结1. 序言openswan源码中有关隧道协商的文章已经比较久没有更新了,那么从这篇开始再重新回到更新流程上。这中间停了将近2个月,.原创 2020-08-27 08:29:29 · 5205 阅读 · 4 评论 -
pluto中监听各个网口的500端口处理逻辑
1. pluto中监听各个网口的500端口处理逻辑whack_handle()find_ifaces()find_raw_ifaces4()socket、setsockopt、bind、ioctl、通过ioctl(master_sock, SIOCGIFCONF, &ifconf)获取到所有的网络配置信息(网口名称和IP地址)通过ioctl(master_sock, SIOCGIFFLAGS, &auxinfo)获取网卡是否处于UP状态构建UP状态的原创 2020-08-10 15:08:09 · 4852 阅读 · 1 评论 -
openswan协商流程之(七):main_inR3
主模式第六包(收包):main_inR31. 序言main_inR3()函数是ISAKMP协商过程中第一阶段的最后一个报文的接收处理函数,它的作用同main_inI3_outR3()部分功能相同:完成对对端身份的认证。他们的不同之处在于不在需要响应报文(如果不考虑第二阶段的话)。此包处理完毕后,发起端便成功建立了ISAKMP SA, 完成了第一阶段主模式的协商。后续便是第二阶段的协商。这里我们主要说明main_inR3的函数调用关系、处理流程以及对源码的注释分析,关于main_inR3的上下文环境暂不叙原创 2020-06-06 20:37:48 · 4681 阅读 · 0 评论 -
openswan协商流程之(六):main_inI3_outR3()
主模式第六包:main_inI3_outR31. 序言main_inI3_outR3()函数是ISAKMP协商过程中第六包的核心处理函数的入口,第五六包主要用来验证对方的身份信息,同时此报文也是加密后的报文。这里我们主要说明main_inI3_outR3的函数调用关系、处理流程以及对源码的注释分析,关于main_inI3_outR3的上下文环境暂不叙述,留给后面的文章进行更新。ISAKMP协商报文的处理流程都比较复杂,此函数在协商的报文处理函数中比较复杂的,因此个人学习期间难免有遗漏和理解错误的地方,原创 2020-06-05 23:45:41 · 4671 阅读 · 0 评论 -
Openswan支持的算法及参数信息:
数据封装加密算法:algorithm ESP encrypt: id=2, name=ESP_DES, ivlen=8, keysizemin=64, keysizemax=64algorithm ESP encrypt: id=3, name=ESP_3DES, ivlen=8, keysizemin=192, keysizemax=192algorithm ESP encrypt: id=6, name=ESP_CAST, ivlen=8, k原创 2020-06-05 20:52:04 · 4808 阅读 · 0 评论 -
openswan协商流程之(四):main_inI2_outR2()
主模式第四包:main_inI2_outR21. 序言main_inI2_outR2()函数是ISAKMP协商过程中第四包的核心处理函数的入口,同时在此处理流程中已经获取到足够的隧道信息,可以生成需要的密钥信息。这里我们主要说明main_inI2_outR2的函数调用关系、处理流程以及对源码的注释分析,关于main_inI2_outR2的上下文环境暂不叙述,留给后面的文章进行更新。ISAKMP协商报文的处理流程都比较复杂,此函数在协商的报文处理函数中比较复杂的,因此个人学习期间难免有遗漏和理解错误的地原创 2020-05-22 00:33:52 · 4662 阅读 · 0 评论 -
openswan协商流程之(三):main_inR1_outI2
主模式第三包:main_inR1_outI21. 序言main_inR1_outI2()函数是ISAKMP协商过程中第三包的核心处理函数的入口。这里我们主要说明main_inR1_outI2的函数调用关系、处理流程以及对源码的注释分析,关于main_inR1_outI2的上下文环境暂不叙述,留给后面的文章进行更新。ISAKMP协商报文的处理流程都比较复杂,一个函数有几百行都是很常见的,因此个人学习期间难免有遗漏和理解错误的地方,请大家多多批评指正。对于源码的学习,我并没有把每一行进行备注,而是将自己原创 2020-05-21 00:14:06 · 4989 阅读 · 3 评论 -
openswan协商流程之(二):main_inI1_outR1()
主模式第二包:main_inI1_outR1()1. 序言main_inI1_outR1()函数是ISAKMP协商过程中第二包的核心处理函数,同时也是响应端口的首包。这里我们主要说明main_inI1_outR1的处理流程,关于main_inI1_outR1的上下文环境暂不叙述,留给后面的文章进行更新。ISAKMP协商报文的处理流程都比较复杂,一个函数有几百行都是很常见的,因此个人学习期间难免有遗漏和理解错误的地方,请大家多多批评指正。2. main_inI1_outR1()处理流程图3. m原创 2020-05-20 00:48:18 · 5227 阅读 · 0 评论 -
openswan协商流程之(一):main_outI1()
主模式第一包:main_outI1()1. 序言main_outI1()作为主模式主动发起连接请求的核心处理函数,我们可以通过学习该函数的处理流程来探究openswan中报文封装的基本思想。如果之前没有学习基本的函数接口(如in_struct, out_struct, out_sa等),那么直接学习main_outI1()流程是比较困难的。如果想快速学习这几个函数接口,可以查看我先前的文章,我把需要的基本知识、思想等做了基本介绍,看完那几个接口再来学习此后的ISAKMP协商流程会容易很多,起到事半功倍的原创 2020-05-20 00:30:12 · 5864 阅读 · 0 评论 -
openswan中out_sa()函数报文封装思想
out_sa()函数讲解1. out_sa前言我已经在上一篇文章中将in_struct函数的基本原理进行了阐述,而out_struct()的实现基本是相同的,如果能理解in_struct()函数,那么自己再去看out_struct、out_raw、out_generic等几个函数接口,就不应该是什么问题了。in_struct是将网络字节序结构体转换为主机字节序结构体;out_struct为将主机字节序结构体转换为网络字节序结构体。这里附上上一篇in_struct的讲解文章:openswan中的in_s原创 2020-05-19 09:02:26 · 4652 阅读 · 0 评论 -
openswan中ISAKMP交互过程关键函数接口
1. ISAKMP交互过程中关键函数接口下面分别说明不同的阶段和模式下的函数接口以及对应的报文。2. 第一阶段(Phase I)主模式函数接口发送端响应端main_outI1主模式第一包main_inI1_outR1主模式第二包main_inR1_outI2主模式第三包main_inI2_outR2主模式第四包main_inR2_outI3主模式第五包main_inI3_outR3主模式第六包main_inR3发送端响应端3. 第一阶段(Phase I)野蛮模式函数接口发送端响应端aggr_ou原创 2020-05-18 22:55:44 · 5013 阅读 · 0 评论 -
openswan中的in_struct和out_struct函数
openswan中的in_struct和out_struct函数文章目录openswan中的in_struct和out_struct函数1. 花絮2. in_struct代码实现分析3. 它到底几个意思?3.1 为什么这么做?3.2 它的实现原理3.2.1 sakmp头部描述说明3.2.2 sakmp头部载荷取值范围3.2.3 isakmp头部中标记位处理3.2.4 参数obj_pbs干什么的?1. 花絮 有什么比openswan中的in_struct和out_struct更让人难以理解的呢???原创 2020-05-17 12:56:17 · 5450 阅读 · 4 评论 -
IPSEC的实现方式
IPSEC的实现方式在IPSEC通信中涉及到一个重要方面,那就是如何定义要保护的数据流(又称为感兴趣流)。这不仅涉及到IPSEC最终要保护哪部分数据,还关系到IPSEC的实现方式,因此有必要把感兴趣流的定义方式进行详细说明。1. 感兴趣流的定义方式“感兴趣流”指的是哪些数据可以进入IPsec隧道进行传输,哪些数据不能进入IPsec隧道传输。在现有的IPsec 实现过程中,最常用的实现方式有两种:“基于ACL”、“基于虚拟隧道接口”。下面我们对这两中方式进行详细的介绍。2. 基于ACL(访问控制)方式原创 2020-05-15 23:11:36 · 9297 阅读 · 6 评论 -
openswan发送状态机分析
openswan发送状态机分析1. 函数调用关系init_moduleipsec_klips_initipsec_tunnel_init_devicesipsec_tunnel_createnumklips_device_opsipsec_tunnel_probeipsec_tunnel_init【以上为初始化流程,下面是真正的数据包处理函数接口】ipsec_tunnel_start_xmitipsec_tunnel_SAlookupipsec_xsm原创 2020-05-14 23:56:49 · 4836 阅读 · 0 评论 -
openswan源码ubantu下编译、安装、基本环境搭建
openswan的编译过程1. 下载源码:对于openswan源码,我们是从官网上下载的。这里提供两个不同的网站: 专门下载openswan源码的网站 openswan官网1源码下载 openswan官网页面 openswan官网2源码下载2. 在虚拟机上解压后编译:我解压后的源码目录为:root@ubantu:/usr/src/openswan-2.6.51.5#...原创 2020-04-30 10:07:00 · 9392 阅读 · 27 评论