我正在纯XDP的NAT服务器上工作。但是为了有一个强大的nat功能,我想跟踪连接(存储和获取跟踪数据),我正在考虑使用已经存在的netfilter conntrack数据结构和功能来帮助XDP中的数据包处理,我对nf_conntrack有一些了解,但我觉得我错过了一些东西,我不确定我是否可以接收数据包并检查netfilter conntrack是否是一个新的连接。
例如,如果它是一个新连接:
-
我可以调用netfiler连接函数,它可以决定我可以将哪个端口分配为公共源端口和其他信息到元组。
-
,当回复回来时,我可以在nf conntrack中检查这是一个回复,只是更新数据包信息并传递到内部网络。
我从这个repo中得到了一些灵感:https://github.com/ti-mo/conntracct。但是我看到它们只做统计,所以这里的数据包通过正常的内核堆栈。
我觉得有点困惑,但如果我能解释我在想什么,你有一个提示或提示来指导我,我将不胜感激。
谢谢。
XDP程序的执行是接收到的数据包首先要做的事情之一,因此此时还没有发生连接。也没有现成的BPF帮助器来实现连接行为。
如果你想在XDP钩子上跟踪连接,你必须在BPF中实现自己的连接逻辑。这就是纤毛的作用