问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Linux网络协议栈7--ipsec收发包流程

发布网友 发布时间:2022-09-17 21:35

我来回答

1个回答

热心网友 时间:2023-01-22 03:19

流程路径:ip_rcv() --> ip_rcv_finish() --> ip_local_deliver() --> ip_local_deliver_finish()
解封侧一定是ip报文的目的端,ip_rcv_finish中查到的路由肯定是本机路由(RTCF_LOCAL),调用 ip_local_deliver 处理。
下面是贴的网上的一张图片。

ip_local_deliver_finish中 根据上次协议类型,调用对应的处理函数。inet_protos 中挂载了各类协议的操作集,对于AH或者ESP来说,是xfrm4_rcv,对于ipsec nat-t情况下,是udp协议的处理函数udp_rcv,内部才是封装的ipsec报文(AH或者ESP)。

xfrm4_rcv --> xfrm4_rcv_spi --> xfrm4_rcv_encap --> xfrm_input
最终调用 xfrm_input 做收包解封装流程。
1、创建SKB的安全路径;
2、解析报文,获取daddr、spi,加上协议类型(esp、ah等),就可以查询到SA了,这些是SA的key,下面列出了一组linux ipsec的state(sa)和policy,方便一眼就能看到关键信息;
3、调用SA对应协议类型的input函数,解包,并返回更上层的协议类型,type可为esp,ah,ipcomp等。对应的处理函数esp_input、ah_input等;
4、解码完成后,再根据ipsec的模式做解封处理,常用的有隧道模式和传输模式。对应xfrm4_mode_tunnel_input 和 xfrm4_transport_inout,处理都比较简单,隧道模式去掉外层头,传输模式只是设置一些skb的数据。
5、协议类型可以多层封装,如ESP+AH,所以需要再次解析内存协议,如果还是AH、ESP、COMP,则解析新的spi,返回2,查询新的SA处理报文。
6、经过上面流程处理,漏出了用户数据报文(IP报文),根据ipsec模式:

流程路径如下图,这里以转发流程为例,本机发送的包主要流程类似。
转发流程:

ip_forward 函数中调用xfrm4_route_forward,这个函数:
1、解析用户报文,查找对应的Ipsec policy(__xfrm_policy_lookup);
2、再根据policy的模版tmpl查找对应最优的SA(xfrm_tmpl_resolve),模版的内容以及和SA的对应关系见上面贴出的ip xfrm命令显示;
3、最后根据SA生成安全路由,挂载再skb的dst上; 一条用户流可以声明多个安全策略(policy),所以会对应多个SA,每个SA处理会生成一个安全路由项struct dst_entry结构(xfrm_resolve_and_create_bundle),这些安全路由项通过 child 指针链接为一个链表,其成员 output挂载了不同安全协议的处理函数,这样就可以对数据包进行连续的处理,比如先压缩,再ESP封装,再AH封装。
安全路由链的最后一个路由项一定是普通IP路由项,因为最终报文都得走普通路由转发出去,如果是隧道模式,在tunnel output封装完完成ip头后还会再查一次路由挂载到安全路由链的最后一个。
注: SA安全联盟是IPsec的基础,也是IPsec的本质。 SA是通信对等体间对某些要素的约定,例如使用哪种协议、协议的操作模式、加密算法、特定流中保护数据的共享密钥以及SA的生存周期等。

然后,经过FORWARD点后,调用ip_forward_finish()-->dst_output,最终调用skb_dst(skb)->output(skb),此时挂载的xfrm4_output

本机发送流程简单记录一下,和转发流程殊途同归:
查询安全路由: ip_queue_xmit --> ip_route_output_flow --> __xfrm_lookup
封装发送: ip_queue_xmit --> ip_local_out --> dst_output --> xfrm4_output

注:
1). 无论转发还是本地发送,在查询安全路由之前都会查一次普通路由,如果查不到,报文丢弃,但这条路由不一定需要指向真实的下一跳的出接口,只要能匹配到报文DIP即可,如配置一跳其它接口的defualt。
2). strongswan是一款用的比较多的ipsec开源软件,协商完成后可以看到其创建了220 table,经常有人问里面的路由有啥用、为什么有时有有时无。这里做个测试记录: 1、220中貌似只有在tunnel模式且感兴趣流是本机发起(本机配置感兴趣流IP地址)的时候才会配置感兴趣流相关的路由,路由指定了source;2、不配置也没有关系,如1)中所说,只要存在感兴趣流的路由即可,只不过ping的时候需要指定source,否者可能匹配不到感兴趣流。所以感觉220这个表一是为了保证

ipsec封装发送流程:
xfrm4_output-->xfrm4_output_finish-->xfrm_output-->xfrm_output2-->xfrm_output_resume-->xfrm_output_one
xfrm4_output 函数先过POSTROUTING点,在封装之前可以先做SNAT。后面则调用xfrm_output_resume-->xfrm_output_one 做IPSEC封装最终走普通路由走IP发送。

贴一些网上的几张数据结构图
1、安全路由

2、策略相关协议处理结构

3、状态相关协议处理结构
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么我的电脑没有E/H/G,盘? 刚买的电脑无法创建d盘,不能指派驱动器号d:。只能指派abcefgh盘。创... ...了D盘的文件 卸载虚拟光驱后 计算机就成了CEFG盘 大 陈旧伤疤该用什么方法清除? 几年前被指甲弄到的疤痕,怎么让疤痕好了 opporeno5耳机模式怎么调试 最近想入手一块GTX770显卡 想入手一块GTX770的显卡 求各位大神推荐一下哪个性价比高 前提是要NV... 400×5的积末尾有两个零.___.(判断对错 如果积的末尾有一个0,则两个因数的末尾至少有一个0.___(判断对错) 双网卡设置软件,开头的字母是sy~~ 用亢奋, 大彻大悟 ,大起大落, 惊心动魄 ,叹为观止,戛然而止造句 60字左右 燕窝炖煮教程:从泡发到炖煮,手把手教你炖燕窝 被盗了,可以找回来嘛 被盗了怎么找回? 被盗怎么找回? 被盗,如何找回? 被盗了怎么办怎么找回来? 被盗怎么找回来 被盗了怎么办?怎么找回来? 卡芬妮J6001星空防水男士机械手表多少钱 国产机械表防水性能好的有哪些 上海市民政第二精神卫生中心怎么样? 浦东新区精神卫生中心是什么专科 有俩个玩王者荣耀怎么切换? 王者荣耀怎么切换两个 汉兰达正时皮带还是正时链条 汉兰达正时皮带多久换一次? 2010款汉兰达2.7发动机是正时链条吗 汉兰达2.0T的发动机耐用吗?你觉得10年内能不能开20万公里? SY这是什么意思呀还有这个YY是什么意思呀!谁能告诉我 抖音里面的浏览量怎样才能高 sylaunch是什么应用 EASYRECORDSY是什么软件? 鸡叫声音作业能听多少公里 安全技术交底里有个"不得声音作业"是什么意思? 日本的雪肌精,澳尔滨,黛珂哪个最好用 免征增值税的进项税额还让抵扣吗 不征收增值税项目的进项税额可以从销项税额中抵扣吗 用于生产免税产品的原材料进项税额可以从销项税中抵扣吗?购进的办公用品,*专票能购抵扣吗? 凯迪拉克ats的机油压力传感器在哪里- 问一问 14年凯迪拉克ats的发动机冷却液etc传感器温度过高是什么问题 湖南师范大学医学院2022年录取分数线 著名品牌法恩莎卫浴的由来谁知道啊? 法恩莎的冲水方式是什么样子,优点在哪里? 江苏华灿电讯集团股份有限公司电话是多少? 汉王小龙女手写板哪个厂家生产的质量好 win10没注册,过了试用期,还能用么? 苹果手机如何删除通讯录 QQ飞车如何成为超级回归用户?