我正在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伪装。
答案 0 :(得分:3)