Перейти до

Рестатрт СТГ, смена тарифа


Рекомендованные сообщения

Поясняю ситуацию:

 

1. У нас вылетел СТГ. Мы его поднимает таким скриптом. Но правила-то могли остаться (конечно маловероятно, если по крону проверка каждые 5-10 мин, но всё-таки), хотя наш юзер уже спать ушёл.

2. Мы установили юзеру переход с помегабайтного тарифа(512К) на безлим (128к) в начале месяца. Если не передёрнуть правила - у него по идее будет считаться трафик как за безлим 128К (т.е. грубо говоря - снимется абонка и всё), а вот скорость останется 512К, пока он не переподсоединится.

 

Может можно как-то заставить авторизатор переконнектиться или проверить у кого сейчас активен авторизатор и сделать OnConnect для каждого активного юзера (у меня в этом скрипте все правила сначала убиваются, а потом снова поднимаются)? Ребут не предлагать. :lol:

 

Вечный вопрос: чё делать? :)

Ссылка на сообщение
Поделиться на других сайтах

Ответ:

перед стартом сбрасывать все правила и ставить по новой. Авторизатор потом переконнектится сам и старгейзер добавит нужные правила.

Ссылка на сообщение
Поделиться на других сайтах

Это как?

Кстати, при каких условиях авторизатор реконнектится?

Я убил правила на свою машину - авторизатор зелёным горит и ничего не делает. Зараза.

Хотя опция "переподключение" установлена.

Ссылка на сообщение
Поделиться на других сайтах

Не понял. Сбросить правила просто и всё? Но это ничего не даст, если их не восстановить. У юзеров не будет инета. А чтобы восстановить - надо знать кто сейчас подключён. Может готовый метод для этого есть уже?

 

Может UDP закрыть на серв, секунд на 30-60, чтобы вынуждать авторизатор реконнектиться? Но это тогда обрыв связи. Пойдёт, если делать такое в начале месяца. :lol:

Ссылка на сообщение
Поделиться на других сайтах

Я вобще не пойму в чем проблема. Сбрасываем правила, запускаем stg.

Юзеры отпадают по тайм-ауту, после чего переконнекчиваются. Из опыта: когда пропадает инет, онлайновый юзер начинает нервничать и нажимать кнопку "Отключить/Подключить", после чего реконнект происходит сам собой.

PS: UDP не может быть открытым или закрытым - это протокол без установки соединения.

Ссылка на сообщение
Поделиться на других сайтах

Если сбросить правила и рестартануть СТГ - прервётся соединение. Не есть гуд.

Онлайновый юзер не будет ничего клацать, если это ночью происходит и у него просто закачка стоит. В итоге после такого фокуса у него не будет Инета до момента, пока он именно - не начнёт клацать.

А если это игрок в ту же линейку - будут эмоции. :lol:

Есть идея - закрыть на сервере пакеты UDP на минутку. При этом рядовой юзверь ничего не заметит, потому что сам работает по TCP.

Т.к. авторизатор работает по UDP, по идее он попытается переконнектиться? Если да, то СТГ при этом перечитает правила? Например при ребуте сервера - так и происходит.

А если произойдёт реконнект авторизатора и обновление правил - в этом случае произойдёт это настолько быстро, что возможно юзверь этого и не заметит. Вот к чему я веду.

Ссылка на сообщение
Поделиться на других сайтах

Оставлять старые правила при рестарте stg - ненадежно. Невозможно предсказать, в каком состоянии находится файрвол. Рестарт - ситуация аварийная, по этому все правила нужно создавать заново.

Игроков в линейку надо гнать в шею - дабы не повышали мировую энтропию :lol:

По UDP: авторизатор сам переконнектится.

Ссылка на сообщение
Поделиться на других сайтах

Ладно, спасибо за мозговую атаку. Проверю - отпишусь. :lol:

 

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.sh

15 0 1 * * /var/stg_script/rstgone.sh

 

Для верности можно так же добавить в cron безусловный перезапуск СТГ, например раз в сутки.

 

Совет: не кладите скрипты в каталог, у которого в названии присутствует слово "stargazer".

 

Спасибо за помощь. :lol:

Ссылка на сообщение
Поделиться на других сайтах
  • 3 weeks later...

ну вот типа патч возможно решающий проблему удаления/добавления правил при переходе на новый месяц

--- 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();
 }

Ссылка на сообщение
Поделиться на других сайтах
  • 1 month later...
ну вот типа патч возможно решающий проблему удаления/добавления правил при переходе на новый месяц

--- 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();
 }

 

куда ставить это правило??

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...