Ограничение скорости

Технические вопросы по UTM 5.0
SOLDIER
Сообщения: 649
Зарегистрирован: Чт мар 16, 2006 18:07

Сообщение SOLDIER »

Kayfolom писал(а): Выключение: /netup/utm5/bin/traffic.sh start UIP RULE_ID
Наверное, всё-таки Выключение: /netup/utm5/bin/traffic.sh stop UIP RULE_ID :wink:

set
Сообщения: 56
Зарегистрирован: Вт июл 31, 2007 13:54

Сообщение set »

Kayfolom, спасибо за скрипт!
Но все таки хотелось бы знать почему не передаются нужные радиус-параметры.

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

SOLDIER писал(а):
Kayfolom писал(а): Выключение: /netup/utm5/bin/traffic.sh start UIP RULE_ID
Наверное, всё-таки Выключение: /netup/utm5/bin/traffic.sh stop UIP RULE_ID :wink:
Ага, спасибо за поправку, опечатался. Забыл упомянуть что при загрузке линукса надо запустить /netup/utm5/bin/traffic.sh init

Mental Noize
Сообщения: 116
Зарегистрирован: Вт май 15, 2007 12:50

Сообщение Mental Noize »

RusBiT писал(а): Сейчас использую poptop/ freebsd , планирую переходить на mpd.
Могли по подробнее рассказать?
http://netup.ru/phpbb/viewtopic.php?t=5236
ограничивает скорость на ng-интерфейсе, создаваемого во время авторизации абонента, параметры радиуса стабильно меняются на ходу, всё работает чотко

set
Сообщения: 56
Зарегистрирован: Вт июл 31, 2007 13:54

Сообщение set »

Mental Noize писал(а):
RusBiT писал(а): Сейчас использую poptop/ freebsd , планирую переходить на mpd.
Могли по подробнее рассказать?
http://netup.ru/phpbb/viewtopic.php?t=5236
ограничивает скорость на ng-интерфейсе, создаваемого во время авторизации абонента, параметры радиуса стабильно меняются на ходу, всё работает чотко
Мне бы для Gentoo и RP-PPPoE.

Vadimus
Сообщения: 11
Зарегистрирован: Ср окт 25, 2006 19:40
Откуда: МО, г. Пушкино
Контактная информация:

Сообщение Vadimus »

На Gentoo делаю так: добавляю скорость в радиус-параметры к тарифам (соответственно, добавляю атрибут PPPD-Downstream-Speed-Limit с номером 231 (у меня так, наверное, можно и с другим) к тарифу в админке и выставляю его значение-это будет необходимая на данном тарифе скорость), а на машине с RP-PPPoE скорость выставляю с помощью скрипта /etc/ppp/ip-up, выполняющемся при старте соединения.
Также в файл /etc/ppp/radius/dictionary необходимо добавить следующие строки:

Код: Выделить всё

# My own attribute
ATTRIBUTE	PPPD-Downstream-Speed-Limit	231	string
cat /etc/ppp/ip-up

Код: Выделить всё

#!/bin/bash

# this is a script which is executed after connecting the ppp interface.
# look at man pppd for details

# the followings parameters are available:
# $1 = interface-name
# $2 = tty-device
# $3 = speed
# $4 = local-IP-address
# $5 = remote-IP-address
# $6 = ipparam
device=$1;
rate=`cat /var/run/radattr.$device | grep "PPPD-Downstream-Speed-Limit" | cut -d " " -f 2`;

# Сбрасываем все правила и фильтры
/sbin/tc qdisc del dev $device root;
# Устанавливаем ограничения входящего трафика
/sbin/tc qdisc add dev $device root handle 1: htb default 10 r2q 100;
/sbin/tc class add dev $device parent 1:1 classid 1:10 htb rate ${rate}mbit ceil ${rate}mbit burst 100k;
Если интересно, конфиг ppp при этом такой

Код: Выделить всё

#/etc/ppp/pppoe-server-options
require-pap
refuse-chap
refuse-mschap
require-mschap-v2
ms-dns *.*.*.*
mtu 1500
mru 1500
proxyarp
login
nobsdcomp
novj
nologfd
nolog
kdebug 0
nodetach
nodeflate
receive-all

lcp-echo-interval 15
lcp-echo-failure 3
ipcp-accept-remote
ipcp-accept-local

plugin /usr/lib/pppd/2.4.4/radius.so
plugin /usr/lib/pppd/2.4.4/radattr.so

Yuriy
Сообщения: 29
Зарегистрирован: Ср мар 21, 2007 10:25

Сообщение Yuriy »

UP
Хотелось-бы всё-таки услышать комментарий представителя Нетапа на следующее:
У меня вместо "Vendor:0 Attr:230 Val:1024" и "Vendor:0 Attr:231 Val:1024" тип "String" становится "Vendor:0 Attr:230 Val:875704369" и "Vendor:0 Attr:231 Val:875704369" и тип "Номер".
В моём случае если ТП не привязан ни к одному пользователю то всё добавляется правильно, если-же привязан хоть к одному - такая ерунда.

SOLDIER
Сообщения: 649
Зарегистрирован: Чт мар 16, 2006 18:07

Сообщение SOLDIER »

Занятно. Сегодня столкнулся с такой же фишкой с Радиус-параметрами! Причём у меня даже при непрвязанном тарифе вылазят такие же параметры. Было выяснено, что подобное получается при выставлении скоростей больше 1024. Так как ТП безмолствует, было принято вот такое вот черезжопное (прошу прощения за выражение, но других слов просто нет! :evil: ) решение. В скрипте shape.sh в директории ip-up.d вставлен вот такой код (у меня 1024 и 2560):

Код: Выделить всё

if [ "$DOWNSPEED" != "0" ] ;

           then
           case $DOWNSPEED in
            824) DOWNSPEED=`expr $DOWNSPEED+200`;;
            860) DOWNSPEED=`expr $DOWNSPEED+1700`;;
Ну а дальше код добавления правил шейпера.

SOLDIER
Сообщения: 649
Зарегистрирован: Чт мар 16, 2006 18:07

Сообщение SOLDIER »

2Vadimus, версия UTM какая? Потому что у меня также Gentoo и также аттрибут-231. Но параметры корёжатся - причём не у меня одного. Смотрите выше.

set
Сообщения: 56
Зарегистрирован: Вт июл 31, 2007 13:54

Сообщение set »

SOLDIER писал(а):Занятно. Сегодня столкнулся с такой же фишкой с Радиус-параметрами! Причём у меня даже при непрвязанном тарифе вылазят такие же параметры. Было выяснено, что подобное получается при выставлении скоростей больше 1024. Так как ТП безмолствует, было принято вот такое вот черезжопное (прошу прощения за выражение, но других слов просто нет! :evil: ) решение. В скрипте shape.sh в директории ip-up.d вставлен вот такой код (у меня 1024 и 2560):

Код: Выделить всё

if [ "$DOWNSPEED" != "0" ] ;

           then
           case $DOWNSPEED in
            824) DOWNSPEED=`expr $DOWNSPEED+200`;;
            860) DOWNSPEED=`expr $DOWNSPEED+1700`;;
Ну а дальше код добавления правил шейпера.
У меня не принимает скорость больше чем 999. И все равно, судя по логам, передает какието левые значения.

Vadimus
Сообщения: 11
Зарегистрирован: Ср окт 25, 2006 19:40
Откуда: МО, г. Пушкино
Контактная информация:

Сообщение Vadimus »

SOLDIER писал(а):Занятно. Сегодня столкнулся с такой же фишкой с Радиус-параметрами! Причём у меня даже при непрвязанном тарифе вылазят такие же параметры. Было выяснено, что подобное получается при выставлении скоростей больше 1024. Так как ТП безмолствует, было принято вот такое вот черезжопное (прошу прощения за выражение, но других слов просто нет! :evil: ) решение. В скрипте shape.sh в директории ip-up.d вставлен вот такой код (у меня 1024 и 2560):

Код: Выделить всё

if [ "$DOWNSPEED" != "0" ] ;

           then
           case $DOWNSPEED in
            824) DOWNSPEED=`expr $DOWNSPEED+200`;;
            860) DOWNSPEED=`expr $DOWNSPEED+1700`;;
Ну а дальше код добавления правил шейпера.
Версия у меня 003, но с этой проблемой я не сталкивался, т. к. значения скоростей у меня дробные либо целые числа до 100 - 0.4, 0.7, 2, 5 и т. д., просто в шейпере я указываю их в mbit`ах.

SOLDIER
Сообщения: 649
Зарегистрирован: Чт мар 16, 2006 18:07

Сообщение SOLDIER »

У меня 5.2.1-005. Кстати - насчёт mbit -это тоже вариант (не обратил на это внимания сначала). Тем не менее привожу подправленный код своих "костылей (тогда наспех писал)^

Код: Выделить всё

if [ -f /var/run/radattr.$1 ]
   then
         DOWNSPEED=`/bin/awk  '/PPPD-Downstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
         UPSPEED=`/bin/awk  '/PPPD-Upstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`

.....

 if [ "$DOWNSPEED" != "0" ] ;

           then
           case $DOWNSPEED in
            824) DOWNSPEED=`expr $DOWNSPEED + 200`;;
            860) DOWNSPEED=`expr $DOWNSPEED + 1700`;;
            *) k=1;;
            esac
Собственно вот. K=1 - это я просто так вставил. Пустой оператор типа. :)

antmix
Сообщения: 2
Зарегистрирован: Пт апр 25, 2008 09:09
Откуда: Москва
Контактная информация:

Сообщение antmix »

Может кому пригодится:
start_shaper.tcl

Код: Выделить всё

#!/usr/bin/tclsh
package require mysqltcl

# setting speeds for tarifs
# Format: set TARIF(_TARIF_ID_) "TRAF_LIMIT_IN_MBYTES SPEED_IN_KBITS"
# TRAF_LIMIT == 0 - Tarif without traf_limit
set TARIF(2017) "0 2048"
# blokirovka
set TARIF(1999) "0 0"
set TARIF(2036) "4000 512"


set mysqlhost "<host>"
set mysqluser "<user>"
set mysqlpass "<password>"
set mysqldb "UTM5"
set WorkDir "/root/shaper/"


# # # # # # # # # # # start script # # # # # # # # # #
# please do not modify.
# eth0 - inet
# eth1 - LAN

# checking mysql connection
set mysqlsock &#91;mysqlconnect -host $mysqlhost -user $mysqluser -password $mysqlpass -db $mysqldb&#93;
mysqlclose

puts "&#91;exec date&#93; &#58; Loading some need functions..."
proc isEndOfTraffic &#123;mysqlsock UID TARIFID0&#125; &#123;
# if inbound traf is over - return 1
# if indound traf is not over and outbound traf is over - return 2
# if all traf is not over - return 0

if &#123; &#91;mysqlsel $mysqlsock "select sum&#40;d.qnt&#41;/&#40;1000000&#41; as mb from service_links sl left join iptraffic_service_links isl on isl.id=sl.id left join downloaded d on d.downloaded_id=isl.downloaded_id where d.is_deleted=0 and sl.is_deleted=0 and d.tclass_id = 10 and sl.user_id=$UID group by sl.user_id;" -flatlist&#93; > $TARIFID0 &#125; &#123; return 1 &#125;

if &#123; &#91;mysqlsel $mysqlsock "select sum&#40;d.qnt&#41;/&#40;1000000&#41; as mb from service_links sl left join iptraffic_service_links isl on isl.id=sl.id left join downloaded d on d.downloaded_id=isl.downloaded_id where d.is_deleted=0 and sl.is_deleted=0 and d.tclass_id = 20 and sl.user_id=$UID group by sl.user_id;" -flatlist&#93; > $TARIFID0 &#125; &#123; return 2 &#125;

return 0

&#125;


puts "&#91;exec date&#93; &#58; Generating table..."
set GlobUsrTmpFile "$WorkDir\htb-users.txt"

# query with balance and credit
set SQLQuery "SELECT service_links.user_id AS id,inet_ntoa&#40;ip_groups.ip& 0xffffffff&#41; AS ip,account_tariff_link.tariff_id AS tariff,accounts.balance AS balance,accounts.credit AS credit FROM service_links LEFT JOIN users ON users.id = service_links.user_id LEFT JOIN accounts ON accounts.id = service_links.account_id LEFT JOIN account_tariff_link ON account_tariff_link.id = service_links.tariff_link_id LEFT JOIN iptraffic_service_links ON iptraffic_service_links.id = service_links.id LEFT JOIN ip_groups ON ip_groups.ip_group_id = iptraffic_service_links.ip_group_id WHERE service_links.is_deleted = '0' AND users.is_deleted = '0' AND iptraffic_service_links.is_deleted = '0' AND ip_groups.is_deleted = '0' AND accounts.is_deleted = '0' AND account_tariff_link.is_deleted = '0' AND accounts.is_blocked = 0 ORDER BY service_links.user_id"

exec /bin/echo $SQLQuery | /usr/bin/mysql -u $mysqluser $mysqldb -h $mysqlhost -p\$mysqlpass > $GlobUsrTmpFile

puts "&#91;exec date&#93; &#58; Removing olg htb- files..."
exec $WorkDir\htb-clean.sh

puts "&#91;exec date&#93; &#58; Creating htb files"
set mysqlsock &#91;mysqlconnect -host $mysqlhost -user $mysqluser -password $mysqlpass -db $mysqldb&#93;
set GlobUsrFileInID &#91;open $GlobUsrTmpFile r&#93;
set devnnull &#91;gets $GlobUsrFileInID GlobUsrLine&#93;

while &#123; &#91;gets $GlobUsrFileInID GlobUsrLine&#93; >= 0 &#125; &#123;
        set SPEED "noshape"
        set UID &#91;lindex $GlobUsrLine 0&#93;
        set IP  &#91;lindex $GlobUsrLine 1&#93;
        set TARIFID &#91;lindex $GlobUsrLine 2&#93;
        set BALANCE &#91;lindex $GlobUsrLine 3&#93;
        set CREDIT &#91;lindex $GlobUsrLine 4&#93;
        if &#123;&#91;info exists TARIF&#40;$TARIFID&#41;&#93;&#125; &#123;
                if &#123; &#91;lindex $TARIF&#40;$TARIFID&#41; 0&#93; <= 0 &#125; &#123;
                        set SPEED &#91;lindex $TARIF&#40;$TARIFID&#41; 1&#93;
                  &#125; else &#123;
                        if &#123; &#91;isEndOfTraffic $mysqlsock $UID &#91;lindex $TARIF&#40;$TARIFID&#41; 0&#93;&#93; != 0 &#125; &#123;
                                set SPEED &#91;lindex $TARIF&#40;$TARIFID&#41; 1&#93;
                          &#125; else &#123;
                                set SPEED "noshape"
                        &#125;
                &#125;
          &#125; else &#123;
                set SPEED "noshape"
        &#125;
        if &#123;&#91;expr $BALANCE + $CREDIT&#93; <= 0&#125; &#123; set SPEED "-1" &#125;
        if &#123; $SPEED != "noshape" && $SPEED != "" && $SPEED > "0" &#125; &#123;
                        set UsrFileID &#91;open "/etc/sysconfig/htb/eth1-2&#58;&#91;expr $UID + 200&#93;.UID_$UID\_in" a&#93;
                        puts $UsrFileID "RATE=$SPEED\Kbit"
                        puts $UsrFileID "CEIL=$SPEED\Kbit"
                        puts $UsrFileID "LEAF=sfq"
                        puts $UsrFileID "RULE=$IP"
                        puts $UsrFileID "PRIO=40\n\n"
                        close $UsrFileID
                        set UsrFileID &#91;open "/etc/sysconfig/htb/eth0-2&#58;&#91;expr $UID + 200&#93;.UID_$UID\_out" a&#93;
                        puts $UsrFileID "RATE=&#91;expr $SPEED - $SPEED / 7&#93;Kbit"
                        puts $UsrFileID "CEIL=&#91;expr $SPEED - $SPEED / 8&#93;Kbit"
                        puts $UsrFileID "LEAF=sfq"
                        puts $UsrFileID "RULE=$IP,"
                        puts $UsrFileID "PRIO=40\n\n"
                        close $UsrFileID
                &#125; elseif &#123; $SPEED <= "0" &#125; &#123;
                        if &#123;$IP != ""&#125; &#123;
                        &#125;
        &#125;
        if &#123; $SPEED == "noshape" &#125; &#123;
                if &#123;$IP != ""&#125; &#123;
                        set SPEED "10240"
                        set UsrFileID &#91;open "/etc/sysconfig/htb/eth1-2&#58;&#91;expr $UID + 200&#93;.UID_$UID\_in" a&#93;
                        puts $UsrFileID "RATE=$SPEED\Kbit"
                        puts $UsrFileID "CEIL=$SPEED\Kbit"
                        puts $UsrFileID "LEAF=sfq"
                        puts $UsrFileID "RULE=$IP"
                        puts $UsrFileID "PRIO=30\n\n"
                        close $UsrFileID
                        set UsrFileID &#91;open "/etc/sysconfig/htb/eth0-2&#58;&#91;expr $UID + 200&#93;.UID_$UID\_out" a&#93;
                        puts $UsrFileID "RATE=&#91;expr $SPEED * 0.8&#93;Kbit"
                        puts $UsrFileID "CEIL=&#91;expr $SPEED * 0.8&#93;Kbit"
                        puts $UsrFileID "LEAF=sfq"
                        puts $UsrFileID "RULE=$IP,"
                        puts $UsrFileID "PRIO=30\n\n"
                        close $UsrFileID
                &#125;
        &#125;
&#125;

close $GlobUsrFileInID
mysqlclose


puts "&#91;exec date&#93; &#58; Creating special shaper's files"
set SpecUsrFileInID &#91;open "$WorkDir\specusers0.txt" r&#93;
set devnnull &#91;gets $SpecUsrFileInID line&#93;
while &#123;&#91;gets $SpecUsrFileInID SpecUsrLine&#93; >= 0&#125; &#123;
        set UID &#91;lindex $SpecUsrLine 0&#93;
        set IP  &#91;lindex $SpecUsrLine 1&#93;
        set SPEED &#91;lindex $SpecUsrLine 2&#93;
        if &#123; $SPEED != "" && $SPEED > "0" &#125; &#123;
                        set UsrFileID &#91;open "/etc/sysconfig/htb/eth1-2&#58;&#91;expr $UID + 200&#93;.UID_$UID\_in" a&#93;
                        puts $UsrFileID "RATE=$SPEED\Kbit"
                        puts $UsrFileID "CEIL=$SPEED\Kbit"
                        puts $UsrFileID "LEAF=sfq"
                        puts $UsrFileID "RULE=$IP"
                        puts $UsrFileID "PRIO=10\n\n"
                        close $UsrFileID
                        set UsrFileID &#91;open "/etc/sysconfig/htb/eth0-2&#58;&#91;expr $UID + 200&#93;.UID_$UID\_out" a&#93;
                        puts $UsrFileID "RATE=&#91;expr $SPEED * 0.8&#93;Kbit"
                        puts $UsrFileID "CEIL=&#91;expr $SPEED * 0.8&#93;Kbit"
                        puts $UsrFileID "LEAF=sfq"
                        puts $UsrFileID "RULE=$IP,"
                        puts $UsrFileID "PRIO=10\n\n"
                        close $UsrFileID
                &#125; elseif &#123; $SPEED <= "0" &#125; &#123;
                        if &#123;$IP != ""&#125; &#123;
                        &#125;
        &#125;
&#125;
close $SpecUsrFileInID

puts "&#91;exec date&#93; &#58; Generating shaper... &#40;tc rules&#41;"
set compilesh "$WorkDir\shaper-htb.sh"
set OutFileID &#91;open "$compilesh" w&#93;
puts $OutFileID "#!/bin/bash"
close $OutFileID
exec /etc/init.d/htb.init compile >> $compilesh
#exec /etc/init.d/htb.init restart
exec chmod 755 "$compilesh"
puts "&#91;exec date&#93; &#58; Executing shaper... &#40;tc&#41;"
exec "$compilesh"
puts "&#91;exec date&#93; &#58; done"

exit 0
htb-clean.sh

Код: Выделить всё

#!/bin/bash
cd /etc/sysconfig/htb/
/bin/rm -f ./eth0*UID* > /dev/null
/bin/rm -f ./eth1*UID* > /dev/null
specusers0.txt

Код: Выделить всё

ID      IP              SPEED   coment
5001    1.2.3.0/29    51200     staff subnet
5002    1.2.4.10       512   some host
Дальше все это обрабатывается обычным htb.init (ищется на opennet.ru)
Работает на линуксовом роутере примерно год-два.

Аватара пользователя
kamae1ka
Сообщения: 142
Зарегистрирован: Пн окт 04, 2010 05:14

Сообщение kamae1ka »

встаю вот на этом месте -

Код: Выделить всё

exec /bin/echo $SQLQuery | /usr/bin/mysql -u $mysqluser $mysqldb -h $mysqlhost -p $mysqlpass > $GlobUsrTmpFile 
пишет что не возможно прочитать, хотя запрос проходит нормально
переменная $SQLQuery

Код: Выделить всё

set SQLQuery "SELECT service_links.user_id AS id,inet_ntoa&#40;ip_groups.ip& 0xffffffff&#41; AS ip,account_tariff_link.tariff_id AS tariff,accounts.balance AS balance,accounts.credit AS credit FROM service_links LEFT JOIN users ON users.id = service_links.user_id LEFT JOIN accounts ON accounts.id = service_links.account_id LEFT JOIN account_tariff_link ON account_tariff_link.id = service_links.tariff_link_id LEFT JOIN iptraffic_service_links ON iptraffic_service_links.id = service_links.id LEFT JOIN ip_groups ON ip_groups.ip_group_id = iptraffic_service_links.ip_group_id WHERE service_links.is_deleted = '0' AND users.is_deleted = '0' AND iptraffic_service_links.is_deleted = '0' AND ip_groups.is_deleted = '0' AND accounts.is_deleted = '0' AND account_tariff_link.is_deleted = '0' AND accounts.is_blocked = 0 ORDER BY service_links.user_id"
сама ошибочка -

Код: Выделить всё

&#91;root@vpnhost shaper&#93;# ./start_shaper.tcl
Птн Дек 17 07&#58;35&#58;38 MSK 2010 &#58; Loading some need functions...
Птн Дек 17 07&#58;35&#58;38 MSK 2010 &#58; Generating table...
child process exited abnormally
    while executing
"exec /bin/echo $SQLQuery | mysql -u $mysqluser $mysqldb -h $mysqlhost -p $mysqlpass > $GlobUsrTmpFile"
    &#40;file "./start_shaper.tcl" line 50&#41;

Ответить