traffic control (устал :))

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

pelmen писал(а):
10.02.2010 18:22
мы создали класс 10, где указали rate 2000kbps ceil 4000kbps
а теперь мы хотим двум компам каждому по 2 мбит. Мы делаем фильтр для первого, указываем, что он идет через класс 10. Делаем фильтр для второго указываем, что он идет через класс 10. Или для второго другой класс нужно создавать, потому что в противном случае они будут эти 2 мбит делить между собой?
Этот же вопрос относится и к default, если под default у нас попали 2 компа, то они будут делить скорость или каждому по столько, сколько указано в default?

Отвечу чуть более развернуто чем expdot
Если мы создали один класс и направили в него 2 компа, то трафик, отпущенный классу, будет распределятся между ними. Причем внимание - как именно будет распределятся трафик между ними шейпер не решает (если конечно очередь специально это не поддерживает - но о esfq пока не будем). Таким образом преимущество будет иметь тот кто использует многопоточные загрузчики типа регета ;)
Итак - если вы хотите СПРАВЕДЛИВО разделить полосу между двумя компами, то создайте по классу для каждого. Только учтите, что сумма параметров rate должна быть не более реальной скорости канала - иначе шейпирование уйдет к провайдеру (еще это называется рухнул шейпер).
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: traffic control

Сообщение pelmen »

А если у провайдера временные проблемы и мой канал стал немного меньше на непродолжительный промежуток времени, мой шейпер тоже рухнет?
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

pelmen писал(а):
10.02.2010 22:18
А если у провайдера временные проблемы и мой канал стал немного меньше на непродолжительный промежуток времени, мой шейпер тоже рухнет?

Да. В таком случае трафик будет резаться у провайдера, а он не знает о нашем желании резать торренты Васе и пропускать побыстрее веб страницы для нас. Но как скорость канала будет восстановлена, то все придет в норму. В принципе кратков ременные падения скорости не страшны - должно сильно не повезти, чтобы они совпали с пиками загрузки сети. Хотя смотря как качать...
Спасибо сказали:
expdot
Сообщения: 176
ОС: Fedora 13, Win Vista

Re: traffic control

Сообщение expdot »

Alex2ndr писал(а):
10.02.2010 21:52
о esfq пока не будем

esfq уже и не понадобится, тем более нужно патчить ядро и утилиты
можно воспользоваться стандартным sfq + внешний классификатор
разработчики ядра намеренно не включили esfq в состав ядра, сделав внешний классификатор
пример:

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

$TC qdisc add dev $LAN parent 10:132 handle 132: sfq perturb 10
$TC filter add dev $LAN parent 10: protocol ip prio 4 u32 match ip sport 3128 0xffff flowid 10:132
$TC filter add dev $LAN parent 132: handle 1 protocol ip flow hash keys dst divisor 1024

таким образом весь трафик в данном случае прокси сервера будет более-менее справедливо распределяться между пользователями
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

expdot писал(а):
11.02.2010 08:35
Alex2ndr писал(а):
10.02.2010 21:52
о esfq пока не будем

esfq уже и не понадобится, тем более нужно патчить ядро и утилиты
можно воспользоваться стандартным sfq + внешний классификатор
разработчики ядра намеренно не включили esfq в состав ядра, сделав внешний классификатор
пример:

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

$TC qdisc add dev $LAN parent 10:132 handle 132: sfq perturb 10
$TC filter add dev $LAN parent 10: protocol ip prio 4 u32 match ip sport 3128 0xffff flowid 10:132
$TC filter add dev $LAN parent 132: handle 1 protocol ip flow hash keys dst divisor 1024

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

Спасибо, почитал про этот "внешний классификатор". Так как штука достаточно новая, то и инструкций по ней не очень много. Нашел пока только это - http://www.mail-archive.com/netdev@vger.ke...g/msg60638.html (как я понимаю рассылка разработчиков ядра). Немного поизучал - в принципе штука ничего - позволяет отправлять трафик в мясорубку, где выходные каналы по ip распределены. Фактически аналог esfq. Если у вас есть еще какие-то инструкции|руководства по этой штуке - выложите пожалуйста.

В общем и целом пока еще в сложных очередях и хэш фильтрах я глубоко не копался - нет тестового стенда, где можно поиграться хотя бы с 16 подсетью. На практике тоже такая задача пока не стоит.
Спасибо сказали:
expdot
Сообщения: 176
ОС: Fedora 13, Win Vista

Re: traffic control

Сообщение expdot »

в списке рассылки адрес которой вы привели есть примеры
ничего сложного
единственное я не понял для чего нужен дескриптор (handle) для фильтра?
если его опустить то получаем ошибку


вот немного теории
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

expdot писал(а):
11.02.2010 16:52
в списке рассылки адрес которой вы привели есть примеры
ничего сложного
единственное я не понял для чего нужен дескриптор (handle) для фильтра?
если его опустить то получаем ошибку


вот немного теории

Спасибо, почитаю.
Спасибо сказали:
winhex
Сообщения: 223
ОС: Debian

Re: traffic control

Сообщение winhex »

Начал разбираться с htbinit, но есть проблемы:

eth0

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

R2Q=20
DEFAULT=0


eth0-2:root

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

RATE=100Mbit


eth0-2:2001

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

RATE=128Kbit
CEIL=2Mbit
LEAF=sfq
MARK=1023
PRIO=1


eth0-2:2002

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

RATE=64Kbit
CEIL=256Kbit
LEAF=sfq
MARK=1012
PRIO=4


Маркирую пакеты так:
для компа в локалке

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

iptables -t mangle -A FORWARD -i ppp0 -d 192.168.2.23 -j MARK --set-mark 1023
iptables -t mangle -A FORWARD -i ppp0 -d 192.168.2.23 -j RETURN


собственный трафик шлюза (с него идет закачка торентов):

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

iptables -t mangle -A FORWARD -i ppp0 -d 192.168.1.2 -j MARK --set-mark 1012
iptables -t mangle -A FORWARD -i ppp0 -d 192.168.1.2 -j RETURN

Соответственно, идея была в том, чтобы как минимум делить трафик между компом в локалке 192.168.2.23 и шлюзом.
Однако похоже, что это не работает. Ставлю торент на закачку и он пожирает весь трафик :( В чем ошибка?

tc class show dev eth0:

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

class htb 1:2002 parent 1:2 leaf 2002: prio 4 rate 64000bit ceil 256000bit burst 1600b cburst 1600b
class htb 1:2003 parent 1:2 leaf 2003: prio 1 rate 64000bit ceil 256000bit burst 1600b cburst 1600b
class htb 1:2 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b
class htb 1:2001 parent 1:2 leaf 2001: prio 1 rate 128000bit ceil 2000Kbit burst 1600b cburst 1600b



Спасибо сказали:
winhex
Сообщения: 223
ОС: Debian

Re: traffic control

Сообщение winhex »

Уважаемые, может есть у кого идеи?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: traffic control

Сообщение sash-kan »

winhex писал(а):
15.09.2010 15:26
В чем ошибка?
[не вникая в суть]
подозреваю, в невозможности контролировать объём входящяго трафика.
[/не вникая в суть]
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

winhex писал(а):
15.09.2010 15:26
Соответственно, идея была в том, чтобы как минимум делить трафик между компом в локалке 192.168.2.23 и шлюзом.
Однако похоже, что это не работает. Ставлю торент на закачку и он пожирает весь трафик :( В чем ошибка?

Все верно сказал sash-kan. Ваш шейпер входящего трафика находится на интерфейсе в локалку(точнее должен). А трафик для вашего шлюза туда просто не попадает. Выход - использовать imq или ifb, но с костылями.
Спасибо сказали:
winhex
Сообщения: 223
ОС: Debian

Re: traffic control

Сообщение winhex »

Alex2ndr писал(а):
29.09.2010 13:27
winhex писал(а):
15.09.2010 15:26
Соответственно, идея была в том, чтобы как минимум делить трафик между компом в локалке 192.168.2.23 и шлюзом.
Однако похоже, что это не работает. Ставлю торент на закачку и он пожирает весь трафик :( В чем ошибка?

Все верно сказал sash-kan. Ваш шейпер входящего трафика находится на интерфейсе в локалку(точнее должен). А трафик для вашего шлюза туда просто не попадает. Выход - использовать imq или ifb, но с костылями.


Хотел настроить все с одной сетевой, просто маркируя трафик и устанавливая правила htb по маркерам, но видимо надо ставить вторую сетевую, или пересобирать ядро с imq
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

winhex писал(а):
29.09.2010 14:30
Хотел настроить все с одной сетевой, просто маркируя трафик и устанавливая правила htb по маркерам, но видимо надо ставить вторую сетевую, или пересобирать ядро с imq

С одной сетевой? шлюз их обычно как минимум 2 имеет - во внешнюю сеть и во внутреннюю. Поэтому вашего вывода я не понял. Чисто теоретически вам не поможет любое количество установленных сетевух.
Спасибо сказали:
winhex
Сообщения: 223
ОС: Debian

Re: traffic control

Сообщение winhex »

Alex2ndr писал(а):
29.09.2010 14:57
winhex писал(а):
29.09.2010 14:30
Хотел настроить все с одной сетевой, просто маркируя трафик и устанавливая правила htb по маркерам, но видимо надо ставить вторую сетевую, или пересобирать ядро с imq

С одной сетевой? шлюз их обычно как минимум 2 имеет - во внешнюю сеть и во внутреннюю. Поэтому вашего вывода я не понял. Чисто теоретически вам не поможет любое количество установленных сетевух.

Внешняя сеть на eth0 внутренняя на алиасе eth0:0 все работает замечательно, вот только нельзя использовать алиасы в правилах iptables
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

winhex писал(а):
29.09.2010 15:33
Внешняя сеть на eth0 внутренняя на алиасе eth0:0 все работает замечательно, вот только нельзя использовать алиасы в правилах iptables

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

Кроме того это большая дырка в безопасности. Имхо купить сетевуху за 200р - выгоднее. Но даже покупка сетевухи не спасет вас от сборки imq. Ситуация однозначна - хотите шейпить локальный трафик самого компа с шейпером - используйте imq|ifb.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: traffic control

Сообщение sash-kan »

winhex писал(а):
29.09.2010 15:33
вот только нельзя использовать алиасы в правилах iptables
да их нигде нельзя использовать. потому что в linux (не путать с операционной системой) их уже десять лет как не существует.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
winhex
Сообщения: 223
ОС: Debian

Re: traffic control

Сообщение winhex »

sash-kan писал(а):
29.09.2010 17:05
winhex писал(а):
29.09.2010 15:33
вот только нельзя использовать алиасы в правилах iptables
да их нигде нельзя использовать. потому что в linux (не путать с операционной системой) их уже десять лет как не существует.

Поясните, что вы имеете ввиду?
И почему нельзя обойтись без ifb/imq если воткнуть вторую сетевую? Нужно будет перенаправлять ВЕСЬ входящий трафик на виртуальную сетевую, и уже на нее налагать правила?
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

winhex писал(а):
29.09.2010 19:00
И почему нельзя обойтись без ifb/imq если воткнуть вторую сетевую?

Потому что войдя через любую сетевуху трафик будет входящим. А входящий трафик шейпить нельзя - только исходящий - так ядро линукса устроено. Трафик для компа в локалке выйдет через вторую сетевуху и на ней станет исходящим - там его и шейпят. А входящий трафик для локальных процессов относительно любой из сетевух исходящим никогда не станет.

winhex писал(а):
29.09.2010 19:00
Нужно будет перенаправлять ВЕСЬ входящий трафик на виртуальную сетевую, и уже на нее налагать правила?

Именно. Это единственная возможность сделать трафик для локальных процессов исходящим с сетевухи. Т е он входит в реальную а выходит из виртуальной. Вот на выходе мы его и шейпим.
Спасибо сказали:
winhex
Сообщения: 223
ОС: Debian

Re: traffic control

Сообщение winhex »

Согласен, тогда вопрос - подойдет ли для этого ifb или нужен IMQ?
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

winhex писал(а):
30.09.2010 00:16
Согласен, тогда вопрос - подойдет ли для этого ifb или нужен IMQ?

Если вы не используете NAT, то IFB хватит за глаза. А вот если используете... тогда с ifb будет не очень удобно работать - на нее трафик будет попадать до того как пройдет NAT ( т е все адреса назначения будут указывать на внешнюю сетевуху шлюза). Можно, конечно, по портам сортировать(знаем что на сервере только FTP демон, значит все на 21 порт отправляем в очередь сервера и тд) - но не очень удобно и не всегда возможно. На IMQ трафик же попадает после NAT (если конечно ядро собрано с соотв опцией).
Спасибо сказали:
winhex
Сообщения: 223
ОС: Debian

Re: traffic control

Сообщение winhex »

("Alex2ndr") писал(а):Если вы не используете NAT, то IFB хватит за глаза.

Конечно использую, как же без NAT на шлюзе...
Значит, буду пересобирать ведро с IMQ
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

winhex писал(а):
30.09.2010 11:16
Значит, буду пересобирать ведро с IMQ

Вот Вам кусок из моей переписки:
Как вы верно предположили надо собирать ядро с другой опцией:
Идем в Device Drivers --> Network device support ->
* Установить
...
б. IMQ behavior (PRE/POSTROUTING) (IMQ AB)
...
Первоначально я устанавливал BA. Собственно эта опция обозначает следующее:
Для пакетов снаружи( т е проходящих PREROUTING) отправка в imq
состоится после того как будет пройден NAT (Это опция A - After) или
до этого (опция B - Before). Аналогично для POSTROUTING - A это после
того как пройдет NAT , а B - до того. Таким образом вариант BA
отправляет пакеты в imq до ната, а значит в адресе назначения везде
стоит адрес сервера(фактически аналог ifb). В то время как в варианте
AB пакеты на imq уже будут иметь свои нормальные адреса. Кроме AB и BA
доступны еще BB и AA, но я решил с ними не экспериментировать - уже
очень экзотические.

В этих граблях я долго разбирался.
Спасибо сказали:
winhex
Сообщения: 223
ОС: Debian

Re: traffic control

Сообщение winhex »

Alex2ndr писал(а):
30.09.2010 11:52
В этих граблях я долго разбирался.

Спасибо, буду изучать.
А достичь желаемого хотя бы удалось?
Да, еще. Насколько я понял, нужно будет еще и iptables пересобрать для работы с IMQ ?
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

winhex писал(а):
30.09.2010 16:53
А достичь желаемого хотя бы удалось?

Честно говоря я еще не переделал свой скрипт. Все руки не доходят... Но у меня локальных трафик не довлеет над клиентским.

winhex писал(а):
30.09.2010 16:53
Да, еще. Насколько я понял, нужно будет еще и iptables пересобрать для работы с IMQ ?

Конечно. На сайте IMQ все написано. И патчи для iptables там же.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: traffic control

Сообщение sash-kan »

winhex писал(а):
29.09.2010 19:00
Поясните, что вы имеете ввиду?
ровно то, что написал. такой сущности, как alias, в сетевой подсистеме ядра десять лет как не существует. ip-адреса сетевому интерфейсу можно просто добавлять и удалять. и все адреса полностью равноправны.

Alex2ndr писал(а):
29.09.2010 21:56
входящий трафик шейпить нельзя - только исходящий - так ядро линукса устроено.
так мир устроен. вы можете дозировать количество воды, поливая цветы, но не можете дозировать количество капель, которые упадут на ваш зонт во время дождя.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
winhex
Сообщения: 223
ОС: Debian

Re: traffic control

Сообщение winhex »

Пересобрал ядро и iptables с поддержкой IMQ.
Взял скрипт из этой статьи.
Вот сам скрипт:

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

DEV=eth0
RATEUP=90
RATEDN=700  # Обратите внимание, что это значительно меньше реального значения
1500.
            # Из-за этого вы можете не захотеть использовать ограничение входящего трафика
            # пока оно не будет реализовано лучше, например на основе изменения размера окна.

#
# Конец раздела настроек
#

if [ "$1" = "status" ]
then
        echo "[qdisc]"
        tc -s qdisc show dev $DEV
        tc -s qdisc show dev imq0
        echo "[class]"
        tc -s class show dev $DEV
        tc -s class show dev imq0
        echo "[filter]"
        tc -s filter show dev $DEV
        tc -s filter show dev imq0
        echo "[iptables]"
        iptables -t mangle -L MYSHAPER-OUT -v -x 2> /dev/null
        iptables -t mangle -L MYSHAPER-IN -v -x 2> /dev/null
        exit
fi

# Сбросить все в известное состояние (очищеное)
tc qdisc del dev $DEV root    2> /dev/null > /dev/null
tc qdisc del dev imq0 root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV -j MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D PREROUTING -i $DEV -j MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null
ip link set imq0 down 2> /dev/null > /dev/null
rmmod imq 2> /dev/null > /dev/null

if [ "$1" = "stop" ]
then
        echo "Shaping removed on $DEV."
        exit
fi

###########################################################
#
# Ограничение исходящего потока (ограничивает пропускную способность до RATEUP)

# установить размер очереди, соответствующий двухсекундной задержке на низкопри
оритетном трафике
ip link set dev $DEV qlen 30

# изменяем значение mtu на исходящем устройстве. Понижение значения mtu уменьшит задержку, но
# и немного понизит пропускную способность из-за увеличения числа
# заголовков протоколов IP и TCP .
ip link set dev $DEV mtu 1000

# добавить корневую дисциплину HTB
tc qdisc add dev $DEV root handle 1: htb default 26

# добавить общее ограничение скорости по классу
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit

# добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
#                       Этим способом мы избегаем возможности "голодания" классов. Каждому классу
#                       разрешается занимать всю полосу пропускания, если другие классы не
#                       используются.
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 0
tc class add dev $DEV parent 1:1 classid 1:21 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 1
tc class add dev $DEV parent 1:1 classid 1:22 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 2
tc class add dev $DEV parent 1:1 classid 1:23 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 3
tc class add dev $DEV parent 1:1 classid 1:24 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 4
tc class add dev $DEV parent 1:1 classid 1:25 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 5
tc class add dev $DEV parent 1:1 classid 1:26 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 6

# подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
#                       SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
#                       внутри каждого класса.
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10

# направляем трафик в классы по fwmark - мы направляем трафик в классы, в соответствии со значением
#              fwmark установленном на пакете (мы будем устанавливать это
#              значение утилитой iptables позже). Обратите внимание, что
#              выше мы установили класс по умолчанию 1:26, так что
#              немаркированные пакеты (или с неизвестными значениями fwmark
#              будут направлены в низкоприоритетный класс.
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 24 fw flowid 1:24
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 25 fw flowid 1:25
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 26 fw flowid 1:26

# добавить цепочку MYSHAPER-OUT в таблицу mangle - сейчас мы настроим таблицу,которую будем
#                              использовать для фильтрациии установки fwmark
iptables -t mangle -N MYSHAPER-OUT
iptables -t mangle -I POSTROUTING -o $DEV -j MYSHAPER-OUT

# маркируем пакеты с помощью fwmark - устанавливаем значения 20-26 в зависимости от
#                                     нужного класса. Высший приоритет - 20.
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 0:1024 -j MARK --set-mark 23
# Низкоприоритетный трафик
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 0:1024 -j MARK --set-mark 23
# ""
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 20 -j MARK --set-mark 26
# порт ftp-data, низкий приоритет
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 5190 -j MARK --set-mark 23
# интернет-пейджер aol
iptables -t mangle -A MYSHAPER-OUT -p icmp -j MARK --set-mark 20
# ICMP (ping) - высокий приоритет,

# будем удивлять друзей
iptables -t mangle -A MYSHAPER-OUT -p udp -j MARK --set-mark 21
# распознавание имен DNS (маленькие пакеты)
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport ssh -j MARK --set-mark 22
# secure shell
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport ssh -j MARK --set-mark 22
# secure shell
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport telnet -j MARK --set-mark 22
# telnet (ew...)
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport telnet -j MARK --set-mark 22
# telnet (ew...)
iptables -t mangle -A MYSHAPER-OUT -p ipv6-crypt -j MARK --set-mark 24
# IPSec - мы не знаем полезную нагрузку, однако...
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport http -j MARK --set-mark 25
# локальный веб-сервер
iptables -t mangle -A MYSHAPER-OUT -p tcp -m length --length :64 -j MARK --set-mark 21 # маленькие пакеты

# скорее всего ACK-пакеты
iptables -t mangle -A MYSHAPER-OUT -m mark --mark 0 -j MARK --set-mark 26
# избыточно - смаркировать все неотмаркированые

# пакеты как 26 (низкий проиритет)

# Конец ограничения исходящего потока
#
####################################################

echo "Outbound shaping added to $DEV.  Rate: ${RATEUP}Kbit/sec."

# Раскомментируйте следующую строку, если хотите ограничить только исходящий трафик.
# exit

####################################################
#
# Ограничение входящего потока (ограничивает пропускную способность до RATEDN)

# убедимся, что модуль imq загружен

modprobe imq numdevs=1

ip link set imq0 up

# добавляем дисциплину - низкоприоритетный класс по умолчанию 1:21

tc qdisc add dev imq0 handle 1: root htb default 21

# добавляем общее ограничение скорости по классу
tc class add dev imq0 parent 1: classid 1:1 htb rate ${RATEDN}kbit

# добавляем подклассы - TCP traffic in 21, non TCP traffic in 20
#
tc class add dev imq0 parent 1:1 classid 1:20 htb rate $[$RATEDN/2]kbit ceil ${RATEDN}kbit prio 0
tc class add dev imq0 parent 1:1 classid 1:21 htb rate $[$RATEDN/2]kbit ceil ${RATEDN}kbit prio 1

# подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
#                       SFQ обеспечит почти честное деление полосы пропускания между соединениями
#                       внутри каждого класса.
tc qdisc add dev imq0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev imq0 parent 1:21 handle 21: red limit 1000000 min 5000 max 100000 avpkt 1000 burst 50

# направляем трафик в классы по fwmark - мы направляем трафик в классы, в соответствии со значением
#                                        fwmark установленном на пакете (мы будем устанавливать это
#                                        значение утилитой iptables позже). Обратите внимание, что
#                                        выше мы установили класс по умолчанию 1:26, так что
#                                        немаркированные пакеты (или с неизвестными значениями fwmark
#                                        будут направлены в низкоприоритетный класс.
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21

# добавить цепочку MYSHAPER-OUT в таблицу mangle - сейчас мы настроим таблицу,которую будем
#                                                  использовать для фильтрации и установки fwmark
iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I PREROUTING -i $DEV -j MYSHAPER-IN

# маркируем пакеты с помощью fwmark - устанавливаем значения 20-26 в зависимости от
#                                     нужного класса. Высший приоритет - 20.
iptables -t mangle -A MYSHAPER-IN -p ! tcp -j MARK --set-mark 20              # Маркировать не-tcp пакеты как высокоприоритетные
iptables -t mangle -A MYSHAPER-IN -p tcp -m length --length :64 -j MARK --set-mark 20 # маленькие TCP-пакеты - вероято ACK
iptables -t mangle -A MYSHAPER-IN -p tcp --dport ssh -j MARK --set-mark 20    # secure shell
iptables -t mangle -A MYSHAPER-IN -p tcp --sport ssh -j MARK --set-mark 20    # secure shell
iptables -t mangle -A MYSHAPER-IN -p tcp --dport telnet -j MARK --set-mark 20 # telnet (ew...)
iptables -t mangle -A MYSHAPER-IN -p tcp --sport telnet -j MARK --set-mark 20 # telnet (ew...)
iptables -t mangle -A MYSHAPER-IN -m mark --mark 0 -j MARK --set-mark 21      # избыточно - маркировать немаркированные
                                                                              # пакеты как 26 (низкий приоритет)

# Наконец, пропустить все эти пакеты через imq0
iptables -t mangle -A MYSHAPER-IN -j IMQ

# Конец ограничения входящего потока
#
####################################################

echo "Inbound shaping added to $DEV.  Rate: ${RATEDN}Kbit/sec."


В скрипте я поменял только скорость (у меня канал 512/512) и интрефейс. Т.к. модем в бридже и соединение поднимается на ppp0, поэтому шейпер я повесил на него же.
Вот что получилось:

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

tc class show dev ppp0
class htb 1:22 parent 1:1 leaf 22: prio 2 rate 68000bit ceil 480000bit burst 1599b cburst 1599b
class htb 1:1 root rate 480000bit ceil 480000bit burst 1599b cburst 1599b
class htb 1:23 parent 1:1 leaf 23: prio 3 rate 68000bit ceil 480000bit burst 1599b cburst 1599b
class htb 1:20 parent 1:1 leaf 20: prio 0 rate 68000bit ceil 480000bit burst 1599b cburst 1599b
class htb 1:21 parent 1:1 leaf 21: prio 1 rate 68000bit ceil 480000bit burst 1599b cburst 1599b
class htb 1:26 parent 1:1 leaf 26: prio 6 rate 68000bit ceil 480000bit burst 1599b cburst 1599b
class htb 1:24 parent 1:1 leaf 24: prio 4 rate 68000bit ceil 480000bit burst 1599b cburst 1599b
class htb 1:25 parent 1:1 leaf 25: prio 5 rate 68000bit ceil 480000bit burst 1599b cburst 1599b

Вопрос в чем - эффекта от скрипта почти не заметно. Судя по описанию, http-трафик должен преобладать над трафиком торрент-клиента. Однако, при загрузке страниц скорость закачки хоть и уменьшается, но как-то вяло. Страницы при этом загружаются медленно. Закачка по http при запущенном торенте тоже не радует.
То же самое касается пинга, ssh и прочего.
В чем может быть проблема?
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: traffic control

Сообщение Alex2ndr »

winhex писал(а):
09.10.2010 23:06
Пересобрал ядро и iptables с поддержкой IMQ.
Взял скрипт из этой статьи.
Вот сам скрипт:

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

DEV=eth0
...

В скрипте я поменял только скорость (у меня канал 512/512) и интрефейс. Т.к. модем в бридже и соединение поднимается на ppp0, поэтому шейпер я повесил на него же.

В тот скрипте что вы привели внешний интерфейс по прежнему eth0. Хотя у вас должен быть ppp0.

winhex писал(а):
09.10.2010 23:06
Вот что получилось:

1. А где полосы для IMQ?
2. Лучше показывайте с опцией -s - тогда можно будет посмотреть попадают ли хоть какие пакеты в ваши классы.

winhex писал(а):
09.10.2010 23:06
Вопрос в чем - эффекта от скрипта почти не заметно. Судя по описанию, http-трафик должен преобладать над трафиком торрент-клиента. Однако, при загрузке страниц скорость закачки хоть и уменьшается, но как-то вяло. Страницы при этом загружаются медленно. Закачка по http при запущенном торенте тоже не радует.
То же самое касается пинга, ssh и прочего.
В чем может быть проблема?

1. 480 при 512 это слишком оптимистично. Поставьте 410.
2. Где именно находитя торрент, http и прочие потребители? по отношению к шейперу?
3. В данном скрипте входящий трафик ограничивается более чем странно. Разделяется всего на 2 типа - приоритетный и не очень. В приоритетный попали telnet и ssh, а все остальные во второй. Так что разницы между http и torrent быть не должно. Еще между ними есть полоса для ACK пакетов, но ее трудно считать забивающей канал... Исходящий тоже странно разбивается... почитайте комментарии. Вообщем, могу посоветовать перебрать маркировку на нужные вам порты самостоятельно. И поработать над входящим трафиком - сделать большее число полос. Тогда результат должен быть более заметен.
4. Проверяйте попадает ли в шейпер нужное количество пакетов. Заняты ли очереди, что с токенами(избыток, недостаток). Смотрите с опцией -s.



Спасибо сказали:
winhex
Сообщения: 223
ОС: Debian

Re: traffic control

Сообщение winhex »

("Alex2ndr") писал(а):В тот скрипте что вы привели внешний интерфейс по прежнему eth0. Хотя у вас должен быть ppp0.

Да, привел оригинальный скрипт т.к. в нем изначально не менял ничего кроме интерфейса. Вот скрипт, несколько измененный в соотв. с вашими замечаниями. Кроме того добавил правила чтобы http-трафик маркировался как высокоприоритетный, а торент-трафик, как низкоприоритетный :

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

DEV=ppp0
RATEUP=410
RATEDN=410  # Обратите внимание, что это значительно меньше реального значения 1500.
            # Из-за этого вы можете не захотеть использовать ограничение входящего трафика
            # пока оно не будет реализовано лучше, например на основе изменения размера окна.

#
# Конец раздела настроек
#

if [ "$1" = "status" ]
then
        echo "[qdisc]"
        tc -s qdisc show dev $DEV
        tc -s qdisc show dev imq0
        echo "[class]"
        tc -s class show dev $DEV
        tc -s class show dev imq0
        echo "[filter]"
        tc -s filter show dev $DEV
        tc -s filter show dev imq0
        echo "[iptables]"
        iptables -t mangle -L MYSHAPER-OUT -v -x 2> /dev/null
        iptables -t mangle -L MYSHAPER-IN -v -x 2> /dev/null
        exit
fi

# Сбросить все в известное состояние (очищеное)
tc qdisc del dev $DEV root    2> /dev/null > /dev/null
tc qdisc del dev imq0 root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV -j MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D PREROUTING -i $DEV -j MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null
ip link set imq0 down 2> /dev/null > /dev/null
rmmod imq 2> /dev/null > /dev/null

if [ "$1" = "stop" ]
then
        echo "Shaping removed on $DEV."
        exit
fi

###########################################################
#
# Ограничение исходящего потока (ограничивает пропускную способность до RATEUP)

# установить размер очереди, соответствующий двухсекундной задержке на низкоприоритетном трафике
ip link set dev $DEV qlen 30

# изменяем значение mtu на исходящем устройстве. Понижение значения mtu уменьшит задержку, но
# и немного понизит пропускную способность из-за увеличения числа
# заголовков протоколов IP и TCP .
ip link set dev $DEV mtu 1000

# добавить корневую дисциплину HTB
tc qdisc add dev $DEV root handle 1: htb default 26

# добавить общее ограничение скорости по классу
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit

# добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
#                       Этим способом мы избегаем возможности "голодания" классов. Каждому классу
#                       разрешается занимать всю полосу пропускания, если другие классы не
#                       используются.
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 0
tc class add dev $DEV parent 1:1 classid 1:21 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 1
tc class add dev $DEV parent 1:1 classid 1:22 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 2
tc class add dev $DEV parent 1:1 classid 1:23 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 3
tc class add dev $DEV parent 1:1 classid 1:24 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 4
tc class add dev $DEV parent 1:1 classid 1:25 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 5
tc class add dev $DEV parent 1:1 classid 1:26 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 6

# подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
#                       SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
#                       внутри каждого класса.
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10

# направляем трафик в классы по fwmark - мы направляем трафик в классы, в соответствии со значением
#                                        fwmark установленном на пакете (мы будем устанавливать это
#                                        значение утилитой iptables позже). Обратите внимание, что
#                                        выше мы установили класс по умолчанию1:26, так что
#                                        немаркированные пакеты (или с неизвестными значениями fwmark
#                                        будут направлены в низкоприоритетный класс.
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 24 fw flowid 1:24
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 25 fw flowid 1:25
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 26 fw flowid 1:26

# добавить цепочку MYSHAPER-OUT в таблицу mangle - сейчас мы настроим таблицу,которую будем
#                                                  использовать для фильтрациии установки fwmark
iptables -t mangle -N MYSHAPER-OUT
iptables -t mangle -I POSTROUTING -o $DEV -j MYSHAPER-OUT

# маркируем пакеты с помощью fwmark - устанавливаем значения 20-26 в зависимости от
#                                     нужного класса. Высший приоритет - 20.
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 0:1024 -j MARK --set-mark 23
# Низкоприоритетный трафик
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 0:1024 -j MARK --set-mark 23
# ""
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 20 -j MARK --set-mark 26
# порт ftp-data, низкий приоритет
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 5190 -j MARK --set-mark 23
# интернет-пейджер aol
iptables -t mangle -A MYSHAPER-OUT -p icmp -j MARK --set-mark 20
# ICMP (ping) - высокий приоритет,

# будем удивлять друзей
iptables -t mangle -A MYSHAPER-OUT -p udp -j MARK --set-mark 21
# распознавание имен DNS (маленькие пакеты)
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport ssh -j MARK --set-mark 22
# secure shell
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport ssh -j MARK --set-mark 22
# secure shell
#http
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 80 -j MARK --set-mark 22
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 80 -j MARK --set-mark 22
#https
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 443 -j MARK --set-mark 22
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 443 -j MARK --set-mark 22

iptables -t mangle -A MYSHAPER-OUT -p tcp --dport telnet -j MARK --set-mark 22
# telnet (ew...)
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport telnet -j MARK --set-mark 22
# telnet (ew...)
iptables -t mangle -A MYSHAPER-OUT -p ipv6-crypt -j MARK --set-mark 24
# IPSec - мы не знаем полезную нагрузку, однако...
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport http -j MARK --set-mark 25
# локальный веб-сервер
iptables -t mangle -A MYSHAPER-OUT -p tcp -m length --length :64 -j MARK --set-mark 21 # маленькие пакеты

# скорее всего ACK-пакеты
iptables -t mangle -A MYSHAPER-OUT -m mark --mark 0 -j MARK --set-mark 26
# избыточно - смаркировать все неотмаркированые

# пакеты как 26 (низкий проиритет)

# Конец ограничения исходящего потока
#
####################################################

echo "Outbound shaping added to $DEV.  Rate: ${RATEUP}Kbit/sec."

# Раскомментируйте следующую строку, если хотите ограничить только исходящий трафик.
# exit

####################################################
#
# Ограничение входящего потока (ограничивает пропускную способность до RATEDN)

# убедимся, что модуль imq загружен

modprobe imq numdevs=1

ip link set imq0 up

# добавляем дисциплину - низкоприоритетный класс по умолчанию 1:21

tc qdisc add dev imq0 handle 1: root htb default 21

# добавляем общее ограничение скорости по классу
tc class add dev imq0 parent 1: classid 1:1 htb rate ${RATEDN}kbit

# добавляем подклассы - TCP traffic in 21, non TCP traffic in 20
#
tc class add dev imq0 parent 1:1 classid 1:20 htb rate $[$RATEDN/2]kbit ceil ${RATEDN}kbit prio 0
tc class add dev imq0 parent 1:1 classid 1:21 htb rate $[$RATEDN/2]kbit ceil ${RATEDN}kbit prio 1

# подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
#                       SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
#                       внутри каждого класса.
tc qdisc add dev imq0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev imq0 parent 1:21 handle 21: red limit 1000000 min 5000 max 100000 avpkt 1000 burst 50

# направляем трафик в классы по fwmark - мы направляем трафик в классы, в соответствии со значением
#                                        fwmark установленном на пакете (мы будем устанавливать это
#                                        значение утилитой iptables позже). Обратите внимание, что
#                                        выше мы установили класс по умолчанию1:26, так что
#                                        немаркированные пакеты (или с неизвестными значениями fwmark
#                                        будут направлены в низкоприоритетный класс.
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21

# добавить цепочку MYSHAPER-OUT в таблицу mangle - сейчас мы настроим таблицу,которую будем
#                                                  использовать для фильтрациии установки fwmark
iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I PREROUTING -i $DEV -j MYSHAPER-IN

# маркируем пакеты с помощью fwmark - устанавливаем значения 20-26 в зависимости от
#                                     нужного класса. Высший приоритет - 20.
iptables -t mangle -A MYSHAPER-IN -p ! tcp -j MARK --set-mark 20              #
 # Маркировать не-tcp пакеты как высокоприоритетные
iptables -t mangle -A MYSHAPER-IN -p tcp -m length --length :64 -j MARK --set-mark 20 # маленькие TCP-пакеты - вероято ACK
iptables -t mangle -A MYSHAPER-IN -p tcp --dport ssh -j MARK --set-mark 20    # secure shell
iptables -t mangle -A MYSHAPER-IN -p tcp --sport ssh -j MARK --set-mark 20    # secure shell
iptables -t mangle -A MYSHAPER-IN -p tcp --dport telnet -j MARK --set-mark 20 # telnet (ew...)
iptables -t mangle -A MYSHAPER-IN -p tcp --sport telnet -j MARK --set-mark 20 # telnet (ew...)
iptables -t mangle -A MYSHAPER-IN -m mark --mark 0 -j MARK --set-mark 21      # избыточно - маркировать немаркированные                                                               #
# пакеты как 26 (низкий приоритет)
#torrent
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 6881 -j MARK --set-mark 26
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 6881 -j MARK --set-mark 26

#http
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 80 -j MARK --set-mark 21
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 80 -j MARK --set-mark 21

# Наконец, пропустить все эти пакеты через imq0
iptables -t mangle -A MYSHAPER-IN -j IMQ

# Конец ограничения входящего потока
#
####################################################

echo "Inbound shaping added to $DEV.  Rate: ${RATEDN}Kbit/sec."


1. А где полосы для IMQ?
2. Лучше показывайте с опцией -s - тогда можно будет посмотреть попадают ли хоть какие пакеты в ваши классы.


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

tc -s class show dev imq0
class htb 1:1 root rate 410000bit ceil 410000bit burst 1599b cburst 1599b
 Sent 385906 bytes 602 pkt (dropped 0, overlimits 0 requeues 0)
 rate 96608bit 20pps backlog 0b 0p requeues 0
 lended: 129 borrowed: 0 giants: 0
 tokens: 351728 ctokens: 351728

class htb 1:20 parent 1:1 leaf 20: prio 0 rate 205000bit ceil 410000bit burst 1599b cburst 1599b
 Sent 15513 bytes 148 pkt (dropped 0, overlimits 0 requeues 0)
 rate 5264bit 6pps backlog 0b 0p requeues 0
 lended: 148 borrowed: 0 giants: 0
 tokens: 700512 ctokens: 351728

class htb 1:21 parent 1:1 leaf 21: prio 1 rate 205000bit ceil 410000bit burst 1599b cburst 1599b
 Sent 370393 bytes 454 pkt (dropped 0, overlimits 0 requeues 0)
 rate 91344bit 14pps backlog 0b 0p requeues 0
 lended: 325 borrowed: 129 giants: 0
 tokens: 936594 ctokens: 468296

class red 21:1 parent 21:

Похоже, низкоприоритетный трафик (26-класс) сюда не попал?
1. 480 при 512 это слишком оптимистично. Поставьте 410.

Поставил

2. Где именно находитя торрент, http и прочие потребители? по отношению к шейперу?

Торрент находится там же, где и шейпер. Но вроде как это уже не имеет значения, если мы пропускаем весь трафик через IMQ?
http может находится как там же где и шейпер, так и на еще 2-х компах в сети.

В данном скрипте входящий трафик ограничивается более чем странно. Разделяется всего на 2 типа - приоритетный и не очень. В приоритетный попали telnet и ssh, а все остальные во второй. Так что разницы между http и torrent быть не должно. Еще между ними есть полоса для ACK пакетов, но ее трудно считать забивающей канал... Исходящий тоже странно разбивается... почитайте комментарии. Вообщем, могу посоветовать перебрать маркировку на нужные вам порты самостоятельно. И поработать над входящим трафиком - сделать большее число полос. Тогда результат должен быть более заметен.

Для начала хотелось проверить, как вообще это будет работать, поэтому взял готовый, заведомо рабочий скрипт. Кроме того все прочие скрипты, найденные мной для примера были содраны с приведенного выше.
Спасибо сказали: