gpt4 book ai didi

linux - 使用 Netfilter 的 NFQUEUE 进行数据包过滤与 Berkeley 数据包过滤器 (BPF)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:41 25 4
gpt4 key购买 nike

我刚读过 in these answers关于在 Linux 中开发数据包过滤器的两种选择。

第一个是使用 iptablesnetfilter,可能还有 NFQUEUElibnetfilter_queue图书馆。

第二种是使用 BPF (Berkeley 数据包过滤器),快速阅读似乎具有类似的过滤功能。

那么,这些备选方案中的哪一个是创建数据包过滤器的更好方法?有什么区别?我的软件将作为网关代理或“中间人”运行,它应该从一台计算机接收数据包(目标地址到另一台计算机,而不是过滤器的本地地址),并在一段时间后发送出去过滤。

非常感谢!

最佳答案

虽然我的理解仅限于理论,但我在调试 Kubernetes 网络实现时阅读了一些资料,因此可以尝试回答这个问题。

从广义上讲,netfiltereBPF(BPF 的后继者)都实现了一个在处理数据包时执行某些逻辑的虚拟机。 netfilter 的实现似乎力求与 iptables 之前的实现兼容,本质上是 iptables 的更高效的继承者。

但是,在使用 iptables 时仍然存在性能问题——尤其是当存在大量 iptables 规则时。 eBPF 的结构化方式可以缓解其中的一些性能问题;具体来说:

  • eBPF 可以卸载到“智能网卡”
  • eBPF 可以构造成更有效地查找规则

虽然它最初用于网络处理,但 eBPF 也被用于内核检测(sysdig、iovisor)。它有更多的用例,但正因为如此,学习曲线可能要艰难得多。

所以,总结一下:

  • 使用你熟悉的东西,除非你遇到了性能问题
  • 查看 eBPF

相关:

注意事项:

  • eBPF 是 cBPF 的继承者,并在内核中取代了它
  • 出于习惯,我在这里明确提到了 eBPF

关于linux - 使用 Netfilter 的 NFQUEUE 进行数据包过滤与 Berkeley 数据包过滤器 (BPF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26875511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com