使用 XDP 捕获数据包并在用户空间处理后,是否可以 re-transmit 数据包?

Is it possible to re-transmit a packet after capturing it using XDP and processing it in userspace?

我需要编写一个位于两台服务器之间的应用程序,并通过向每个数据包添加特定的 HTTP header 来修改从一台服务器发送到另一台服务器的 HTTP 数据包。
显然它必须尽可能快地完成,我发现通过使用 eBFP 和 XDP,我可以捕获高性能的数据包,但据我所知,XDP 的判决是 abort、drop、pass , 和 tx.
使用 tx 判断我可以将捕获的数据包发送给用户 space 程序来修改它,但我不知道如何在 header 之后发送数据包修改?该视频 here 解释了使用 eBPF 和 XDP 可以做什么,它说可以做到,但我找不到具体方法。
任何帮助将不胜感激。

据我所知,XDP_TX 不会 让数据包通过 user-space。它会 return 数据包在它来自的同一个 NIC 上。此外,您可以修改数据包,但我看不到扩展数据包的简单方法。因此,要写入额外的 header,您必须覆盖一些数据。

看起来你有两个选择:

  • 依赖L7 HTTP反向代理(添加header)
  • 如果您想阻止数据包到达您的主机并将它们发回,请使用 nfqueue。

如果您仍然对这个话题感兴趣,答案是否定的。但是,XDP 套接字可用于 forward/send 来自内核 space 或用户 space 的新数据包。查看 github 上的 XDP 教程,或查看 Linux 内核中的代码 samples/bpf