Jump to content

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


Recommended Posts

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

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

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

u_1024

u_2048

u_3096

 

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

u_2048

u_4096

u_6144

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

 

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

 

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

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

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

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

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

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

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

 

 

 

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

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

 

Этот скрипт запускаем по крону где-то в 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
###########################################################################################

Link to post
Share on other sites

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

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

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

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

Link to post
Share on other sites

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

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

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

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

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

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

#!/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 исполнить. Вот только думаю еще со слипами что делать. Оставить или попробовать без них.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...