【发布时间】:2021-10-11 06:52:42
【问题描述】:
我正在使用纯 XDP 开发 NAT 服务器。但是为了拥有强大的 nat 功能,我想跟踪连接(存储和获取跟踪数据)并且我正在考虑使用已经存在的 netfilter conntrack 数据结构和函数来帮助 XDP 中的数据包处理,我对 nf_conntrack 有一些了解,但是我觉得我错过了一些东西,我不确定我是否可以接收数据包并使用 netfilter conntrack 检查它是否是新连接。
例如,如果它是一个新连接:
-
我可以只调用一个 netfiler conntrack 函数,它可以决定我可以分配哪个端口作为公共源端口以及另一个信息给一个元组。
-
当回复回来时,我可以在 nf conntrack 中检查这是一个回复,然后更新数据包信息并传递到内部网络。
我从这个 repo 中得到了一些灵感:https://github.com/ti-mo/conntracct。但我看到他们只做统计,所以这里的数据包通过正常的内核堆栈。
我有点困惑,但如果我设法解释了我的想法,并且您有提示或提示可以指导我,我将不胜感激。
谢谢。
【问题讨论】:
标签: netfilter bpf ebpf xdp-bpf