【问题标题】:write and read netfilter connectrack using eBPF/XDP使用 eBPF/XDP 读写 netfilter 连接器
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 能否在实现TC分类器(BPF_PROG_TYPE_SCHED_CLS)的eBPF代码中访问netfilter中的connectrack表?谢谢:-)
    • 不,没有帮手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2023-01-08
    • 1970-01-01
    • 2021-05-19
    • 2022-08-11
    • 2018-03-12
    相关资源
    最近更新 更多