使用 eBPF/XDP 写入和读取 netfilter connectrack

write and read netfilter connectrack using eBPF/XDP

我正在使用纯 XDP 开发 NAT 服务器。但是为了拥有强大的 nat 功能,我想跟踪连接(存储和获取跟踪数据)并且我正在考虑使用已经存在的 netfilter conntrack 数据结构和函数来帮助 XDP 中的数据包处理,我对 nf_conntrack 但我觉得我错过了什么,我不确定我是否可以接收数据包并使用 netfilter conntrack 检查它是否是一个新连接。
例如,如果它是一个新连接:

我从这个 repo 中得到了一些灵​​感:https://github.com/ti-mo/conntracct。但我看到他们只做统计,所以这里的数据包通过正常的内核堆栈。

我有点困惑,但如果我设法解释了我的想法,并且你有提示或提示来指导我,我将不胜感激。

谢谢。

XDP 程序执行是接收数据包最先发生的事情之一,因此此时还没有发生 conntrack。也没有 BPF 助手可以开箱即用地实现 conntrack 行为。

如果您想在 XDP 挂钩处跟踪连接,则必须在 BPF 中实现您自己的连接跟踪逻辑。例如what Cilium does