我刚刚读了in these answers关于在linux中开发数据包过滤器的两个选项。
第一个是使用iptables和netfilter,可能使用NFQUEUE
和libnetfilter_queue库。
第二种是使用BPF(Berkeley Packet Filter),它似乎在快速阅读中具有类似的过滤功能。
那么,哪些替代方案是创建数据包过滤器的更好方法?有什么区别?我的软件将作为网关代理运行,或者“中间人”应该从一台计算机接收数据包(目的地地址到另一台计算机,而不是过滤器的本地地址),并在一些计算机之后发送过滤。
非常感谢!
虽然我的理解仅限于理论,但我在调试Kubernetes网络实现时做了一些阅读,因此可以尝试回答这个问题。
从广义上讲,netfilter
和eBPF
(BPF的后继者)都实现了一个在处理数据包时执行某些逻辑的虚拟机。 netfilter
的实施似乎力求与iptables
之前的实施兼容,基本上是iptables
的更高效的继承者。
但是,使用iptables
时仍然存在性能问题 - 特别是当有大量的iptables
规则时。 eBPF
的结构方式可以缓解一些性能问题;特别:
虽然它最初用于网络处理,但eBPF也用于内核检测(sysdig,iovisor)。它有一个更大的用例集,但正因为如此,可能是一个更加艰难的学习曲线。
所以,总结一下:
相关:
笔记: