Kucher2 122 Опубликовано: 2008-09-30 11:24:46 Share Опубликовано: 2008-09-30 11:24:46 Поясняю ситуацию: 1. У нас вылетел СТГ. Мы его поднимает таким скриптом. Но правила-то могли остаться (конечно маловероятно, если по крону проверка каждые 5-10 мин, но всё-таки), хотя наш юзер уже спать ушёл. 2. Мы установили юзеру переход с помегабайтного тарифа(512К) на безлим (128к) в начале месяца. Если не передёрнуть правила - у него по идее будет считаться трафик как за безлим 128К (т.е. грубо говоря - снимется абонка и всё), а вот скорость останется 512К, пока он не переподсоединится. Может можно как-то заставить авторизатор переконнектиться или проверить у кого сейчас активен авторизатор и сделать OnConnect для каждого активного юзера (у меня в этом скрипте все правила сначала убиваются, а потом снова поднимаются)? Ребут не предлагать. Вечный вопрос: чё делать? Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-10-01 08:09:41 Share Опубліковано: 2008-10-01 08:09:41 Ответ: перед стартом сбрасывать все правила и ставить по новой. Авторизатор потом переконнектится сам и старгейзер добавит нужные правила. Ссылка на сообщение Поделиться на других сайтах
Kucher2 122 Опубліковано: 2008-10-01 08:46:56 Автор Share Опубліковано: 2008-10-01 08:46:56 Это как? Кстати, при каких условиях авторизатор реконнектится? Я убил правила на свою машину - авторизатор зелёным горит и ничего не делает. Зараза. Хотя опция "переподключение" установлена. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-10-01 08:52:09 Share Опубліковано: 2008-10-01 08:52:09 Как? А как ты устанавливаеш правила? Скриптом, видимо... Переподключается по тайм-ауту. Ссылка на сообщение Поделиться на других сайтах
Kucher2 122 Опубліковано: 2008-10-01 09:26:53 Автор Share Опубліковано: 2008-10-01 09:26:53 Не понял. Сбросить правила просто и всё? Но это ничего не даст, если их не восстановить. У юзеров не будет инета. А чтобы восстановить - надо знать кто сейчас подключён. Может готовый метод для этого есть уже? Может UDP закрыть на серв, секунд на 30-60, чтобы вынуждать авторизатор реконнектиться? Но это тогда обрыв связи. Пойдёт, если делать такое в начале месяца. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-10-01 09:32:46 Share Опубліковано: 2008-10-01 09:32:46 Я вобще не пойму в чем проблема. Сбрасываем правила, запускаем stg. Юзеры отпадают по тайм-ауту, после чего переконнекчиваются. Из опыта: когда пропадает инет, онлайновый юзер начинает нервничать и нажимать кнопку "Отключить/Подключить", после чего реконнект происходит сам собой. PS: UDP не может быть открытым или закрытым - это протокол без установки соединения. Ссылка на сообщение Поделиться на других сайтах
Kucher2 122 Опубліковано: 2008-10-01 11:31:30 Автор Share Опубліковано: 2008-10-01 11:31:30 Если сбросить правила и рестартануть СТГ - прервётся соединение. Не есть гуд. Онлайновый юзер не будет ничего клацать, если это ночью происходит и у него просто закачка стоит. В итоге после такого фокуса у него не будет Инета до момента, пока он именно - не начнёт клацать. А если это игрок в ту же линейку - будут эмоции. Есть идея - закрыть на сервере пакеты UDP на минутку. При этом рядовой юзверь ничего не заметит, потому что сам работает по TCP. Т.к. авторизатор работает по UDP, по идее он попытается переконнектиться? Если да, то СТГ при этом перечитает правила? Например при ребуте сервера - так и происходит. А если произойдёт реконнект авторизатора и обновление правил - в этом случае произойдёт это настолько быстро, что возможно юзверь этого и не заметит. Вот к чему я веду. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-10-01 11:37:32 Share Опубліковано: 2008-10-01 11:37:32 Оставлять старые правила при рестарте stg - ненадежно. Невозможно предсказать, в каком состоянии находится файрвол. Рестарт - ситуация аварийная, по этому все правила нужно создавать заново. Игроков в линейку надо гнать в шею - дабы не повышали мировую энтропию По UDP: авторизатор сам переконнектится. Ссылка на сообщение Поделиться на других сайтах
Kucher2 122 Опубліковано: 2008-10-01 11:39:27 Автор Share Опубліковано: 2008-10-01 11:39:27 Ладно, спасибо за мозговую атаку. Проверю - отпишусь. P.S. Проверил. Работает. Значит, что я сделал: 1. Включил ping ya.ru -t - на своей виндовой машине. 2. Изменил правила OnConnect для своей машины на сервере (дописал строку, чтобы явно было видно, если правила обновятся). 3. Закрыл на свою машину UDP-пакеты к серверу и от него. В итоге - примерно через минуту, авторизатор на моей виндовой машине "покраснел" и попытался переконнектиться. Потери связи в этот период, естественно, нет. После открытия доступа по UDP - СТГ перечитал правила из OnConnect и обновил их. При этом было потеряно 3-5 пакетов. По-моему приемлемо. Вывод: работает, можно добавить по Cron - скрипт для обновления правил после возможной смены тарифа (который может повлечь смену правил OnConnect для конкретного случая) юзеров в начале месяца. Пройдёт почти незаметно для пользователей. Так же, сброс правил и закрытие UDP-протокола на пару минут вызовет авторекконект авторизатора на всех активных машинах и восстановление связи с Интернетом для всех активных пользователей. Хотя потеря связи будет немного более продолжительная. При останове и последующем старте СТГ - он всё равно сбрасывает правила для юзеров, затем авторизатор сам коннектится повторно. Но если предварительно заставить авторизаторы у юзеров "искать связи с сервером", то вся процедура проходит существенно быстрее, почти незаметно для пользователей. Скрипт для проверки состояния СТГ и его рестарта: rstg.sh #!/bin/sh#Proverka raboty STG i ego RESTART v sluchae nadobnosti fwcmd="/sbin/ipfw" flag=`grep 'Tariff=' /var/stargazer/users/key/conf | cut -d '=' -f2` sgconf="/var/stargazer/cm/sgconf" #echo "`date +%Y.%m.%d-%H.%M.%S` Scaning STG status" >> /var/log/stargazer.log # Proverka i restart STG v sluchae nerabotosposobnosti ${sgconf} -s <IP-SERVERA> -p <PORT> -a <admin> -w <pass> -u key -t 128 flag=`grep 'Tariff=' /var/stargazer/users/key/conf | cut -d '=' -f2` if [ $flag = 128 ] then ${sgconf} -s <IP-SERVERA> -p <PORT> -a <admin> -w <pass> -u key -t 256 # Esli tarif ne smenilsa - restart # prinuditel'no zastavlyaem avtorizatory userov delat' reconnect (imitiruem potery connecta s serverom) else ${fwcmd} add 3 deny udp from any to any sleep 2 echo "Reinitialization..." echo "60 sec..." sleep 10 echo "50 sec..." sleep 10 echo "40 sec..." sleep 10 echo "30 sec..." sleep 10 echo "20 sec..." sleep 10 echo "10 sec..." sleep 10 #Ostanavlivaem STG echo "Stop Billing Server..." echo "`date +%Y.%m.%d-%H.%M.%S` Stop Billing Server..." >> /var/log/stargazer.log pid=$(ps -ax|grep stargazer|grep -v grep | awk '{print $1}') kill ${pid} > /dev/null 2>&1 #Sbros pravil IPFW sleep 2 /usr/local/etc/rc.d/ipfw.sh #Start STG echo "Starting Billing Server..." echo "`date +%Y.%m.%d-%H.%M.%S` Starting Billing Server..." >> /var/log/stargazer.log /usr/sbin/stargazer sleep 1 #vosstanavlivaem key ${sgconf} -s <IP-SERVERA> -p <PORT> -a <admin> -w <pass> -u key -t 256 fi exit Как видите - скрипт до нельзя примитивен и суть его в том, что он пытается менять тариф ключевого юзера (которого нужно создать перед запуском скрипта), проверяя сменился ли он на самом деле. Если нет - рестарт СТГ. Его существенным недостатком является засорение stargazer.log бесполезными сообщениями о смене тарифа ключевому юзеру. Но такова механика работы sgconf. Следующий скрипт для рестарта СТГ (например - в начале месяца, когда надо "передёрнуть" правила для юзеров в связи с возможной сменой тарифов и скоростей подключения). Так же можно прикрутить процедуру очистки логов и каталогов юзеров от старой инфы, что лучше делать при остановленном СТГ: rstgone.sh #!/bin/sh fwcmd="/sbin/ipfw" # prinuditel'no zastavlyaem avtorizatory userov delat' reconnect (imitiruem potery connecta s serverom) ${fwcmd} add 3 deny udp from any to any sleep 2 echo "Reinitialization..." echo "60 sec..." sleep 10 echo "50 sec..." sleep 10 echo "40 sec..." sleep 10 echo "30 sec..." sleep 10 echo "20 sec..." sleep 10 echo "10 sec..." sleep 10 #Ostanavlivaem STG pid=$(ps -ax|grep stargazer|grep -v grep | awk '{print $1}') kill ${pid} > /dev/null 2>&1 echo "Stop Billing Server..." echo "`date +%Y.%m.%d-%H.%M.%S` Stop Billing Server..." >> /var/log/stargazer.log #Sbros pravil IPFW /usr/local/etc/rc.d/ipfw.sh sleep 2 #Start STG /usr/sbin/stargazer echo "Starting Billing Server..." echo "`date +%Y.%m.%d-%H.%M.%S` Starting Billing Server..." >> /var/log/stargazer.log sleep 1 В /var/cron/tabs добавляем строки: */5 * * * * /var/stg_script/rstg.sh15 0 1 * * /var/stg_script/rstgone.sh Для верности можно так же добавить в cron безусловный перезапуск СТГ, например раз в сутки. Совет: не кладите скрипты в каталог, у которого в названии присутствует слово "stargazer". Спасибо за помощь. Ссылка на сообщение Поделиться на других сайтах
Silitra 0 Опубліковано: 2008-10-20 16:39:31 Share Опубліковано: 2008-10-20 16:39:31 ну вот типа патч возможно решающий проблему удаления/добавления правил при переходе на новый месяц --- user.cpp_ 2008-10-20 22:11:46.000000000 +0600 +++ user.cpp 2008-10-20 22:36:30.000000000 +0600 @@ -1328,6 +1328,11 @@ { property.tariffName.Set(nextTariff, sysAdmin, login, store); tariff = nt; + if (connected) + { + Connect(); + Disconnect(); + } } ResetNextTariff(); } Ссылка на сообщение Поделиться на других сайтах
igal 0 Опубліковано: 2008-11-26 21:37:02 Share Опубліковано: 2008-11-26 21:37:02 ну вот типа патч возможно решающий проблему удаления/добавления правил при переходе на новый месяц --- user.cpp_ 2008-10-20 22:11:46.000000000 +0600 +++ user.cpp 2008-10-20 22:36:30.000000000 +0600 @@ -1328,6 +1328,11 @@ { property.tariffName.Set(nextTariff, sysAdmin, login, store); tariff = nt; + if (connected) + { + Connect(); + Disconnect(); + } } ResetNextTariff(); } куда ставить это правило?? Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас