我正在制作一个在 Ubuntu 12.04 上运行的数据包过滤程序,它使用 libipq 作为将数据包复制到用户空间的库。 libipq 的逻辑对我来说很好用,我的问题是我注意到从使用 libipq 到不使用 libipq 对性能的影响很大。如果我删除为程序添加的 iptable 规则并让内核处理数据包,则速度为 50 MB/s。但是,当使用 libipq 并恢复我的 iptables 规则时,速度会下降到 1 MB/s(如果我幸运的话),通常是它的一半。

我想知道,我的 iptable 规则可能有问题吗?是否可以更有效地使用规则,或者 libipq 只是效率低下(或者我的代码,即使我没有做那么多)?这是我用来设置 iptable 规则的脚本:

#!/bin/sh
modprobe iptable_filter
modprobe ip_queue
iptables -A FORWARD -p icmp -j QUEUE
iptables -A FORWARD -p tcp -j QUEUE
iptables -A FORWARD -p udp-j QUEUE
iptables -A INPUT -p icmp -j QUEUE
iptables -A INPUT -p tcp -j QUEUE
iptables -A INPUT -p udp -j QUEUE

除此之外,我的 iptable 规则是 Ubuntu 附带的默认设置。

注意:我的设置适用于两个不同子网上的客户端和服务器 VM,并使用我的 Ubuntu VM 使用 NAT 和 ip 伪装进行桥接。

最佳答案

Libipq 已被弃用,取而代之的是更新的 libnetfilter_queue

关于linux - libipq 性能问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14716353/

10-12 00:43