当谈到数据包过滤/管理时,我实际上从来不知道内核内部发生了什么。有很多不同的工具可以作用于数据包,无论是从用户空间(修改内核空间子系统)还是直接在内核空间。
是否有任何地方可以记录每个工具与其他工具的交互或它们的作用。我觉得应该在某个地方有一个图表,为那些技术不够强、无法阅读内核代码的人指明正在发生的事情。
这是我的例子:
我的一个网络接口收到一个数据包,并且我有:
- 超细纤维束
- iptables
- IPv4子系统(路由)
- IPV
- 电子BPF
好的,我知道 UFW 是 iptables 的前端,而 iptables 是 Netfiler 的前端。现在我们在内核空间,我们的工具是 Netfiler、IPV、IPv4 和 eBPF。
同样,Netfilter 和 IPv4 子系统之间的交互很容易找到,因为这些都是非常古老(不是很糟糕)的子系统,因此缺少文档会很奇怪。该图是交互的概述:
但 IPV 和 eBPF 又如何呢?当这两个数据包位于内核中时,内核子系统对数据包执行操作的实际顺序是什么?
我总是发现一些很棒的人试图深入内心并帮助别人理解,例如,http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.filter_rules.html
但这不应该以更官方的方式记录吗?我不是在这里寻找有关这些子模块如何交互的解释,我知道我可以通过搜索自己找到它。我的问题更笼统,为什么没有官方文档来真正尝试解释这些内核子系统内部发生的事情。它是否记录在我不知道的地方?有什么理由不尝试解释这些工具呢?
如果我没有任何意义,我深表歉意。我刚刚开始学习这些事情。
答案1
我认识的大多数使用 Linux 网络堆栈的人都使用下图(您可以找到在维基百科上根据 CC BY-SA 3.0 许可证)。
如您所见,除了 netfilter 挂钩之外,它还记录了 XFRM 处理点和一些eBPF 挂钩点。 tc eBPF 程序将作为入口和出口 qdisc 的一部分执行。除 XDP 和 tc 之外的 BPF 网络挂钩点(例如,在套接字级别)此处未记录。
据我所知,IPVS是建立在netfilter之上的,所以它不会直接出现在这里。