我有一个使用“ip”和“iptables”工具维护gre隧道和防火墙规则的脚本。 设置数以百计的隧道,每个接口的地址运行得很好。 每个界面的时间less于0.1秒,但是当我开始执行防火墙规则时,每个插入的开销都会减less0.5以上。
为什么它跑得这么慢? 我能做些什么来提高速度?
看来我可以尝试ipset,但我真的觉得有什么问题的内核或东西。 有趣的是,前10条规则运行得很快,然后慢下来。
mybox(root) foo# iptables -V iptables v1.3.5 mybox(root) foo# uname -a Linux foo 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux mybox(root) foo# cat test.sh #!/bin/sh for n in {1..100} do /sbin/iptables -A OUTPUT -s ${n} -j ACCEPT /sbin/iptables -D OUTPUT -s ${n} -j ACCEPT done mybox(root) foo# time ./test.sh real 1m38.839s user 0m0.100s sys 1m38.724s
Appriciate任何帮助。 干杯!
第一:你的内核是非常过时的。 你的iptables也是如此。
第二:问题是每次调用iptables时发生的是:
iptables将整个表从内核拉到用户空间 iptables修改用户空间中的表 iptables将表格推回内核空间 而是按照你想要的方式configuration你的iptables规则集,然后使用iptables-save > some_file_name保存它。 整个规则集将使用iptables-restore < some_file_name命令iptables-restore < some_file_name 。
(当然,将some_file_namereplace为要保存规则集的文件的名称。)