У меня есть сценарий, поддерживающий туннели gre и правила брандмауэра с использованием инструментов «ip» и «iptables». Настройка сотен туннелей и адресов на интерфейс работает нормально. Занимает менее 0,1 секунды на интерфейс, однако, когда я пытаюсь выполнить правила брандмауэра, все замедляет расходы> 0,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
Приветствую любую помощь. Ура!
Номер один: Ваше ядро очень устаревший. И твой тоже iptables
.
Номер два: «Проблема» в том, что для каждый призыв iptables
, что произошло:
iptables
вытягивает всю таблицу из ядра в пространство пользователяiptables
изменяет таблицу в пользовательском пространствеiptables
отодвигает таблицу в пространство ядраСкорее настройте свой iptables
набор правил так, как вы хотите, а затем сохраните его, используя iptables-save > some_file_name
. В все набор правил будет восстановлен одним махом с помощью команды iptables-restore < some_file_name
.
(Конечно, заменить some_file_name
там с именем файла, в котором вы хотите сохранить набор правил.)