我刚刚阅读了in these answers关于在linux中开发数据包过滤器的两个选项。
第一种是使用 iptables 和 netfilter ,可能使用NFQUEUE
和libnetfilter_queue库。
第二种方法是使用 BPF (伯克利数据包过滤器),它似乎在快速阅读中具有类似的过滤功能。
那么,哪些替代方案是创建数据包过滤器的更好方法?有什么区别?我的软件将作为网关代理运行,或者“中间人”应该从一台计算机接收数据包(目的地地址到另一台计算机,而不是过滤器的本地地址),并在一些计算机之后发送过滤
非常感谢!
答案 0 :(得分:0)
尽管我的理解仅限于理论上,但我在调试Kubernetes网络实现时已经读了一些书,因此可以一口气回答这个问题。
广泛地,netfilter
和eBPF
(BPF的后继者)都实现了一个虚拟机,该虚拟机在处理数据包时执行一些逻辑。 netfilter
的实现似乎是在争取与iptables
以前的实现兼容,实质上是iptables
的更高性能的继任者。
但是,使用iptables
时仍然存在性能问题-尤其是当存在大量iptables
规则时。 eBPF
的结构方式可以减轻其中一些性能问题;具体来说:
尽管eBPF最初用于网络处理,但也用于内核检测(sysdig,iovisor)。它具有更多的用例集,但是正因如此,它可能会变得难度更大。
因此,总而言之:
相关:
注意: