Dynashape не режет меня

Технические вопросы по UTM 5.0
Axell
Сообщения: 37
Зарегистрирован: Вт авг 14, 2007 04:41

Dynashape не режет меня

Сообщение Axell »

Всем привет!

UTM 5.2.1.005 под Gentoo 2007

Тестим: тяну файл на скорости 20-25 Кбайт/сек.

Воткнул Dynashape. В настройках прописал переменную (1, эт айди моего тарифа) и значение (0-64;) Создал скриптик из мануала. Прописал в консоль все команды из мануала ("Предполагается, что..."). Запускаю utm5_dynashape -i, всё ок. В /netup/utm5/log/dynashape.tmp лёг файл с содержанием

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

2001 192.168.0.14 32 255.255.255.255 64 1
На мой взгляд тут все гуд.

Затем запускаем utm5_dynashape без ключа -i.
С dynashape.cfg всё так же ОК.

Тестим)))
Тот же файл с инета тянем на скорости 80-90 Кбайт/сек))

Ясно-понятно, что подъем скорости с dynashape не связан, но все равно прикольно получилось)

Итак, как же ж мне скорость-то порезать?

Вот dynashape.cfg:

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

localhost ~ # cat /netup/utm5/dynashape.cfg
##
## /netup/utm5/dynashape.cfg
## DynaShape configuration file
##

## tmp_file
##  Description: A temporary file to store information on executed commands.
##  Possible values&#58; <path>
##  Required field.
tmp_file=/netup/utm5/log/dynashape.tmp

## core_host
##  Description&#58; IP address of the host running UTM5 core.
##  Possible values&#58; IP address or 0.0.0.0
##  Default value&#58; 127.0.0.1
core_host=127.0.0.1

## core_port
##  Description&#58; Port where UTM5 is listening to URFA.
##  Possible values&#58; an integer from 1 to 65534
##  Default value&#58; 11758
core_port=11758

## core_login
##  Description&#58; Login of the system user to access the UTM5 core. The user
##   should have rights to call the urfa-function with ID = 0x12001.
##  Possible values&#58; <string>
##  Default value&#58; init
core_login=*****

## core_password
##  Description&#58; Password of the system user to access the UTM5 core.
##  Possible values&#58; <string>
##  Default value&#58; init
core_password=*****

## group_id
##  Description&#58; ID of the group of users for which the shaper management
##   commands are executed.
##  Possible values&#58; an integer
##  Default value&#58; unset

## t_class
##  Description&#58; Traffic classes to include in calculation of
##   downloaded traffic.
##  Possible values&#58; a comma-separated list of positive integers
##  Default value&#58; unset
t_class=10

## firewall_path
##  Description&#58; Name of the executable file managing the software shaper.
##  Possible values&#58; <name of an executable file>
##  Default value&#58; unset
firewall_path=/netup/utm5/dynash

## fw_rule_offset
##  Description&#58; Sets the value to be added to user id to derive
##   the value of RULE_ID.
##  Possible values&#58; <positive integer>
##  Default value&#58; unset
fw_rule_offset=2000

## vpn_only
##  Description&#58; Regulates use of 'non-VPN' option when setting IP groups that
##   are used for creating the commands.
##  Possible values&#58; 0, 1, 2
##   ---------------------------------------------------------
##   | Value | 'non-VPN' option value for IP traffic service |
##   |-------+-----------------------------------------------|
##   | 0     | the option is unset                           |
##   | 1     | the option is set                             |
##   | 2     | the option is ignored                         |
##   ---------------------------------------------------------
##  Default value&#58; 0
vpn_only=0
Ы?

Кстати, всех с наступившим!!))

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Выложите правила шейпера до включения диношейпа и после включения, тогда возможно что-то и скажут. Явно тут дело в нем, а в настройках самого шейпера.

Axell
Сообщения: 37
Зарегистрирован: Вт авг 14, 2007 04:41

Сообщение Axell »

Да, я тож так думаю.

Правила из мануала. Перед стартом диношейпера:

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

tc qdisc add dev eth1 root handle 1&#58; htb
tc class add dev eth1 parent 1&#58; classid 1&#58;1 htb rate 100mbit ceil 100mbit burst 200k
tc class add dev eth1 parent 1&#58;1 classid 1&#58;10 htb rate 64kbit burst 20k
tc filter add dev eth1 parent 1&#58; protocol ip prio 3 handle 1 fw classid 1&#58;10
Вот. Даже не знаю, что сказать по этому поводу... :roll:

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Ну хорошо, вижу там некое упоминание про 64 килобита, а что он покажет после старта шейпера?

Axell
Сообщения: 37
Зарегистрирован: Вт авг 14, 2007 04:41

Ничего...

Сообщение Axell »

В dynashape.tmp та же строчка

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

2001 192.168.0.14 32 255.255.255.255 64 1
файло тянется так же на 50 Кбайт/сек и больше..

В соседних логах молчок. Модуль загружен, лицензия стоит.

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

localhost log # ip link
1&#58; lo&#58; <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00&#58;00&#58;00&#58;00&#58;00&#58;00 brd 00&#58;00&#58;00&#58;00&#58;00&#58;00
2&#58; eth2&#58; <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00&#58;19&#58;5b&#58;82&#58;c1&#58;7c brd ff&#58;ff&#58;ff&#58;ff&#58;ff&#58;ff
3&#58; eth1&#58; <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb qlen 1000
    link/ether 00&#58;19&#58;21&#58;83&#58;ba&#58;bf brd ff&#58;ff&#58;ff&#58;ff&#58;ff&#58;ff


JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Вот там прописан в строчке firewall_path файл /netup/utm5/dynash? что у него внутри и есть ли он вообще? я так понял, правилами линуксового шейпера управляет именно эта программа или скрипт.

Axell
Сообщения: 37
Зарегистрирован: Вт авг 14, 2007 04:41

По порядку

Сообщение Axell »

Да, конечно dynash там есть. Он исполняется. Код взят из мануала UTM "Примеры скриптов...".

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

localhost ~ # cat /netup/utm5/dynash
#!/bin/bash
if="eth1"
echo $*
echo "First create&#58; tc qdisc add dev $if root handle 1&#58; htb"
case "$7" in
1&#41;
        iptables -t mangle -A FORWARD -s 0/0 -d $2/$3 -j MARK --set-mark $1
        tc filter add dev $if parent 1&#58; protocol ip prio 3 handle $1 fw classid 1&#58;$1
        tc class add dev $if parent 1&#58;1 classid 1&#58;$1 htb rate $5kbit burst 20k
;;
0&#41;
        iptables -t mangle -D FORWARD -s 0/0 -d $2/$3 -j MARK --set-mark $1
        tc filter del dev $if parent 1&#58; protocol ip prio 3 handle $1 fw classid 1&#58;$1
        tc class del dev $if parent 1&#58;1 classid 1&#58;$1 htb rate $5kbit burst 20k
;;
2&#41;
;;
3&#41;
        tc class change dev $if parent 1&#58;1 classid 1&#58;$1 htb rate $5kbit burst 20k
;;
*&#41;      echo "Usage&#58; `basename $0` &#123;ID IP BITMASK MASK SPEED INT_STATUS OPER_STATUS&#125;" >&2
        exit 64
;;
esac
Так. Давайте по порядку.

Для простого шейпирования одного клиента при раскладе eth1 - интерфейс смотрит в инет, eth2 - интерфейс смотрит в локалку.

Есть юзер 192.168.0.14.

Если я правильно понимаю, можно тупо прописав правила порезать скорость ему:

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

tc qdisc  add dev eth1 root handle 1&#58; htb
iptables -t mangle -A FORWARD -s 0/0 -d 192.168.0.14 -j MARK --set-mark 666
#как я понимаю, --set-mark должен указывать некий id, который маркируется? В скрипте dynash из мануала значения айпи и маркировки подставляются дипошейпом, так что здесь пока мы можем писать что хотим?
tc filter add dev eth1 parent 1&#58; protocol ip prio 3 handle 666 fw classid 1&#58;666
tc class add dev eth1 parent 1&#58; classid 1&#58;1 htb rate 100mbit ceil 100mbit burst 200k
tc class add dev eth1 parent 1&#58;1 classid 1&#58;666 htb rate 64kbit burst 20k
Если все правильно, трафик должен шейпироваться?

Axell
Сообщения: 37
Зарегистрирован: Вт авг 14, 2007 04:41

Сообщение Axell »

Так.
Для реализации шейпинга нужно создать очередь, класс и фильтр. Создание очереди:

tc qdisc add dev eth0 root handle 1: htb

Примечание
При сборке ядра Linux необходимо включить опцию:
Networking->Networking Options->QoS and/or fair queueing->Hierarchical Token Buket (HTB)

Создание классов:

tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit burst 200k
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit burst 20k

Здесь класс 1:1 задает общую скорость канала, класс 1:10 задает ограничение скорости в 1Мб/с. Чтобы задать величину скорости в килобитах, нужно использовать обозначение "kbit". Можно задать неограниченное количество классов с разной пропускной способностью. Для обеспечения гарантированной полосы пропускания для клиента рекомендуется следить за тем, чтобы суммарная скорость, описанная в классах, не превышала пропускной описанной в родительском классе 1:1.

Далее создается фильтр, заворачивающий трафик в класс:

tc filter add dev eth0 parent 1: protocol ip prio 3 handle 1 fw classid 1:10

Здесь следует обратить внимание на значение параметра handle - в нашем случае это "1". Параметр "handle" это метка, которая проставлена пакету в iptables, т.е. пакеты, скорость которых нужно ограничивать, нужно метить соответствующей меткой. Делается это следующим образом:

iptables -t mangle -A FORWARD -d 1.1.1.1/32 -j MARK --set-mark 1

эта запись означает, что пакеты, направляющиеся к адресу 1.1.1.1, будут попадать в фильтр, в котором указан параметр "handle 1".
Не работает... :roll: :cry:

Axell
Сообщения: 37
Зарегистрирован: Вт авг 14, 2007 04:41

Сообщение Axell »

Такое ощущение, что тупо в ядре не включена подержка.. Но она включена! Пробовал и модулем и встроенную поддержку...(((

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Похоже дошло. Откройте dynash и вот эти строчки:

iptables -t mangle -A FORWARD -s 0/0 -d $2/$3 -j MARK --set-mark $1
iptables -t mangle -D FORWARD -s 0/0 -d $2/$3 -j MARK --set-mark $1

приведите к такому виду:

iptables -t mangle -A FORWARD -d $2/$3 -j MARK --set-mark $1
iptables -t mangle -D FORWARD -d $2/$3 -j MARK --set-mark $1

И отпишитесь, что из этого получилось.

Axell
Сообщения: 37
Зарегистрирован: Вт авг 14, 2007 04:41

Сообщение Axell »

Итаг!!!

Ура, товарисчи!!

Щас поднял авторизацию на радиусе (pppoe) и вышеуказанные правила из документации заработали, когда присобачил их на интерфейс ppp0 (на котором сидит юзер.

Естаственно, возникли новые вопросы, типа а как определять инетерфейс и т.п. но щас буду пока сам копать дальше))

JAO, великое спасибо!!

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Пожалуйста :-) а насчет вычисления имени интерфейса по IP адресу, так оно и не нужно. Набираем man pppd, внимательно читаем про скрипты ip-up и ip-down. В ip-up одним из параметров передается имя интерфейса, и соответствующую команду tc qdisc add dev, которая перед стартом диношейпа, можно затолкать туда.

Кстати, если интерфейс создается динамически, то будет ли у него держаться ранее поставленная скорость? диношейп конечно поставит нужную и в этом случае, но не на старте. Можно для пробы прописать вызов диношейпа в скрипте ip-up, чтобы сразу подкорректировать скорость, но если интерфейсы часто дергаются, нагрузка может быть большая. А можно почаще дергать диношейп по крону.

Axell
Сообщения: 37
Зарегистрирован: Вт авг 14, 2007 04:41

Сообщение Axell »

Ладн, бум разбираться) Пасип еще раз!)

A_Demin
Сообщения: 3
Зарегистрирован: Ср янв 23, 2008 22:29

Re: По порядку

Сообщение A_Demin »

Axell писал(а): Так. Давайте по порядку.

Для простого шейпирования одного клиента при раскладе eth1 - интерфейс смотрит в инет, eth2 - интерфейс смотрит в локалку.

Есть юзер 192.168.0.14.
И ты при этом все настраиваешь на eth1???
Понял почему у тебя заработало, когда ты настроил на ррр0 ?

A_Demin
Сообщения: 3
Зарегистрирован: Ср янв 23, 2008 22:29

Сообщение A_Demin »

JAO писал(а):Похоже дошло. Откройте dynash и вот эти строчки:

iptables -t mangle -A FORWARD -s 0/0 -d $2/$3 -j MARK --set-mark $1
iptables -t mangle -D FORWARD -s 0/0 -d $2/$3 -j MARK --set-mark $1

приведите к такому виду:

iptables -t mangle -A FORWARD -d $2/$3 -j MARK --set-mark $1
iptables -t mangle -D FORWARD -d $2/$3 -j MARK --set-mark $1

И отпишитесь, что из этого получилось.
Эти команды абсолютно идентичны.

Ответить