Перейти до

Смена названия тарифа в СТГ


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

Перелопатил поиск. Либо руки не оттуда растут либо не увидел данной функции.

Подскажите как правильней сделать :

есть 3 тарифа (пример)

u_1024

u_2048

u_3096

 

Хочу всем удвоить скорость. Возникла мысль просто изменить название тарифов на :

u_2048

u_4096

u_6144

(скорость берется из названия).

 

Как правильно реализовать ?

 

Пока вижу только 1 вариант - скриптом :

ввести новые тарифы и скриптом (кстати СТГ научился работать с КК без слипов, а то стремна ?) вычислять скорость каждого и через КК менять на нужную.

или теоретически :

Есть файлы тарифов:

u_1024.tf - просто сменить им имя и рестартить СТГ.

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

Я завожу новые тарифы и меняю скриптом.

Если просто переименовать тарифы то стг не стартанет.

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

Я завожу новые тарифы и меняю скриптом.

Если просто переименовать тарифы то стг не стартанет.

Так и думал. но надеялся есть способ проще. В целом проблемы то и нет, но если есть варианты интереснее - готов выслушать.

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

Не совсем понял - поменять вовсе скорость всем или менять только в определенное время?

Если поменять вовсе всем.

Остановить стж пробежаться скриптом по юзерам, толи это в файлах, толи это в СУБД и изменить название тарифа, предварительно создав новые тарифы.

 

 

 

Если у вас линукс и это нужно менять на ночь, тогда эти скрипты вам в помощь.

Короче где-то так, может где-то есть опечатка - сори, на быструю руку упростил от своих скриптов.

 

Этот скрипт запускаем по крону где-то в 00:01 и в 10:01

10:01 можно менять - думаю разберетесь где.

#!/bin/bash

# переменные
####################################
int_iface_up=eth0
int_iface_down=eth1
default_speed=64kbit
####################################

function fspeedkb()
{
       ftariff=$1

       speed=$(echo "$ftariff" | sed "s/[^0-9]//g")

       if [ "$speed" != "" ]
       then
           if [ `date +"%H:%M"` \< "10:00" ]
           then
               fspeedkb=$(($speed * 2048 )) # Ночная скорость
           else
               fspeedkb=$(($speed * 1024 )) # Дневная скорость
           fi
       else
           fspeedkb=65536
       fi

       echo $fspeedkb"bit"
}


# online_users - это папке где я храню файлы, которые именуются юзером
# В OnConnect создаю файл с именем юзера, в OnDisconnect удаляю файл
for user in `ls /var/stargazer/online_users`
do
   # читаю тариф из юзерского конфига - через функцию fspeedkb() узнаю скорость
   tariff=$(grep -i "^tariff=" /var/stargazer/users/$user/conf | cut -f 2 -d"=")	
   speedkb=`fspeedkb $tariff`

   #ЧИтаю метки в iptables установленные в OnConnect
   mark=$(cat /var/stargazer/users/$user/shaper_mark)
   mark1=$(cat /var/stargazer/users/$user/shaper_mark1)
   # Пишу какая скорость устанавливается
   echo "$speedkb" > /var/stargazer/users/$user/shaper_rate

   # Shaper
   ######################################################################################
   #INET-Download
   /sbin/tc class change dev $int_iface_down parent 1:1 classid 1:$mark htb rate $speedkb


   #INET-Upload
   /sbin/tc class change dev $int_iface_up parent 1:1 classid 1:$mark1 htb rate $speedkb
   ######################################################################################

done

 

OnConnect

#!/bin/bash
# Login
LOGIN=$1

#user IP
IP=$2

#cash
CASH=$3

#user ID
ID=$4

#Selected dirs to connect
DIRS=$5

default_speed=64kbit
int_iface_up=eth0
int_iface_down=eth1
ipaddrnet = внешний адресс

# Удаляем Фильтра
######################################################################
iptables -t filter -D INPUT -s $IP -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D INPUT -s $IP -j ACCEPT
done

iptables -t filter -D FORWARD -s $IP -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D FORWARD -s $IP -j ACCEPT
done

iptables -t filter -D FORWARD -d $IP -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D FORWARD -d $IP -j ACCEPT
done

iptables -t filter -D OUTPUT -d $IP -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D OUTPUT -d $IP -j ACCEPT
done
#######################################################################

# Добавляем фильтр
#######################################################################
iptables -t filter -A INPUT -s $IP -j ACCEPT
iptables -t filter -A FORWARD -s $IP -j ACCEPT
iptables -t filter -A FORWARD -d $IP -j ACCEPT
iptables -t filter -A OUTPUT -d $IP -j ACCEPT
#######################################################################

# NAT
#######################################################################
# Удаляем НАТ
iptables -t nat -D POSTROUTING -s $IP -o $int_iface_up  -j SNAT --to $ipaddrnet
while [ $? -eq 0 ]
do
iptables -t nat -D POSTROUTING -s $IP -o $int_iface_up -j SNAT --to $ipaddrnet
done
# Добавляем НАТ
iptables -t nat -A POSTROUTING -s $IP -o $int_iface_up -j SNAT --to $ipaddrnet
#######################################################################

# Добавляем метку, что юзер онлайн
echo "$ip" > /var/stargazer/online_users/$LOGIN


tariff=$(grep -i "^tariff=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=")

function fspeedkb()
{
       ftariff=$1

       speed=$(echo "$ftariff" | sed "s/[^0-9]//g")

       if [ "$speed" != "" ]
       then
           if [ `date +"%H:%M"` \< "10:00" ]
           then
               fspeedkb=$(($speed * 2048 )) # Ночная скорость
           else
               fspeedkb=$(($speed * 1024 )) # Дневная скорость
           fi
       else
           fspeedkb=65536
       fi

       echo $fspeedkb"bit"
}


# Через функцию fspeedkb() из тарифного плана  узнаем скорость для шейпера 
# функция работает: извлекает числовое значение из тарифного плана, 
# это число идет килобитах, чтобы получить в битах - умножаем на 1024
speedkb=`fspeedkb $tariff`


declare -i mark=$ID+10
declare -i mark1=$ID+2000

echo "$mark" > /var/stargazer/users/$LOGIN/shaper_mark
echo "$mark1" > /var/stargazer/users/$LOGIN/shaper_mark1
echo "$speedkb" > /var/stargazer/users/$LOGIN/shaper_rate


iptables -t mangle -A FORWARD -d $IP -j MARK --set-mark $mark
iptables -t mangle -A FORWARD -s $IP -j MARK --set-mark $mark1




##########################################################################################
#Download
/sbin/tc class add dev $int_iface_down parent 1:1 classid 1:$mark htb rate $speedkb
/sbin/tc filter add dev $int_iface_down parent 1: protocol ip prio 3 handle $mark fw classid 1:$mark
##################################


#Upload
##################################
/sbin/tc class add dev $int_iface_up parent 1:1 classid 1:$mark1 htb rate $speedkb
/sbin/tc filter add dev $int_iface_up parent 1: protocol ip prio 3 handle $mark1 fw classid 1:$mark1
###########################################################################################

 

OnDisconnect


#!/bin/bash

int_iface_up=eth0
int_iface_down=eth1
ipaddrnet = внешний адресс

# Login
LOGIN=$1

#user IP
IP=$2

#cash
CASH=$3

#user ID
ID=$4

#Selected dirs to disconnect
DIRS=$4

############################################################################
iptables -t filter -D INPUT -s $IP -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D INPUT -s $IP -j ACCEPT
done

##################################

iptables -t filter -D FORWARD -s $IP -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D FORWARD -s $IP -j ACCEPT
done

##################################

iptables -t filter -D FORWARD -d $IP -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D FORWARD -d $IP -j ACCEPT
done

##################################

iptables -t filter -D OUTPUT -d $IP -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D OUTPUT -d $IP -j ACCEPT
done

##################################

iptables -t nat -D POSTROUTING -s $IP -o $int_iface_up -j SNAT --to $ipaddrnet
while [ $? -eq 0 ]
do
iptables -t nat -D POSTROUTING -s $IP -o $int_iface_up -j SNAT --to $ipaddrnet
done 
############################################################################

tariff=$(grep -i "^tariff=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=")

# Удаляем файл о том, что юзер онлайн
rm /var/stargazer/online_users/$LOGIN



function fspeedkb()
{
       ftariff=$1

       speed=$(echo "$ftariff" | sed "s/[^0-9]//g")

       if [ "$speed" != "" ]
       then
           if [ `date +"%H:%M"` \< "10:00" ]
           then
               fspeedkb=$(($speed * 2048 )) # Ночная скорость
           else
               fspeedkb=$(($speed * 1024 )) # Дневная скорость
           fi
       else
           fspeedkb=65536
       fi

       echo $fspeedkb"bit"
}

# Через функцию fspeedkb() из тарифного плана  узнаем скорость для шейпера
# функция работает: извлекает числовое значение из тарифного плана,
# это число идет килобитах, чтобы получить в битах - умножаем на 1024
speedkb=`fspeedkb $tariff`

declare -i mark=$ID+10
declare -i mark1=$ID+2000


# INET
############################################################################

if [ -n "$mark" ]
then
   iptables -t mangle -D FORWARD -d $IP -j MARK --set-mark $mark
   while [ $? = 0 ]
   do
    iptables -t mangle -D FORWARD -d $IP -j MARK --set-mark $mark
   done
fi

if [ -n "$mark1" ]
then
   iptables -t mangle -D FORWARD -s $IP -j MARK --set-mark $mark1
   while [ $? = 0 ]
   do
           iptables -t mangle -D FORWARD -s $IP -j MARK --set-mark $mark1
   done
fi

############################################################################


#Download
##########################################################################################
# INET
/sbin/tc filter del dev $int_iface_down parent 1: protocol ip prio 3 handle $mark fw classid 1:$mark
/sbin/tc class del dev $int_iface_down parent 1:1 classid 1:$mark htb rate $speedkb


#Upload
##################################
# INET
/sbin/tc filter del dev $int_iface_up parent 1: protocol ip prio 3 handle $mark1 fw classid 1:$mark1
/sbin/tc class del dev $int_iface_up parent 1:1 classid 1:$mark1 htb rate $speedkb
###########################################################################################

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

у меня реализовано так:

имя тарифа так сказать служебный параметр о котором юзер не знает, например анлимы это u1, u2, u3 ,u4 итд

в таблице tariffs в конце добавлены поля Speed - это скорость на тарифе, RUname - это название тарифа в кирилице о котором юзер знает и это имя присутствует в прейскуранте

теперь чтобы поменять скорость на тарифе просто меняем значение ячейки

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

Сейчас в скриптах - ну примерно так же, как показано выше - просто изменена скорость на нужную.

А стоит задача перевести ВСЕХ пользователей на более высокие тарифы.

Менять думаю утром. Скриптом. Т.е. создать нужные тарифы и скриптом поменять тарифы.

Прочто думал есть возможность поменять названия тарифов - было бы проще.

Ну на нет - и суда нет.

Собственно вот сам скрипт :

#!/bin/bash
folder=/var/stargazer/users
messenger="/usr/sbin/sgconf set -s 192.168.x.x -p 9999 -a admin -w password"
echo "#!/bin/bash" > ./cmd.log
echo " " >> ./cmd.log
LIST=`find $folder -type d 2>/dev/null| awk '{FS="/"} {print $5}'| sort|uniq | tr '\n' ' '`
for ONE_OF_LIST in $LIST
do
if [ -e $folder/"$ONE_OF_LIST"/conf ]  ; then {
login=$ONE_OF_LIST
iSPEED=`cat /var/stargazer/users/$login/conf | grep "Tariff=anlim" | cut -d "_" -f2`
if [ "$iSPEED" != "" ] ; then
case "$iSPEED" in
256) iSPEED2="anlim_256"
;;
512) iSPEED2="anlim_512"
;;
1024) iSPEED2="anlim_2048"
;;
2048) iSPEED2="anlim_6144"
;;
3072) iSPEED2="anlim_8192"
;;
4096) iSPEED2="anlim_10240"
;;
5120) iSPEED2="anlim_15360"
;;
10240) iSPEED2="anlim_20480"
;;
*) echo "Ошибка получения скорости для логина $login" > ./error.log
iSPEED2=$iSPEED
;;
esac
echo "$messenger"," -u $login -t $iSPEED2:now" >> ./cmd.log
echo "sleep 3" >> ./cmd.log
fi
}
fi
done

Потом просто cmd.log исполнить. Вот только думаю еще со слипами что делать. Оставить или попробовать без них.

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

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

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

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

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

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

Вхід

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

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

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

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