《openswan》专栏系列文章主要是记录openswan源码学习过程中的笔记。


  • Author : 叨陪鲤
  • Email : vip_13031075266@163.com
  • Date : 2020.11.22
  • Copyright : 未经同意不得转载!!!
  • Version : openswan-2.6.51.5
  • Reference:https://download.openswan.org/openswan/

目录

1. ipsec策略匹配流程(ipsec_tunnel_start_xmit)

1.1 创建ipsec发送状态:ixs

1.2 ipsec出接口正确性检查

1.3 网络数据包skb正确性检查

1.4 检查报文中是否封装了二层头

1.5 根据报文五元组查询IPSec SA


1. ipsec策略匹配流程(ipsec_tunnel_start_xmit)

注:openswan源码中的ipsec是在内核中实现的,因此代码中很多时大多是内核相关的接口。

1.1 创建ipsec发送状态:ixs

函数名

ipsec_xmit_state_new()

作用

创建ipsec发送状态结构

  • openswan源码中使用了内存池方式来申请内存
  • openswan实现是在内核空间中,可以通过此接口实现流控功能。当ixs申请数量超过阈值时,关闭发送队列:netif_stop_queue(); 等队列中的报文发送后再开启队列上层可以继续往队列中发送数据包。

1.2 ipsec出接口正确性检查

函数名

ipsec_xmit_sanity_check_ipsec_dev()

作用

检查ixs出接口相关参数

        在ipsec_xmit_state_new()成功创建完毕ixs后,会将dev结构存储到ixs。而ipsec_xmit_sanity_check_ipsec_dev()则是检查此出接口dev是否已经确定:如果未确定则返回失败,停止ipsec加密操作;如果出接口已经确定,则将出接口MTU值存储在ixs上。

ixs->physmtu = ixs->physdev->mtu;

ixs->cur_mtu = ixs->physdev->mtu;

1.3 网络数据包skb正确性检查

函数名

ipsec_xmit_sanity_check_skb()

作用

检查skb报文相关参数

  • 检查是否支持IPv6
  • 检查是否支持IP头部选项字段

1.4 检查报文中是否封装了二层头

函数名

ipsec_tunnel_strip_hard_header()

作用

检查报文中是否包含二层头

Sk_buf结构:

|-------------|-------------------------|---------------|

Head       data                            tail             end

如果ixs->iph - ixs->skb->data > 0, 则说明已经封装了二层头。

  • 如果报文中没有包含二层头,则:

ixs->hard_header_stripped = 1;

ixs->hard_header_len = ixs->physdev->hard_header_len;

1.5 根据报文五元组查询IPSec SA

函数名

ipsec_tunnel_SAlookup()

作用

报文五元组查询eroute、IPSEC SA

  • 从报文中提取:源IP、目的IP、Proto、源端口、目的端口、以及协议族构成matcher结构
  • 根据matcher查询eroute路由表
  • 将报文中的端口号存储到ixs结构上
    • ixs->sport
    • ixs->dport
  • 构建ixs->outgoing_said
  • 设置outgoing_said默认值

    • ixs->outgoing_said.proto  = IPPROTO_INT;  /*内部使用的协议类型*/
    • ixs->outgoing_said.spi      = htonl(SPI_DROP);
    • ixs->outgoing_said.dst.u.v4.sin_addr.s_addr = INADDR_ANY;
  • 略过本地外发的IKE协商报文
    • ixs->outgoing_said.spi = htonl(SPI_PASS);
    • bypass = TRUE;
  • 处理未被略过的报文(bypass==FALSE && ixs->eroute)
    • Outgoing_saideroute上的said获取到ipsec sa信息
    • 填充ixs->ips.ips_ident_d
    • 填充ixs->ips.ips_ident_s

至此,ipsec报文匹配ipsec策略流程基本完成,后续便是根据匹配的ipsecsa进行报文封装。后面介绍使用状态机实现的ipsec加密流程。

ipsec 加密流程(一):ipsec策略匹配相关推荐

  1. IPsec ×××路由器配置:ISAKMP策略

    部署一个使用IPsec的IOS路由器要从配置ISAKMP策略和路由器的ISAKMP认证密钥数据开始.如果路由器仅仅与Site-to-Site拓扑中的另外一个路由器相连,那么ISAKMP配置就完成了.然 ...

  2. Cisco ASA IPSec配置流程(9.8.2)

    Cisco ASA IPSec 配置流程(9.8.2) 定义感兴趣流: object-group network remote //创建peer的地址组network-object 192.168.1 ...

  3. ipsec加密技术谁提出的_如何提出技术问题以获得高质量的答案

    ipsec加密技术谁提出的 本月在The Queue上 ,LinuxQuestions.org的hydrurga问: 如何更好地表达我的技术问题,以增加回答问题的机会? 答案 我经常看到的另一个重要问 ...

  4. 华为路由器:IPSec加密GRE通道(GRE over IPsec)

    IPSec加密GRE通道 由于GRE隧道不提供安全性保障,使用ipsec加密gre隧道是现网中比较常用的VPN部署,它的加密方式分为两种: 可以使用IPsec来加密隧道进行传输,叫做IPsec ove ...

  5. MT7621 IPSEC加密转发性能测试报告

    针对MT7621的加密和转发性能,用发包仪器进行大流量测试,不同报文长度的测试结果如下.IPSEC加密采用软件SHA256算法

  6. 第十代酷睿 I7 IPSEC加密转发性能测试报告

    对第十代酷睿I7进行IPSEC加密转发性能测试,下图是组网图.两台I7的设备各自有2个独立的物理网口,其中网口L为LAN,网口W为WAN.发包测试仪采用晨晓科技的千兆发包仪. 针对不同报文长度,在不丢 ...

  7. ipsec与服务器协议失败,IPSEC SA无法协商成功

    1.故障现象 通过IPSEC加密的业务无法正常开通,在IPSEC中心点或客户端路由器上执行show crypto isakmp sa命令发现isakmp sa已经成功建立: Ruijie#show c ...

  8. IPsec ***基础:认识IPsec ***

    1.IPSEC 提供了下列服务: 数据的机密性----------这是通过加密来防止数据遭受窃听***. 数据的完整性和验证--------通过HMAC功能来验证数据包没有被损坏,并通过一个有效地对等 ...

  9. Linux拨IPSec网络不通,ISAKMP/IPSEC SA协商成功但数据不通

    1.故障现象 在路由器上查看isakmp sa和ipsec sa都已经成功建立,但通过ipsec保护的业务无法正常通信 1)查看isakmp sa,成功建立: Ruijie#show crypto i ...

  10. java实现加密电话号码,有具体的加密流程注释

    闲着没事做,正好有一位哥们让帮他看个写个逻辑题,我就顺便写了下! 此题主要是加密一个数字类型的电话号码,具体加密流程如下: * 将一串数字进行加密     * 加密规则:先把这串数字降序,然后将每个数 ...

最新文章

  1. iPhone内运行python,返回Killed: 9 ,iOS内安装python2.7等问题的解决方法
  2. php能调用easyui窗口,关于jQuery EasyUI window窗口使用实例详解
  3. mysql重做日志与binlog日志区别_MySQL日志之binlog、redo log、undo log
  4. ConcurrentHashMap 源码分析
  5. codeforces 702A A. Maximum Increase(水题)
  6. inner join去除重复_SQL多表查询:join表联结
  7. 【转】彻底删除打印机
  8. Sketch一站式设计开发工具 Dapollo插件 for mac v2.0.9破解版
  9. 掌握一门计算机语言需要多长时间,学习一门语言需要多长时间?科学告诉你
  10. 史上最容易听错的歌词
  11. IT行业英语自我介绍必备
  12. Linux:进程(二)
  13. 滑铁卢计算机竞赛福建考点,数学与计算机竞赛界的“四大天王”,你敢来挑战么?...
  14. 如何将视频生成二维码?
  15. 如何在中国高等教育学生信息网上在线查询自己的学历信息
  16. 养成类游戏——动物餐厅开发制作
  17. SQL优化(面试题)
  18. 统计学学习日记:L5-离散趋势分析之异众比率与四分位差
  19. 光遇服务器修复时间,光遇:测试服调整,瞬间Bug被修复?几家欢喜几家愁
  20. 1688商品sku采集抓取实现方法

热门文章

  1. 项目Beta冲刺(2/7)(追光的人)(2019.5.24)
  2. 追光的人对Echo,SkyReach的Beta产品测试报告
  3. AAE结合resnet的生成器搭建(失败)
  4. android p适配三星s86,感受三星S8屏幕震撼 先过APP适配这道坎
  5. Beaglebone Black - 准备
  6. ACOUG年会归来(r11笔记第16天)
  7. 热力图回归Adaptive Wing Loss [ICCV2019] 论文阅读
  8. PPT计算机原理结构初步,测量实践初步(赖丽娟).ppt
  9. iOS 渲染原理解析
  10. Filezilla Xshell SecureFX Win10等无法拖放文件(本地或线上)解决办法