LINUX.ORG.RU
ФорумAdmin

ip-up и ip-down


0

0

У меня на сервере работает vpn (pptpd) с помощю которого одновременно бывает сидит и 300 человек (соответственно, работает 300 ppp интерфейсов). При старте pppd отрабатывается скрипт /etc/ppp/ip-up в котором на конретного пользователя запускаются шейпера (разумеется, через tc), запускается в бэкграунде шеловый скрипт, который аккаунтинг сливает на радиус сервер и тп. При завершении работы пользователя отрабатывает ip-down в котором выключаются просчеты, прибивается шейпера и скрипт. Какая проблема. Если, просходит где-то авария на физике и одновременно отваливается сразц куча эзеров, то, я заметил, что не всегда ip-down полностью отрабатывает указанные в нем команды и получаются висеть пустые правила iptables, иногда шейепра и тд. Если сразу после этого куча народу начинается переконнекчиваться то похожая ситуация происходит и с ip-up. В штатном режиме все работает нормально. Как бы мне побороть ip-up и ip-down? Спасибо.

anonymous

Одновременный вызов iptables из параллельных процессов - не очень хорошая идея. iptables не реентерабелен, возникают коллизии, и часть команд просто не выполняется. Точнее, не реентерабельно ядро при манипуляции правилами пакетного фильтра. Как вариант, возможна следующая схема развития событий:

1. Минимизировать действия, выполняемые в ip-up/ip-down, например свести их к посылке сигнала независимому процессу.
2. Всю работу по манипуляции фаером и приоритетами отдать тому самому независимому процессу.
3. Все равно периодически контролировать, а не отвалился ли какой нибудь ppp-шник без уведомления.

VitalkaDrug ★★
()
Ответ на: комментарий от VitalkaDrug

Я вот как думаю. Может, весь набор правил iptables шейпера и тп, запускать из ip-up в бэкграунде? И при запуске проверять есть ли в память команды (не правила) iptables и tc.
типа так:

process=`ps ax|grep iptables|grep -v grep`
while :
do
if [ -z $process ];then
<каманды добавления правил iptables>
else
sleep 1
fi
done

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.