2

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

  • 我可以调用一个 netfiler conntrack 函数,它可以决定我可以将哪个端口分配为公共源端口以及将另一个信息分配给一个元组。

  • 当回复回来时,我可以在 nf conntrack 中检查这是一个回复,然后更新数据包信息并传递给内部网络。

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

我感到有点困惑,但如果我设法解释了我在想什么,并且您有提示或提示可以指导我,我将不胜感激。

谢谢。

4

1 回答 1

3

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

如果你想在 XDP 钩子上跟踪连接,你必须在 BPF 中实现你自己的 conntrack 逻辑。例如,Cilium 就是这样做的。

于 2021-08-09T12:26:17.503 回答