PDA

View Full Version : QoS


bash
22-03-2008, 04:20
Всем ку опять,
Я чтото не могу понять, а где в настройках QoS? Скажем я хочу сделать трафик для HTTP самым приоритетным, как это сделать?

leniviy
22-03-2008, 10:15
попробуйте это
http://wl500g.info/showthread.php?t=13472
если хватит терпения, скажете спасибо. Если что не понятно, я отвечу.

bash
22-03-2008, 13:04
Ага, вижу строчку... "shape-test filter DEV CLSPREF <u|d> <1|2|3> "prio и условие в формате tc filter" [DISC] [ROOTCLS]".

Странно, в прошивки от асуса приоритет трафика можно было настроить через WEB :(

leniviy
22-03-2008, 13:08
у нас есть страничка bandwidth management, вроде можно настраивать, но там никакого описания, как это работает.

bash
22-03-2008, 13:10
у нас есть страничка bandwidth management, вроде можно настраивать, но там никакого описания, как это работает.

На этой странице можно указывать толищну канала DL/UL для клиентов, но не приоритет. А вот у Асуса можно задавать именно приоритеты.

leniviy
22-03-2008, 13:35
тут люди говорят, что и у асуса не фонтан
http://www.wl500g.info/showthread.php?p=77116
Если не хочешь юзать shape-test, юзай wshaper.
на Олеге встроен скрипт wshaper. Но он нормально работает только если на роутере не стоят качалки. и его надо вешать на оба интерфейса

bash
22-03-2008, 13:53
Да там на картинке что-то не то, у меня другая картинка была. Там можно было пре-дефайнед конфигурацию изуть (4-ые типа трафика, игры, интернет, asus-ftp, vo-ip), ну или самому добавлять ip:port и выбирать приоритет 1-10.

Да что ваш скрипт, что wshaper - все равно они все tc юзают.

ЗЫ. А зачем общий канал шейпить вообще? Т.е. если у меня на входе 2 мегабита, зачем нужно прописывать в шейпере что мол хочу трафик 2048kbit - 1-5%(по разному рекомендуют)?? Это как то способствует оптимизации прохождения трафика?

leniviy
22-03-2008, 14:18
я тоже смутно помню, когда роутер был новый с родной прошивкой, там можно было приоритеты выставлять. правда я тогда не настраивал и не знаю, работает это чудо или нет, и через что оно работает.

Это как то способствует оптимизации прохождения трафика?
способствует, однако 1-5 % - это не правильно.
В каждом отдельном случае надо замерять самому. Например у меня, чтобы качать 550кбит, пришлось выставить 650кбит. Вероятно дело в слабости процессора или неточности таймеров.
tc filter add dev $DEV parent ffff: protocol ip prio 20 u32 match ip src \
0.0.0.0/0 police index 2 rate 650kbit buffer 20k drop flowid :2

leniviy
22-03-2008, 14:22
Да что ваш скрипт, что wshaper - все равно они все tc юзают.
Ностальгия по родной прошивке ни к чему не приведет. Лучше скажите, что вам не позволяют сделать данные скрипты?

bash
22-03-2008, 14:31
И все же, я не понимаю зачем общий канал нужно указывать. Можно объяснить как это способствует?

ЗЫ. Я не настольгирую. Я пока вообще не понял в чем плюсы олеговской прошивки, потому изучаю. В родной от асуса даже юзеров и папки для шаринга можно было через веб-ставить )) А про скрипт... ну я пока читаю доки как это вообще все работает )

leniviy
22-03-2008, 14:57
"########## downlink #############
# slow downloads down to somewhat less than the real speed to prevent
# queuing at our ISP. Tune to see how high you can set it.
# ISPs tend to have *huge* queues to make sure big downloads are fast
у провайдеров длинные очереди пакетов, чтобы обеспечить максимальную скорость закачки. это убивает интерактивность, так как входящий пакет должен пройти всю очередь, прежде чем его перешлют к нам.
если мы ограничим общий канал, нам начнут слать меньше пакетов, и очередь провайдера всегда будет пуста.

leniviy
22-03-2008, 15:03
основной плюс такой: можно поставить на роутер кучу софта. ну еще всякая фигня типа более широкой поддержки внешних винчестеров, поддержка модемов, блютусоф и оперативность исправлений.

leniviy
22-03-2008, 15:06
В родной от асуса даже юзеров и папки для шаринга можно было через веб-ставить это вроде уже появилось.
http://wl500g.info/showpost.php?p=88198&postcount=9

bash
22-03-2008, 15:06
у провайдеров длинные очереди пакетов, чтобы обеспечить максимальную скорость закачки. это убивает интерактивность, так как входящий пакет должен пройти всю очередь, прежде чем его перешлют к нам.
если мы ограничим общий канал, нам начнут слать меньше пакетов, и очередь провайдера всегда будет пуста.

Ага, ясно, цель всего этого сделать узким местом не роутер провайдера, а наш роутер, тем самым мы получаем возможность контролировать очереди и ставить приоритеты =)

bash
22-03-2008, 15:56
основной плюс такой: можно поставить на роутер кучу софта. ну еще всякая фигня типа более широкой поддержки внешних винчестеров, поддержка модемов, блютусоф и оперативность исправлений.

Ага, я так примерно и подозревал, что основная функциональность такая же.

bash
22-03-2008, 15:57
это вроде уже появилось.
http://wl500g.info/showpost.php?p=88198&postcount=9

Не совсем, у Олега нужно руками вводить название партиций. А у асуса, можно выбирать прямо в вебе, а так же в вебе создавать пользователей и права доступа.

bash
23-03-2008, 02:47
Забавно, но все эти WonderShaper'ы и их клоны по сути только UPLOAD'ом занимаются, и ничего с DownLoad'ом (или я что-то не понял, время то позднее). Почему что-то типа WonderShaper'а не настроить для br0 интерфейса на трафик от WAN'а, что бы развесить приоритеты/шейпинг на входящий трафик?

piezomotor
23-03-2008, 03:02
Забавно, но все эти WonderShaper'ы и их клоны по сути только UPLOAD'ом занимаются, и ничего с DownLoad'ом

Да я с полностью согласен с этим!

Есть одно средсто но не ясно как поставить...

http://wl500g.info/showthread.php?t=13527&highlight=trafitizer

Проблема с libpcap...

bash
23-03-2008, 03:07
Ууу... libpcap... Это звездец роутеру будет при больших нагрузках =)
Помойму эффективнее будет настроить wandershaper на br0 для трафика с WAN'а ))

leniviy
23-03-2008, 09:07
trafitizer этим не занимается. Он совсем для других целей: распределять трафик между компами.
да, если на роутере не стоит качалка, то можно повесить wshaper на br0

если на роутере есть или будет качалка, то ставьте shape-test. он умеет контролировать download. это не клон whaper'а

bash
23-03-2008, 15:40
trafitizer этим не занимается. Он совсем для других целей: распределять трафик между компами.
да, если на роутере не стоит качалка, то можно повесить wshaper на br0

если на роутере есть или будет качалка, то ставьте shape-test. он умеет контролировать download. это не клон whaper'а

Почему вы решили, что trafitizer этим не занимается? Если мои глаза меня не обманывают, то на странице проекта написано: "Traffic Prioritizer is designed to run on a linux router and prioritize users' traffic by their bandwidth consumption. It is aimed to shape the "bandwidth greedy" clients (p2p,youtube,IPTV) so that the ones who are just browsing do not lack bandwidth.". Т.е. "Его основная цель шейпить "жадных до трафика" клиентов (p2p, youtube, IPTV) так, что бы те кто просто броузят не исптывали нехваток трафика".

Я не понимаю, как связано наличие качалки на роутере с шейперами. Объясните пожалуйста подробнее.

ЗЫ. shape-test все что он умеет с download - это указать пропускную (police) способность входящего канала и все. Никакой приоритезации трафика (QoS) я не увидел.
ЗЫЫ. wshaper так просто на br0 вешать нельзя, для начала его нужно научить понимать, что еще есть трафик LAN <=> LAN, который трогать не нужно, ну или хотя бы не шейпить до канала WAN <=> LAN =)

Oleg
23-03-2008, 15:42
Он и не будет шейпить LAN-LAN, т.к. его не видит.

bash
23-03-2008, 15:53
Он и не будет шейпить LAN-LAN, т.к. его не видит.

Да, наверное я ошибся, давно это было. Раньше вроде бриджевый трафик светился в iptables и т.д. Ну тогда LAN (en1) <=> LAN (eth2), да, у нас будет ходить без проблем.

Ну тогда осталось научить понимать wshaper, что с WAN валится трафик и из интернета и из локальной сети :-)

leniviy
23-03-2008, 21:55
Я не понимаю, как связано наличие качалки на роутере с шейперами. Объясните пожалуйста подробнее.
трафик до качалки на роутере не идет через br0, поэтому его нельзя шейпить.

ЗЫ. shape-test все что он умеет с download - это указать пропускную (police) способность входящего канала и все.
плохо смотрели. там ACK пакеты идут в свой класс, и уже в нем свой шейпинг. ACK пакеты низкоприоритетных трафиков задерживаются, и так шейпится download. это работает.

bash
23-03-2008, 22:06
трафик до качалки на роутере не идет через br0, поэтому его нельзя шейпить.
Ах, вы про это... Да согласен. Вешать нужно и на eth1 и на br0.


плохо смотрели. там ACK пакеты идут в свой класс, и уже в нем свой шейпинг. ACK пакеты низкоприоритетных трафиков задерживаются, и так шейпится download. это работает.
Это не поможет, так как во время больших закачек у меня и так uplink свободный (канал симетричный) и "пропихиванием" ACK пакетов дело не улучшается.

leniviy
23-03-2008, 23:20
я устал объяснять. почему мне никто не верит?

bash
23-03-2008, 23:28
я устал объяснять. почему мне никто не верит?

Ой, извини, если я как-то не так себя повел. Может я просто что-то пока еще не понял. И почему не верю? На предыдущий твой тезис (про качалку на роутере) я согласился. Тут вы конечно было правы.

А теперь давайте я вам скажу, как я вижу ситуацию. Если идет большая скачка, то у меня это выглядит обычно так - DownLink 100% загружен, UpLink - 10%. Таким образом на UpLink очереди пустые, потому что канал не загружен на 100%. Отсюда я делаю вывод, что ваш скрипт, который позволит повысить приоритеты ACK пакетов для важного трафика мне не сильно поможет. Вот...

leniviy
24-03-2008, 08:53
например у вас аплинк 1 мбит , даунлинк 1 мбит
предполагаем, чтобы даунлодить на скорости 1024 кбит, надо аплодить ACK пакеты на скорости 1024 кбит / 70 = 15 кбит
создаем класс для ACK пакетов с скоростью 15 кбит ,
а внутри создаем дочерние классы

приоритет скорость потолок
1 15 кбит 15 кбит
2 4.5 кбит 15 кбит
3 1.5 кбит 15 кбит

ставлю торренту приоритет 3 , а http приоритет 1
когда никто не лазает по сайтам, скорость торрента будет примерно 1024 кбит ( чуть ниже ) , когда лазаешь по страницам , скорость торрента будет проседать, а если включить закачку большого файла по http , то торрент просядет до 102 кбит (+-)

leniviy
24-03-2008, 09:02
тут надо оговориться, что скорость 15 кбит - это когда много tcp коннектов, и входящие пакеты маленькие. Если tcp коннектов мало, то чтобы скачивать на скорости 1024 кбит , надо аплодить всего 8-10 кбит, тогда скорости по приоритетам немного изменятся, но это не важно, так как 5-10 закачек не забьют канал, как зибивают его 100 закачек

ABATAPA
24-03-2008, 10:46
например у вас аплинк 1 мбит , даунлинк 1 мбит
предполагаем, чтобы даунлодить на скорости 1024 кбит, надо аплодить ACK пакеты на скорости 1024 кбит / 70 = 15 кбит


Только вот Ваш скрипт "заточен" под некие условия, если изменить скорости, например, на 128k, то в dmesg ядро будет ругаться на малые размеры очередей для дисциплин.

leniviy
24-03-2008, 11:11
что поделаешь

leniviy
24-03-2008, 11:14
Только вот Ваш скрипт "заточен" под некие условия, если изменить скорости, например, на 128k, то в dmesg ядро будет ругаться на малые размеры очередей для дисциплин.

есть предложения?

bash
24-03-2008, 17:40
тут надо оговориться, что скорость 15 кбит - это когда много tcp коннектов, и входящие пакеты маленькие. Если tcp коннектов мало, то чтобы скачивать на скорости 1024 кбит , надо аплодить всего 8-10 кбит, тогда скорости по приоритетам немного изменятся, но это не важно, так как 5-10 закачек не забьют канал, как зибивают его 100 закачек

Вот видите, теперь я с вами согласен, потому, что в данной ситуации да, uplink стал опять узким местом и потому мы можем менять приоритетность трафика. Однако, очень смущает цифра 15кбит, и 8-10кбит. Это видимо какие-то экспериментальные данные? Помойму "надежнее" все же будет шейпить downlink через br0. Вернее даже не "надежнее", а правильнее.

piezomotor
24-03-2008, 18:43
например у вас аплинк 1 мбит , даунлинк 1 мбит
предполагаем, чтобы даунлодить на скорости 1024 кбит, надо аплодить ACK пакеты на скорости 1024 кбит / 70 = 15 кбит
создаем класс для ACK пакетов с скоростью 15 кбит ,
а внутри создаем дочерние классы

приоритет скорость потолок
1 15 кбит 15 кбит
2 4.5 кбит 15 кбит
3 1.5 кбит 15 кбит

ставлю торренту приоритет 3 , а http приоритет 1
когда никто не лазает по сайтам, скорость торрента будет примерно 1024 кбит ( чуть ниже ) , когда лазаешь по страницам , скорость торрента будет проседать, а если включить закачку большого файла по http , то торрент просядет до 102 кбит (+-)

А у меня проблема такая.

Настроил QoS- по (http://wiki.wl500g.info/index.php/PackageWondershaper)

и http://www.wl500g.info/showpost.php?p=76957&postcount=125

Но когда запускаю Wondershaper у меня весь трафик валит через class htb 1:20 а class htb 1:10 медленно растет, class htb 1:30 почемуто всегда на нуле.

Потом если начинает качать torrent client на одном компе со временем весь этот трафик валит через class htb 1:10 и это садит мой VOIP телефон.

Если перезапускаю Wondershaper то все в порядке опять пока трафик class htb 1:10 не вырастает...

Вынужден перезагружать Wondershaper кроном каждый час.

Может кто подскажет как побороть эту проблему?

leniviy
24-03-2008, 19:10
А у меня проблема такая.
параметры запуска wshaper'а, плиз

piezomotor
24-03-2008, 19:19
параметры запуска wshaper'а, плиз

вот они...

DOWNLINK=5000
UPLINK=400
DEV=vlan1

leniviy
24-03-2008, 19:29
ну во-первых 1:30 всегда будет на нуле, так как не заданы фильтры.
как вы запускаете?
wshaper start br0 5000 400
?
объяснить, что трафик торрента сначачала идет в 1:20, а потом в 1:30 не могу

bash
24-03-2008, 19:32
ну во-первых 1:30 всегда будет на нуле, так как не заданы фильтры

почему? htb тем и хорош, что когда другим классам не хватает ресурсов, они начинают использовать свободный пропорционально выделеным скоростям.

leniviy
24-03-2008, 19:40
ну да, 1:10 и 1:20 будут забирать трафик у вечно пустого 1:30

sonice
24-03-2008, 20:45
ну во-первых 1:30 всегда будет на нуле, так как не заданы фильтры.
как вы запускаете?
wshaper start br0 5000 400
?
объяснить, что трафик торрента сначачала идет в 1:20, а потом в 1:30 не могу

Вот скрипт qos.sh запускаю /opt/etc/qos.sh start поскольку vlan1, 5000, 400 уже прописаны там...

Я пробовал запускать с br0, и сразу мерять - internet speed test падает дико....

А мне надо чтоб он урезал torrent (transmission) до 1:30 а VOIPб Port 80 и3389 до 1:10 а все остальное до 1:20... Как сделать не знаю...

В начале 1:10 -Sent 0 bytes 0 pkts

./qos.sh status
qdisc sfq 30: quantum 1518b perturb 10sec
statistics truncated
qdisc sfq 20: quantum 1518b perturb 10sec
statistics truncated
qdisc sfq 10: quantum 1518b perturb 10sec
statistics truncated
qdisc htb 1: r2q 10 default 20 direct_packets_stat 0
statistics truncated
class htb 1:1 root rate 700Kbit ceil 700Kbit burst 6Kb cburst 2495b
Sent 42 bytes 1 pkts (dropped 0, overlimits 0)
rate 1bps
lended: 0 borrowed: 0 giants: 0
tokens: 55808 ctokens: 22455

class htb 1:10 parent 1:1 leaf 10: prio 1 rate 240Kbit ceil 600Kbit burst 6Kb cburst 2367b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
lended: 0 borrowed: 0 giants: 0
tokens: 163840 ctokens: 25258

class htb 1:20 parent 1:1 leaf 20: prio 2 rate 240Kbit ceil 600Kbit burst 6Kb cburst 2367b
Sent 42 bytes 1 pkts (dropped 0, overlimits 0)
rate 1bps
lended: 1 borrowed: 0 giants: 0
tokens: 162774 ctokens: 24833

class htb 1:30 parent 1:1 leaf 30: prio 3 rate 120Kbit ceil 480Kbit burst 6Kb cburst 2213b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
lended: 0 borrowed: 0 giants: 0
tokens: 327680 ctokens: 29519
qdisc sfq 30: quantum 1518b perturb 10sec
statistics truncated
qdisc sfq 20: quantum 1518b perturb 10sec
statistics truncated
qdisc sfq 10: quantum 1518b perturb 10sec
statistics truncated
qdisc htb 1: r2q 10 default 20 direct_packets_stat 0
statistics truncated
class htb 1:1 root rate 700Kbit ceil 700Kbit burst 6Kb cburst 2495b
Sent 14314 bytes 91 pkts (dropped 0, overlimits 0)
rate 91bps
lended: 0 borrowed: 0 giants: 0
tokens: 55735 ctokens: 22382

class htb 1:10 parent 1:1 leaf 10: prio 1 rate 240Kbit ceil 600Kbit burst 6Kb cburst 2367b
Sent 3579 bytes 7 pkts (dropped 0, overlimits 0)
rate 15bps
lended: 7 borrowed: 0 giants: 0
tokens: 151894 ctokens: 20480


потом Sent 35832 bytes 71 pkts ''ползет'' постепенно вверх-

./qos.sh status
qdisc sfq 30: quantum 1518b perturb 10sec
statistics truncated
qdisc sfq 20: quantum 1518b perturb 10sec
statistics truncated
qdisc sfq 10: quantum 1518b perturb 10sec
statistics truncated
qdisc htb 1: r2q 10 default 20 direct_packets_stat 0
statistics truncated
class htb 1:1 root rate 700Kbit ceil 700Kbit burst 6Kb cburst 2495b
Sent 2747682 bytes 41998 pkts (dropped 0, overlimits 0)
rate 5608bps 102pps
lended: 53 borrowed: 0 giants: 0
tokens: 55369 ctokens: 22016

class htb 1:10 parent 1:1 leaf 10: prio 1 rate 240Kbit ceil 600Kbit burst 6Kb cburst 2367b
Sent 35832 bytes 71 pkts (dropped 0, overlimits 0)
rate 15bps
lended: 71 borrowed: 0 giants: 0
tokens: 151894 ctokens: 20480

class htb 1:20 parent 1:1 leaf 20: prio 2 rate 240Kbit ceil 600Kbit burst 6Kb cburst 2367b
Sent 2711850 bytes 41927 pkts (dropped 0, overlimits 0)
rate 5286bps 96pps
lended: 41874 borrowed: 53 giants: 0
tokens: 161494 ctokens: 24321

class htb 1:30 parent 1:1 leaf 30: prio 3 rate 120Kbit ceil 480Kbit burst 6Kb cburst 2213b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
lended: 0 borrowed: 0 giants: 0
tokens: 327680 ctokens: 29519


мой Qos.sh:

#!/bin/sh
# Wonder Shaper, last modified by Robert Koch (aka akbor)
#
# Set the following values to somewhat less than your actual download
# and uplink speed. In kilobits. Also set the device that is to be shaped.

DOWNLINK=5000
UPLINK=700
DEV=vlan1

# low priority OUTGOING traffic - you can leave this blank if you want
# low priority source netmasks
NOPRIOHOSTSRC="$5"

# low priority destination netmasks
NOPRIOHOSTDST="$6"

# low priority source ports
NOPRIOPORTSRC="$7"

# low priority destination ports
NOPRIOPORTDST="$8"

if [ "$1" = "status" ]
then
tc -s qdisc ls dev $DEV
tc -s class ls dev $DEV
exit
fi

# clean existing down- and uplink qdiscs, hide errors
tc qdisc del dev $DEV root 2> /dev/null > /dev/null
tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null

if [ "$1" = "stop" ]
then
exit
fi

########## uplink ##########

# install root HTB, point default traffic to 1:20:
tc qdisc add dev $DEV root handle 1: htb default 20

# shape everything at $UPLINK speed - this prevents huge queues in your
# DSL modem which destroy latency:
tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit \
ceil ${UPLINK}kbit burst 6k

# high prio class 1:10 - gets 40 to 100% traffic and highest priority:
# tc class add dev $DEV parent 1:1 classid 1:10 htb rate $((4*$UPLINK/10))kbit \
# ceil ${UPLINK}kbit burst 6k prio 1

tc class add dev $DEV parent 1:1 classid 1:10 htb rate 240kbit \
ceil 600kbit burst 6K prio 1

# bulk & default class 1:20 - gets 40 to 100% traffic and lower priority:
# tc class add dev $DEV parent 1:1 classid 1:20 htb rate $((4*$UPLINK/10))kbit \
# ceil ${UPLINK}kbit burst 6k prio 2

tc class add dev $DEV parent 1:1 classid 1:20 htb rate 240kbit \
ceil 600kbit burst 6k prio 2

# lowest priority class 1:30 - gets 20 to 80% traffic and lowest priority:
# tc class add dev $DEV parent 1:1 classid 1:30 htb rate $((2*$UPLINK/10))kbit \
# ceil $((8*$UPLINK/10))kbit burst 6k prio 3

tc class add dev $DEV parent 1:1 classid 1:30 htb rate 120kbit \
ceil 480kbit burst 6k prio 3

# all get Stochastic Fairness:
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10


# VOIP traffic always get first in line
tc filter add dev ${DEV} parent 1:0 prio 1 protocol ip u32 \
match ip tos 0x68 0xff \
match ip protocol 0x11 0xff \
flowid 1:10

tc filter add dev ${DEV} parent 1:0 prio 1 protocol ip u32 \
match ip tos 0xb8 0xff \
match ip protocol 0x11 0xff \
flowid 1:10

# Browsing traffic to and from port 80 get high priority
tc filter add dev $DEV parent 1: protocol ip prio 13 u32 \
match ip sport 80 0xffff \
flowid 1:10

# SSH traffic to and from port 22 get high priority
tc filter add dev $DEV parent 1: protocol ip prio 13 u32 \
match ip sport 22 0xffff \
flowid 1:10

# OPENVPN traffic to and from port 3389 get high priority
tc filter add dev $DEV parent 1: protocol ip prio 13 u32 \
match ip sport 3389 0xffff \
flowid 1:10

# All non-VoIP traffic on the second band
tc filter add dev ${DEV} parent 1:0 protocol ip prio 3 u32 \
match ip src 0.0.0.0/0 \
flowid 1:20

# TOS Minimum Delay
tc filter add dev ${DEV} parent 1:0 protocol ip prio 10 u32 \
match ip tos 0x10 0xff \
flowid 1:10

# ICMP (ip protocol 1) in the interactive class
tc filter add dev ${DEV} parent 1: protocol ip prio 11 u32 \
match ip protocol 1 0xff flowid 1:10

# To speed up downloads while an upload is going on, put ACK packets in
# the interactive class:
tc filter add dev ${DEV} parent 1: protocol ip prio 12 u32 \
match ip protocol 6 0xff \
match u8 0x05 0x0f at 0 \
match u16 0x0000 0xffc0 at 2 \
match u8 0x10 0xff at 33 \
flowid 1:10

# some traffic however suffers a worse fate

# Browsing traffic to and from port 80 get high priority
tc filter add dev $DEV parent 1: protocol ip prio 1 u32 \
match ip sport 80 0xffff \
flowid 1:10

# SSH traffic to and from port 22 get high priority
tc filter add dev $DEV parent 1: protocol ip prio 2 u32 \
match ip sport 22 0xffff \
flowid 1:10

# Browsing traffic to and from port 3389 get high priority
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip sport 3389 0xffff \
flowid 1:10


for a in $NOPRIOPORTDST
do
tc filter add dev $DEV parent 1: protocol ip prio 30 u32 \
match ip protocol 0x6 0xff \
match ip dport $a 0xffff \
flowid 1:30
done

for a in $NOPRIOPORTSRC
do
tc filter add dev $DEV parent 1: protocol ip prio 31 u32 \
match ip protocol 0x6 0xff \
match ip sport $a 0xffff \
flowid 1:30
done

for a in $NOPRIOHOSTSRC
do
tc filter add dev $DEV parent 1: protocol ip prio 32 u32 \
match ip protocol 0x6 0xff \
match ip src $a \
flowid 1:30
done

for a in $NOPRIOHOSTDST
do
tc filter add dev $DEV parent 1: protocol ip prio 33 u32 \
match ip protocol 0x6 0xff \
match ip dst $a \
flowid 1:30
done

# rest is 'non-interactive' ie 'bulk' and ends up in the default queue
# tc filter add dev ${DEV} parent 1: protocol ip prio 20 u32 \
# match ip src 192.168.1.1/0 \
# flowid 1:30

########## dowlink #############
# slow downloads down to somewhat less than the real speed to prevent
# queuing at our ISP. Tune to see how high you can set it.
# ISPs tend to have *huge* queues to make sure big downloads are fast
#
# attach ingress policer:

if [ "$1" = "prio" ]
then

tc qdisc add dev $DEV handle ffff: ingress

# filter *everything* to it (0.0.0.0/0), drop everything that's
# coming in too fast:

tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 \
match ip protocol 0x6 0xff police rate ${DOWNLINK}kbit burst 10k drop \
flowid :1

fi

leniviy
24-03-2008, 20:55
падает дико потому что надо выставлять больше 5000, потому что ingress qdisc неточная на burst < 50k.

leniviy
24-03-2008, 20:57
а на br0 надо менять местами. downlink и uplink

sonice
24-03-2008, 20:57
падает дико потому что надо выставлять больше 5000

А у меня зто померяный максимум - PC- cable modem без роутера...

leniviy
24-03-2008, 21:08
в wshaper ясно написано: "Tune to see how high you can set it" !

ABATAPA
25-03-2008, 06:27
есть предложения?
http://www.opennet.ru/opennews/art.shtml?num=14927

leniviy
25-03-2008, 06:44
http://www.opennet.ru/opennews/art.shtml?num=14927

Несправедливость в современных механизмах контроля перегрузки TCP
"Fixing the unfairness of TCP congestion control" - размышления на тему несправедливости в современных механизмах контроля перегрузки TCP. Например, P2P клиент может открыть 100 TCP потоков и свести на нет механизм управления перегрузкой, который рассчитан на единичные сессии.

че-то не то открылось

leniviy
25-03-2008, 06:46
ксатати у меня ругается на Mar 24 20:48:06 kernel: HTB: quantum of class 10021 is big. Consider r2q change.
Mar 24 20:48:06 kernel: HTB: quantum of class 10023 is small. Consider r2q change.
Mar 24 20:48:06 kernel: HTB: quantum of class 1002F is small. Consider r2q change.
Mar 24 20:48:06 kernel: HTB: quantum of class 1002E is small. Consider r2q change.
Mar 24 20:48:06 kernel: HTB: quantum of class 1002D is small. Consider r2q change.
Mar 24 20:48:06 kernel: HTB: quantum of class 1002C is small. Consider r2q change.
Mar 24 20:48:07 kernel: HTB: quantum of class 10031 is big. Consider r2q change.
Mar 24 20:48:07 kernel: HTB: quantum of class 10033 is small. Consider r2q change.
Mar 24 20:48:07 kernel: HTB: quantum of class 1003F is small. Consider r2q change.
Mar 24 20:48:07 kernel: HTB: quantum of class 1003E is small. Consider r2q change.
Mar 24 20:48:08 kernel: HTB: quantum of class 1003D is small. Consider r2q change.
Mar 24 20:48:08 kernel: HTB: quantum of class 1003C is small. Consider r2q change.
одинаково, что на 550 кбит, что на 128 кбит

piezomotor
25-03-2008, 14:20
Ясно что Wondershaper работает коряво.

Я не возьму в толк почему Олег не внедрил Layer 7 QoS - схему которая железно работает с XWRT, DDWRT, OpenVRT?

http://dolly.czi.cz/coyote/packages/qosl7.asp

Kernel compatibility-

http://l7-filter.sourceforge.net/kernelcompat

Что надо сделать чтобы это заработало у Олега?

Serge_K
25-03-2008, 14:35
вот они...

DOWNLINK=5000
UPLINK=400
DEV=vlan1

А вы его из post-firewall запускайте строкой:

/usr/local/sbin/wshaper start "$1" 5000 400

piezomotor
25-03-2008, 14:43
А вы его из post-firewall запускайте строкой:

/usr/local/sbin/wshaper start "$1" 5000 400

А в чем разница? Вроде это не работало-

http://www.wl500g.info/showpost.php?p=5096&postcount=13

Serge_K
25-03-2008, 15:08
А в чем разница? Вроде это не работало-

http://www.wl500g.info/showpost.php?p=5096&postcount=13
Все замечательно работает и автоматом вешается на нужный интерфейс.

bash
25-03-2008, 18:23
Ясно что Wondershaper работает коряво.

Я не возьму в толк почему Олег не внедрил Layer 7 QoS - схему которая железно работает с XWRT, DDWRT, OpenVRT?

http://dolly.czi.cz/coyote/packages/qosl7.asp

Kernel compatibility-

http://l7-filter.sourceforge.net/kernelcompat

Что надо сделать чтобы это заработало у Олега?

Хм, смущает, что "it does regular expression matching on the application layer data", это означает что проц должно это грузить порядочно. В любом случае, этот пакет не даст вам чего-то большего, чем уже есть, разве-что вам будет более удобно конфигурировать ваш роутер.

piezomotor
25-03-2008, 18:28
Все замечательно работает и автоматом вешается на нужный интерфейс.

А как в таком случае увидеть staus page?

bash
25-03-2008, 18:49
А как в таком случае увидеть staus page?

Да нету никакой разницы откуда запускать этот скрипт. Статус увидеть можно так же, wshaper status eth1

piezomotor
25-03-2008, 19:19
Хм, смущает, что "it does regular expression matching on the application layer data", это означает что проц должно это грузить порядочно. В любом случае, этот пакет не даст вам чего-то большего, чем уже есть, разве-что вам будет более удобно конфигурировать ваш роутер.

Согласен, и не толко мне...

Serge_K
25-03-2008, 20:34
А как в таком случае увидеть staus page?

wshaper status ppp0

А что смущает? Повесится он автоматом на ppp0 в стандартном случае

sonice
25-03-2008, 20:49
Все замечательно работает и автоматом вешается на нужный интерфейс.

Сделал mv /opt/etc/qos.sh /usr/local/sbin/wshaper , /usr/local/sbin/wshaper start "$1" 6000 1000

Потом попробовал та же петрушка-class htb 1:10 "растет" постепенно.
class htb 1:10 parent 1:1 leaf 10: prio 1 rate 240Kbit ceil 600Kbit burst 6Kb cburst 2367b
Sent 414835 bytes 1927 pkts (dropped 0, overlimits 0)
class htb 1:30 parent- на нуле....
class htb 1:30 parent 1:1 leaf 30: prio 3 rate 120Kbit ceil 480Kbit burst 6Kb cburst 2213b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
lended: 0 borrowed: 0 giants: 0
tokens: 327680 ctokens: 29519


Померял скорость без wshaper - upload 900 download 5000

и потом c wshaper upload 417 download 3400...

leniviy
25-03-2008, 20:55
то, что побольше - wshaper из прошивки. то, что поменьше - shape-test.
во вложении shape-test в нормальную величину

Serge_K
25-03-2008, 20:59
Ну не знаю.. У меня wshaper заточен под SIP и абсолютно успешно со своей задачей справляется. И ничего не "растет":)

sonice
25-03-2008, 21:41
Ну не знаю.. У меня wshaper заточен под SIP и абсолютно успешно со своей задачей справляется. И ничего не "растет":)

А слабо скрипт выложить?

Serge_K
25-03-2008, 21:51
А слабо скрипт выложить?
Так стандартный от Akbor.:) Только оставил там только TOS, ибо моему SIP-девайсу другого и не надо.:)

sonice
25-03-2008, 21:54
то, что побольше - wshaper из прошивки. то, что поменьше - shape-test.
во вложении shape-test в нормальную величину

Спасибо, но как его "заточить'' под WL500gP?

У меня выдает-


./[Content]
./[Content]: ./[Content]: 2: Syntax error: "&" unexpected

leniviy
26-03-2008, 08:29
Спасибо, но как его "заточить'' под WL500gP?

У меня выдает-


./[Content]
./[Content]: ./[Content]: 2: Syntax error: "&" unexpected

что вы пытаетесь сделать? ссылка на скрипт во втором посте этой темы

masters
29-03-2008, 09:48
Помогите советом!!!

Нужно шейпить траффик, идущий в интернет - через PPPoE, подключен к WAN(скорости заданы явно), но при этом, чтобы не резался канал к роутеру!
Что для этого лучше поставить? Хочется чтобы качалка тоже работала!

Просто стандартый шейпер (в Вебе) режет скорость на LAN и только на прием :(

king2
29-03-2008, 18:50
А объясните дураку, плиз, как оно работает для траффика VoIP?

На исходящем все понятно - ограничиваем весь канал на "чуть меньше чем оно есть на самом деле", чтобы оно не скапливалось в узком месте (я так понимаю, что если VPN-соединение и DSL-модема просто нету - то тотальное ограничение не нужно?), далее делим это дело на три трубки, в первую пихаем исходящий VOIP (по портам или ToS - не важно), в третью - всякую фигню типа bittorrent, во второй остается все остальное (я еще http туда с prio 2 добавил).

Итого, если у нас есть пакеты, классифицируемые как VOIP - пихаем их в первую очередь.

Но ведь к нам тоже идет поток "оттуда". Как его шейпить? Во всех wshaper я нашел тока зажатие входящего канала на DOWNLINK.

Вопросы:

1. Правильно ли я понимаю, что если нет DSL-модема, то ограничение в классе 1:1 можно снять? Можно ли убрать весь класс, переставив паренты для 1:10, 1:20 и 1:30 на 1:0?

2. Для чего делается шейпинг DOWNLINK?

3. Как он реально работает? Посылаем ли мы "отлупы" исходящей стороне, если пакет все равно к нам пролез?

4. Почему нельзя в случае наличия входящих пакетов VOIP ограничивать входящий траффик для остального?

5. Как правильно классифицировать входящий VOIP траффик в случае, если у него нет ToS? Только по портам? Какой критерий можно считать подходящим в общем случае сферического IP-телефона в вакууме?

Спасибо за ответы, если они будут :)

leniviy
30-03-2008, 09:46
На исходящем все понятно - ограничиваем весь канал на "чуть меньше чем оно есть на самом деле"
нет, это на входящем. а на исходящем не важно, где дропаются пакеты, у нас или у провайдера.

я так понимаю, что если VPN-соединение и DSL-модема просто нету - то тотальное ограничение не нужно?
почему? Параметры тарифа скажите.

Но ведь к нам тоже идет поток "оттуда". Как его шейпить? Во всех wshaper я нашел тока зажатие входящего канала на DOWNLINK.
да, но в начале темы написано:
если на роутере не стоит качалка, то можно повесить wshaper на br0

если на роутере есть или будет качалка, то ставьте shape-test. он умеет контролировать download. это не клон whaper'а

Можно ли убрать весь класс, переставив паренты для 1:10, 1:20 и 1:30 на 1:0?
тогда не будет работать динамическое распределение. это значит, что для bittorrent выставлена скорость 1/10 от общей, то она так и останется, даже если другие классы не заняты

leniviy
30-03-2008, 09:56
2. Для чего делается шейпинг DOWNLINK? как это для чего? :eek:
если вы говорите про ingress в wshaper : Ага, ясно, цель всего этого сделать узким местом не роутер провайдера, а наш роутер, тем самым мы получаем возможность контролировать очереди и ставить приоритеты =)

3. Как он реально работает? Посылаем ли мы "отлупы" исходящей стороне, если пакет все равно к нам пролез?
независимо от того, wshaper или shape-test, отправитель не получает уведомления, что пакет дошел, и снижает скорость отправки. Но shape-test лучше, хоть режте.

4. Почему нельзя в случае наличия входящих пакетов VOIP ограничивать входящий траффик для остального? можо

5. Как правильно классифицировать входящий VOIP траффик в случае, если у него нет ToS? Только по портам?
да. еще можно считать весь UDP высокоприоритетным.

leniviy
30-03-2008, 10:05
king2, скажите ваш город, провайдера, тариф и есть ли локалка провайдера

king2
30-03-2008, 16:35
нет, это на входящем. а на исходящем не важно, где дропаются пакеты, у нас или у провайдера.

Как это не важно? Если мы не зашейпим у себя исходящий поток, то оно ввалится по 100 мегабит в DSL-модем, и уже там будет кучковаться. Значит, когда мы что-то изменим в исходящем потоке у себя на асусе, реально оно уйдет в узкий канал только после того, как пройдет вся та куча, которая уже накопилась в DSL-модеме. И получается, что время реакции становится сильно больше, плюс модем тоже начинает регулировать поток (давать отлупы на то что не лезет в канал). То есть полный дестрой и разруха..

Стало быть, мы должны ограничить поток на асусе на 95-99% от того что есть в самом узком месте исходящего потока, чтобы пакет через DSL пролетал гарантированно быстро. А вот у провайдера исходящий поток, как правило, не дропается, по крайней мере на первой паре хопов, у них каналы широкие :)

А вот зато если интерфейс терминируется УЖЕ у провайдера (l2tp/pptp/pppoe) - то вроде бы ограничивать и не надо. Другое дело, может ядро должно знать заранее, на что ему рассчитывать, чтобы упираться в заранее заданный цифрами потолок, а не в ситуацию "не лезет по факту"?

почему? Параметры тарифа скажите.

Москва, Корбина, 9200/9200 мегабит, L2TP VPN соединение поверх MAN. Локалка имеется, стало быть шейпим на ppp0, а не на физических интерфейсах..

тогда не будет работать динамическое распределение. это значит, что для bittorrent выставлена скорость 1/10 от общей, то она так и останется, даже если другие классы не заняты

Ага, понял. То есть классы, привязанные к другому parent классу, могут делить друг с другом траффик, а привязанные к root qdisc - не могут?
Но это все касается UPLINK, то есть от нас к провайдеру.

Касательно DOWNLINK (от провайдера к нам). Как я понял, ограничение сделано как раз, чтобы мы не посылали ACK к провайдеру, если нам прислали "больше чем надо", тем самым регулируя входящий поток аж на передающей стороне. И тем самым мы гарантируем, что избыток пакетов не будет скапливаться у провайдера в очереди "к нам".

Вопрос в том, можно ли к ingress привязвать классы так же, как это сделано для UPLINK, чтобы регулировать потоки на той стороне, а также почему это не сделано в изначальном wshaper? Ведь регулирование только исходящего VoIP никак не влияет на входящий VoIP...

p.s. Пошел разбираться в shape-test.
UPD: aх да, забыл сказать. С самого роутера траффика практически нет, торренты качаются с одного из компов. VoIP отдельной железякой, но надо чтобы и с компа можно было софтфонами звонить.

ABATAPA
30-03-2008, 17:03
Вопрос в том, можно ли к ingress

Нет. Ingress - class-less, т.е. бесклассовый.
Но можно все пропускать через "псевдоинтерфейс", и вот там уже появится понятие исходящего, а значит - и другие дисциплины.

king2
30-03-2008, 17:14
Нет. Ingress - class-less, т.е. бесклассовый.
Но можно все пропускать через "псевдоинтерфейс", и вот там уже появится понятие исходящего, а значит - и другие дисциплины.

А как это делается в случае с асусом? Можно простенький примерчик, ну типа с порта 80 первый приоритет, а все остальное - второй?

leniviy
30-03-2008, 17:50
хз, как это делается с асусом. штука называется
Linux IMQ - Intermediate Queueing Device (http://www.linuximq.net/faq.html). Я бы сам не отказался от этого. Но поиск по этому форуму ничего не дал.
Я считаю так, раз у вас нет исходящего трафика, повесьте шейпер только на br0. а пакеты из локалки надо отфильтровать в отдельный быстрый класс

sonice
03-04-2008, 04:05
Простите но кто нибуть сможет ответить на заданный тут вопрос-

http://wl500g.info/showpost.php?p=89921&postcount=48

king2
10-04-2008, 14:29
Для начала, я попытался разобраться в том, как работает wshaper. Я был удивлен двумя фактами:
1. Входящая в локалку очередь поджимается полисингом только для того, чтобы избежать очереди на стороне провайдера, а приоретизация и шейпинг не используются.
2. Используется тупой метод влияния на траффик - дропание пакетов. Не используется ни ECN (Explicit Congestion Notification), ни icmp source quench.

Я долго медитировал и пытался понять, как wshaper может обеспечивать приоритетную полосу для ВХОДЯЩЕГО VoIP траффика, перечитал много доков, но так
ничего и не понял. Глаза мне открыл leniviy, рассказав, что wshaper этой задачей не занимается, а следовательно, ее и не решает. Полумерой является
шейпинг исходящих от нас ACK пакетов, но он позволяет выделить для VoIP полосу очень неточно и оценочно. Фактически, мы не можем судить о входящем
трафике по количеству исходящих ACK пакетов, потому что размер данных во входящих пакетах нам неизвестен, известно только количество собственно пакетов.
А в shape-test все было сделано так просто потому, что у leniviy в роутере стоит качалка и поэтому траффик, который хочется зажать, просто не уходит в
локалку. Таким образом, shape-test является вынужденным решением-полумерой для тех людей, у кого качалка стоит на роутере, и весьма хреновым для тех,
у кого сам роутер трафик почти не потребляет и не генерирует (ssh/telnet/web-интерфейс не считаем). Оригинальный же wshaper плевать хотел на входящий
траффик, просто поджимая ему полосу для того, чтобы пакеты не скапливались в очереди провайдера. Однако, ingress полисинг дропает ВСЕ не попавшие в
разрешенную полосу пакеты, не разбираясь, VOIP это было или еще что. Таким образом, если у провайдера и были какие-то настройки QoS на роутере, тем
самым мы не даем им работать, пришибая у себя все пакеты без разбора.

Таким образом, после выяснения, что все сделано так не из каких-то хитрых соображений, которые я не могу догнать в силу ничтожности своего мозга, а
по некоторым определенным (shape-test+качалка на роутере) либо неопределенным (wshaper) причинам, родилось очевидное решение:

Устаналиваем исходящий фильтр а-ля wshaper на WAN интерфейс + такой же фильтр на br0 (разрешая unlimited для того что живет на стороне MAN) и все,
золотой ключик у нас в кармане. ingress же в таком случае не нужен вовсе.

По поводу второй непонятки:
ICMP source quench, насколько я понял, не поддерживается самой шейпилкой, а по поводу ECN выяснилось, что ECN поддерживется только начиная с Windows
Vista, да и то по умолчанию отключен (значит, будет работать хреново для потока изнутри нашей сети). И для предудыщего случая (shaping только исходящего
трафика) он бесполезен. С другой стороны, и в linux, и в freebsd оно давно есть и работает, так что потоки с серверов (входящие) им пришибать вполне
получится. Это даст нам возможность более мягко влиять на канал, а в случае, если передающая сторона не понимает, мы переходим к обычному дропу.
Чтобы работало ECN, надо использовать RED (random early detection). Ее преимущество в том, что оно умеет плавно грохать трафик посредством отсылания
пакетов с выставленными битами ECN и таким образом заставлять посылающую сторону временно прикрыть фонтан. Также оно умеет случайным образом с какой-то
вероятностью (чем больше очередь тем больше вероятность) грохать пакеты в очереди, не дожидаясь, пока они забьют всю очередь и больше не будет возможности
выбирать, что грохнуть (а придется грохать все что в очередь не влезло). Эта штука не работает для UDP траффика, потому что вместо плавной регулировки
скорости мы получаем некий гарантированный процент дропов (вполне возможно, что и на пустом месте). А UDP не предусматривает средств для перепосылки пакетов.
Таким образом, мы можем использовать этот метод только для мусорного _TCP_ траффика, и в этом случае не будет работать SFQ, что может вызывать затыки.

Второе ограничение дает нам использовать RED только для торрентов, то есть для траффика, который в основной своей массе генерится компьютерами под
windows (которые, напомню, ECN не особо умеют). Итого, решение как таковое существует, но для практического применения сейчас бесполезно.

king2
10-04-2008, 14:29
Несколько пояснений для тех, кто хочет разобраться и для самопроверки (если я неправ, поправьте меня):

Все растет от qdisc root. Мы даем ей handle и говорим, как будем распределяться траффик внутри нее (htb). Можно указать default, но не обязательно.
Далее мы привязываем к root qdisc некий класс 1:1. Ему мы тоже говорим, что внутри него все будет распределяться через htb. Также можно привязать
промежуточный класс 1:2, и зашейпить уже на нем, тогда можно будет пропускать траффик мимо шейпера (например, MAN траффик). Все подклассы, привязанные
к 1:1 (или 1:2) будут перетаскивать друг у друга свободную часть канала (можно делиться друг с другом каналом только в пределах класса, в пределах
root - нельзя). Это, кстати, можно использовать для того, чтобы выделять гарантированный канал для чего-либо (который не будет занят, даже если там
нет никаких данных).

Далее имеется несколько классов, привязанных к классу 1:2. Им мы указываем 4 параметра:
ceil - скорость, выше которой данные этого класса передаваться не будут (никогда).
rate - скорость, на которой данные этого класса будут передаваться при полной загрузке канала

По идее, сумма всех rate классов одного parent должна быть равна rate, указанного для parent этих классов. Для ceil та же фигня.
Тогда при полной загрузке канал будет делиться так же, как соотносятся между собой rate.

prio - приоритет передачи данных. При выборе данных для передачи сначала выбираются пакеты с мЕньшим приоритетом.
burst - количество данных, которых мы можем послать на скорости ceil до того, как упадем до скорости rate при загруженном канале. Если у нас для HTTP
установлен rate 100kbit cail 300kbit, первые burst байтов мы пошлем на высокой скорости, затем упадем до rate (или даже ниже, чтобы скомпенсировать
первоначальную большую скорость). то есть, если мы будем качать много данных, мы быстро скачаем первые burst байтов, затем медленнее rate скачаем еще
сколько-то, и постепенно выровняемся на скорости rate. Но если нам надо только одна страничка на 64 килобайта, мы скачаем ее БЫСТРО и затем, пока мы
ее читаем, burst "перезарядится", чтобы дать нам скачать еще burst байтов быстро. Не должен быть больше чем burst, указанный для parent.

Также нам необходимо сказать, каким образом внутри класса будет происходить выбор пакета для отправки. По умолчанию это PRIO, что нам не подходит, ибо
тогда, пока у нас в очереди имеется что-то с prio 0 - все, что имеет мЕньший приоритет, просто не будет послано.

Простейший способ - это назначить Stochastic Fairness Queueing (sfq). Эта штука делит все, что лежит в очереди, на части по некоторому алгоритму, и затем
простым перебором посылает по одному пакету из каждой части. Раз в perturb секунд алгоритм меняется, чтобы обеспечить справедливость. Это даст нам возможность
распределять полосу равномерно между потоками. Заметим, что если запихать в один класс торренты и скачивание по HTTP, то HTTP получит примерно ту же полосу,
что и один из 50 торрентовских потоков. Нинада так делать. :)

Назначать SFQ для торрентов не надо, иначе полоса будет делиться между обычными скачами и торрентами тоже *понятно, что 50 торрентов заберут больше
чем одно скачивание по http). По крайней мере у меня оно было именно так.


Далее займемся классификацией трафика:
Приоритеты фильтров - это по пусти, порядок, в котором фильтры будут просматриваться. Если мы словили совпадение,
пакет относится к тому классу, к какому сказал фильтр. Поэтому делаем так:

1 приоритет, 50-100% канала:
prio 1. VOIP (по полю TOS - настраивается на моем шлюзе)
prio 1. ICMP - чтобы контроллировать, что QoS работает
prio 1. весь протокол UDP, сюда же попадают пакеты от хреновых софтофонов
prio 1. ACK пакеты, чтобы не задерживать данные в обратном (к нам) канале
prio 1. TOS minimum delay (0x10)

2 приоритет, 40-100% канала:
prio 1. HTTP траффик (по src/dst port = 80|443)
prio 7. все остальное

3 приоритет, 10-100% канала:
prio 5. uTorrent, патченный, чтобы маркировать свои пакеты как TOS=0x30
prio 5. uTorrent, TCP на порт 4663 (мой входящий порт).
prio 5. uTorrent, TCP на порты, помеченные в моем торренте как исходящие (255 штук)

То есть сначала пытаемся привязать пакет по признакам prio1, потом турренты, все остальное - неприякаянное и идет во класс 1:20.

king2
10-04-2008, 14:31
Получилось вот что:

shape.sh:

#!/bin/sh
# Wonder Shaper, last modified by Oleg King (aka king2)
#
# shape.sh DEV SPEED

DEV="$1"
SPEED="$2"

# install root HTB, shape everything to collect all the queue in our router, and divide traffic into 3 parts
tc qdisc add dev $DEV root handle 1: htb default 777
tc class add dev $DEV parent 1:0 classid 1:1 htb burst 256k rate 100mbit ceil 100mbit
tc class add dev $DEV parent 1:1 classid 1:2 htb burst 64k rate ${SPEED}kbit ceil ${SPEED}kbit

# setclass: device, class_id, prio, total uplink, percentage of uplink
tc class add dev $DEV parent 1:2 classid 1:10 htb burst 64k rate $((50*$SPEED/100))kbit ceil ${SPEED}kbit prio 1
tc class add dev $DEV parent 1:2 classid 1:20 htb burst 64k rate $((40*$SPEED/100))kbit ceil ${SPEED}kbit prio 2
tc class add dev $DEV parent 1:2 classid 1:30 htb burst 64k rate $((10*$SPEED/100))kbit ceil ${SPEED}kbit prio 3

tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
#tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10

# PRIO1 --- Business class traffic ---
# high priority for VoIP traffic (by TOS)
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip tos 0x68 0xff \
match ip protocol 0x11 0xff \
flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip tos 0xb8 0xff \
match ip protocol 0x11 0xff \
flowid 1:10

# ICMP (ip protocol 1) in the interactive class
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip protocol 1 0xff \
flowid 1:10

# all UDP traffic are interractive
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip protocol 0x11 0xff \
flowid 1:10

# to make downloads fast while an upload is going on, speed up ACK packets
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip protocol 6 0xff \
match u8 0x05 0x0f at 0 \
match u16 0x0000 0xffc0 at 2 \
match u8 0x10 0xff at 33 \
flowid 1:10

# TOS Minimum Delay (ssh, NOT scp)
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip tos 0x10 0xff \
flowid 1:10

# PRIO2 --- Economy class traffic ---
# web browsing is better than other traffic
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip sport 80 0xffff flowid 1:20
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip dport 80 0xffff flowid 1:20
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip sport 433 0xffff flowid 1:20
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip dport 433 0xffff flowid 1:20

# other traffic goes to default 1:20
tc filter add dev $DEV parent 1:0 protocol ip prio 7 u32 \
match ip dst 0.0.0.0/0 flowid 1:20


wshaper-king2.sh:

#!/bin/sh
# Wonder Shaper, last modified by Oleg King (aka king2)
#
# wshaper-king2 (start|stop|status) WAN LAN UPLINK DOWNLINK

WAN=$2
LAN=$3
UPLINK=$4
DOWNLINK=$5

# show status and exit
if [ "$1" = "status" ]
then
echo "Outgoing traffic:";
echo "-----------------";
tc -s class ls dev $WAN
echo "Incoming traffic:";
echo "-----------------";
tc -s class ls dev $LAN
exit
fi

# clean existing downlink and uplink qdiscs, hide errors
tc qdisc del dev $WAN root 2> /dev/null > /dev/null
tc qdisc del dev $LAN root 2> /dev/null > /dev/null
if [ "$1" = "stop" ]
then
exit
fi

### WAN ###
/usr/local/sbin/shape.sh $WAN $UPLINK

# PRIO3 --- torrents will fly with laggage ToS=0x3f and ports 4663 + 21760-22015 ---
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip tos 0x3f 0xff \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 0x5500 0xff00 \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 4663 0xffff \
flowid 1:30

### LAN ###
/usr/local/sbin/shape.sh $LAN $DOWNLINK

# PRIO0 --- MAN always first and unlimited
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip src 192.168.1.1/32 \
flowid 1:2
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip dst 192.168.1.1/32 \
flowid 1:2

MANLIST=`ip route | grep vlan1 | grep -v default | awk '{print $1}'`
for a in $MANLIST
do
echo "adding $a to MAN filter..."
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip src $a flowid 1:2
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip dst $a flowid 1:2
done

# PRIO3 --- torrents will fly with laggage --- (dst ports 4663 + 21760-22015)
tc filter add dev $LAN parent 1:0 protocol ip prio 5 u32 \
match ip dport 4663 0xffff \
flowid 1:30
tc filter add dev $LAN parent 1:0 protocol ip prio 5 u32 \
match ip dport 0x5500 0xff00 \
flowid 1:30


Комментарии?

leniviy
10-04-2008, 14:49
что за патченый uTorrent?

king2
10-04-2008, 15:46
что за патченый uTorrent?

В форуме utorrent уже несколько лет (!) народ обсуждает возможность сделать установку ToS для пакетов, которые посылает uTorrent. Разработчики напустили дыма, предлагают ставить полноценные роутеры, заниматься анализом пакетов и так далее, а вот добавить одну строчку не хотят. Я подумал, что SO_REUSEADDR мне не так нужен, как TOS? и подумал подпатчить torrent. Каково же было мое удивление, когда оказалось, что везде, где надо, эта штука все выставляет, и даже параметр такой есть, только надо его вытащить наружу. Ну, я и вытащил.

UPDATE: After spending one night with debugger I figured out that ToS feature IS IMPLEMENTED and it WAS IMPLEMENTED some time ago (at least in 1.7). Setting name is net.diffserv_codepoint. This option exists in Advanced settings, but disabled and not visible in list.

I patched unpacked EXE (70 00 61 00 FF FF FF FF 00 00 00-> 70 00 81 00 FF FF FF FF 00 00 00) and found this feature working fine. After exiting value was saved to settings.dat and I was able to use other version of uTorrent.exe (setting not visible but has effect in this case).

Value (-1 as default) can be assigned 0 to 15, making ToS value from 0x30 to 0x3F.

I have only one question after this all: Why are you fooling your users about this feature?(joke about installing separate PC with Linux for L7 parsing was especially cynic for me from my current point of view).

king2
10-04-2008, 17:06
Дык этта. а по поводу моего биг-эссе кто-нибудь что-нибудь прокомментирует?

DrLabRus
10-04-2008, 17:15
king2
:eek: Работу ты проделал большую. За это благодарность и уважение.
Мне показалось, или основная мысль трактата - ущербность винды? ;)

По смыслу текста понял лишь в общих чертах.
Но там теория. Хотелось бы более развернутые практические рекомендации...

Protei
10-04-2008, 19:01
king2
Не смог вникнуть во всю теорию. Можно ли реализовать все это на практике для более совершенного распределения трафика, с учетом качалки на роутере? Еще имеется VoiP-шлюз, висящий на одном из LAN.

king2
11-04-2008, 17:03
king2
:eek: Работу ты проделал большую. За это благодарность и уважение.
Мне показалось, или основная мысль трактата - ущербность винды? ;)

По смыслу текста понял лишь в общих чертах.
Но там теория. Хотелось бы более развернутые практические рекомендации...

Не, основной смысло трактата - "оказывается, можно сделать правильный шейпинг и внутрь и наружу, если нету качалки на роутере".

Если не нужна качалка на роутере - то просто взять оба скрипта и запустить. И все.
Я, кстати, сделал еще автоматическое добавление всех маршрутов из ip route к MAN (то, что безлимитное).

king2
11-04-2008, 17:55
king2
Не смог вникнуть во всю теорию. Можно ли реализовать все это на практике для более совершенного распределения трафика, с учетом качалки на роутере? Еще имеется VoiP-шлюз, висящий на одном из LAN.

Боюсь, что с учетом качалки - не получится без IMQ..

newon
21-04-2008, 16:43
Здравствуйте, прежде чем читать и вникать в огромное количество информации в этой теме, позволю себе глупый вопрос.
У меня WL-500gP и тариф на 25 мегабит/c. Использую роутер как по проводу, так и по wifi. Идея такова:

хочется "расшарить" точку доступа, разумеется с интернетом, для всех желающих, при этом ограничив скорость Up/Down до, допустим, 512кб/c, ну а для моих устройств, Мак-адреса которых мне известны, оставить все как есть.

Реально ли с помощью методов, предложенных здесь, реализовать такую структуру? Или, если можете, посоветуйте пожалуйста, как реализовать такую схему более простым способом.

Просто хочется безвозмездно поделится интернетом с окружающими - учитывая что я живу на 14-ом этаже, а внизу много пятиэтажек, думаю пользователи найдуться :)


PS: отдельное спасибо Олегу за его старания! :)

ABATAPA
21-04-2008, 18:53
У меня WL-500gP и тариф на 25 мегабит/c.

Нам бы такие тарифы...


хочется "расшарить" точку доступа, разумеется с интернетом, для всех желающих, при этом ограничив скорость Up/Down до, допустим, 512кб/c, ну а для моих устройств, Мак-адреса которых мне известны, оставить все как есть.

Если сеть будет открытой, то и Ваши данные, передаваемые по сети, могут стать достоянием любого желающего. Защита по MAC - не защита, MAC легко меняется.
Как вариант, можно было бы поднять две сети с разными SSID - одну открытую, другую - с шифрованием (не панацея, но...). Но на прошивке Олега это не реализуется.


Просто хочется безвозмездно поделится интернетом с окружающими - учитывая что я живу на 14-ом этаже, а внизу много пятиэтажек, думаю пользователи найдуться :)

Похвально, но вот одобрит ли провайдер... :)

newon
21-04-2008, 19:39
Если сеть будет открытой, то и Ваши данные, передаваемые по сети, могут стать достоянием любого желающего. Защита по MAC - не защита, MAC легко меняется.
Как вариант, можно было бы поднять две сети с разными SSID - одну открытую, другую - с шифрованием (не панацея, но...). Но на прошивке Олега это не реализуется.
Я тоже подумал про такое... т.е. создать две сети с разными SSID невозможно впринципе? жаль конечно, это был бы идеальный вариант..

Похвально, но вот одобрит ли провайдер... :)
Провайдеру никто не скажет, да и, думаю, ему до этого дела нет :) просто сам на практике частенько пользовался чьими-то открытыми точками... правда там видимо люди вообще не знали про шифрование WLan'а, да и не думали про защиту админской части - вэб интерфейс был доступен по дефолтному логину/паролю.

Спасибо за ответ

bash
22-04-2008, 02:28
Похвально, но вот одобрит ли провайдер... :)

Это зависит от контракта =) Видел такие где было жестко написано, что мол для тариф для одного человека, типа если семья, для каждого члена нужно какие-то там копейки доплачивать =)

ABATAPA
22-04-2008, 07:15
Я тоже подумал про такое... т.е. создать две сети с разными SSID невозможно впринципе? жаль конечно, это был бы идеальный вариант..


"В принципе" - возможно.
Но - не в прошивке Олега.
По-моему, это было в OpenWRT.

Dekker
24-04-2008, 15:46
создал скриптик от Уважаемого king2

канал 4М/512К при запуске ругается

# ./post-firewall
Cannot find device "512"
Cannot find device "512"
Illegal "rate"

ну и собственно дальше продолжает материться, но вначале хотя бы с этим разобратся.

king2
27-04-2008, 01:23
создал скриптик от Уважаемого king2

канал 4М/512К при запуске ругается

# ./post-firewall
Cannot find device "512"
Cannot find device "512"
Illegal "rate"

ну и собственно дальше продолжает материться, но вначале хотя бы с этим разобратся.

post-firewall запускается с параметрами при коннекте, так просто запускать из командной строки его нельзя.
Пробуйте так:
./wshaper-king2.sh ppp0 br0 4000 500

Dekker
27-04-2008, 14:18
king2

благодарю, помогло, не учел что ppp0 при ручном запуске

TrueAlex
10-06-2008, 12:20
В форуме utorrent уже несколько лет (!) народ обсуждает возможность сделать установку ToS для пакетов, которые посылает uTorrent....

uTorrent я пропатчил, опция появилась, но в какое значение ее выставить? 0 или 15? И еще вопрос - я правильно понял, что я могу пропатчить файл, выставить значение, сохранить его, а потом использовать вообще другую версию оригинального uTorrent? А как проверить работает ли эта опция на самом деле (снифать пакеты не предлагать :)

ABATAPA
10-06-2008, 19:15
uTorrent я пропатчил, опция появилась, но в какое значение ее выставить? 0 или 15? И еще вопрос - я правильно понял, что я могу пропатчить файл, выставить значение, сохранить его, а потом использовать вообще другую версию оригинального uTorrent? А как проверить работает ли эта опция на самом деле (снифать пакеты не предлагать :)

Всего-то и нужно, что собрать кому-то в _дополнительный_ пакет модулей ipt_owner, раз уж автор не хочет.

Alekc
10-06-2008, 20:26
В форуме utorrent уже несколько лет (!) народ обсуждает возможность сделать установку ToS для пакетов, которые посылает uTorrent. Разработчики напустили дыма, предлагают ставить полноценные роутеры, заниматься анализом пакетов и так далее, а вот добавить одну строчку не хотят. Я подумал, что SO_REUSEADDR мне не так нужен, как TOS? и подумал подпатчить torrent. Каково же было мое удивление, когда оказалось, что везде, где надо, эта штука все выставляет, и даже параметр такой есть, только надо его вытащить наружу. Ну, я и вытащил.
Только что потестил на uTorrent 1.7.7 - эту фичу включить получилось, но реально она не работает... пока порты торренту жёстко не указал исходящие, то траффик шёл через категорию 1:20. Значение выставлял 15 (ToS 0x3f ?).

2bars
10-06-2008, 21:08
читал, читал, так и не нашел ответа на свой вопрос...
кароч есть рутер gp-500.
Мой провайдер сам строит тунель до него, тоесть не надо поднимать никаких vpn чтобы появился инет...
Для меня инет как сеть...
Как мне в таком случае шейпить трафик инетовский, если есть диапазон Ip адресов в сети, причем не очень маленький... порядка 10 диапазонов... потом есть сайты доступные локально... и отдельным отрядом стоит интернет, но с точки зрения роутера эт овсе одно и тоже... кароч я сам запутался уже :) подскажите куда идти?


в догонку... Какие интерфейцсы из

br0
eth0
eth1
lo
vlan0
vlan1

за что отвечают ? про лупбэк понятно... остальное не очень :)
Спасибо...

TrueAlex
20-06-2008, 18:35
пока порты торренту жёстко не указал исходящие, то траффик шёл через категорию 1:20. Значение выставлял 15 (ToS 0x3f ?).

ткни носом, пожалуйста, я что-то в упор не вижу где там исходящие порты задать можно :(

Boyrski
05-07-2008, 15:38
Доброго дня! Скрипты интересные, хотел бы поставить у себя. WL-500G Premium. Приобрел его недавно. Познаний в линуксе очень мало, можно сказать нет. Как записать эти скрипты и как сделать чтобы они запускались сами после перезагрузки? Подскажите пожалуйста!!! Желательно последовательно. Поиском рылся, но ничего не нашел. В английском не силен, поэтому прошу туда не ссылаться. ПОМОГИТЕ пожалуйста!!!:confused:

Wildy
19-07-2008, 18:12
Hello, All!

Вот такой вопрос: есть ли клон OpenWRT'шных скриптов на Олеговской прошивке?

А то посмотрел на wshaper - боже, какое же оно неудобное...

Или если кто подскажет, как лучше сделать (сам голову ломаю) - для Корбины, 12Мбит up/down, следующее:

1) Приоритизация VoIP (SIP)
2) Приоритизация обычная (ICMP, ACK, SSH, DNS, ICQ, мелкие пакеты вообще)
3) Torrent'ы - деприоритизировать

Как видим, ничего сложного, но если на Nbd's QoS scripts все делалось влет, то здесь я налетел на некие странные глюки почти сразу :(
Может, кто подскажет?

msa100rus
26-10-2008, 02:00
...
Как видим, ничего сложного, но если на Nbd's QoS scripts все делалось влет, то здесь я налетел на некие странные глюки почти сразу :(
Может, кто подскажет?

Что такое Nbd's QoS scripts??

Evgen®
02-11-2008, 18:57
Подскажите, есть канал 10мбит/10мбит нужно поделить как входящий, так и исходящий трафик на 5ть компьютеров(192.168.0.51-192.168.0.55), на компьютер 192.168.0.51 5мбит/5мбит, а между остальными поделить оставшийся канал, с одинаковым приоритетом для каждого компьютера? Возможно, ли установить в wl-500gP v.1 этот шейпер (http://www.mastershaper.org/index.php/MasterShaper) с веб интерфейсом?

residend
21-11-2008, 01:03
Помогите!!!

разбирался как работает шейпер скрипт от king2, вроде всё логично и правильно, должен работать, однако у меня этот скрипт так и не заработал должным образом. Конечно, какая-то скорость забирается у торрента, но она забирается и при не запущенном скрипте от king2. Единственное я не патчил торрент, но это не обязательное условие для этого скрипта. Аппетит торента так и не удалось ужать до 10%, а если смотреть статистику, то почти весь трафик валит через 1:10...

Люди, помогите, никак не сделать шейпер, почему то ни один не работает!

PS: Кстати, а не запущен ли шейпер по умолчанию какой в олеговой прошивке (-10), который надо отключить перед запуском другого, как его отключить тогда? на форуме ответа не нашёл.

PPS: Не совсем в тему: а как пропатчить торрент, чем распаковать .exe и чем редактировать? Позабыл уже всё, раньше как то делал давно, вроде дос навигатором редактировал...

rommel.ua
22-11-2008, 01:56
Ситуация практически аналогична описанной residend:
- завожу скрипт king2, естественно подправленный для моих настроек торрента.
- торрент непатченный, но так как в скрипте введена фильтрация по портам (в торренте жестко прописаны входящий и диапазон исходящих) траф должен проходить по прио3. Или нет?

В итоге при запущенном шейпере получается следующее:
- по спидтесту скорость даунлоада зарезается вдвое - 500КБ/с превращаются в 280КБ/с.
- статус показывает, что пакеты лезут в 1:10 и 1:20 (см приложенный файл).
- в прио3 (1:30) не попадает вообще ничего, хотя специально запустил торрент перед запросом статуса.

В связи с этим всем вопрос:

Как я понимаю эти фильтры работают по схеме "match ip tos 0x3f 0xff" ИЛИ "match ip sport 0x5500 0xff00" ИЛИ "match ip sport 50220 0xffff" ????

### WAN ###
/usr/local/sbin/shape.sh $WAN $UPLINK

# PRIO3 --- torrents will fly with laggage ToS=0x3f and ports 50220 + 21760-22015 ---
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip tos 0x3f 0xff \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 0x5500 0xff00 \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 50220 0xffff \
flowid 1:30

### LAN ###
/usr/local/sbin/shape.sh $LAN $DOWNLINK

# PRIO0 ---
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip src 192.168.0.1/24 \
flowid 1:2
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip dst 192.168.0.1/24 \
flowid 1:2

# PRIO3 --- torrents will fly with laggage --- (dst ports 50220 + 21760-22015)
tc filter add dev $LAN parent 1:0 protocol ip prio 5 u32 \
match ip dport 50220 0xffff \
flowid 1:30
tc filter add dev $LAN parent 1:0 protocol ip prio 5 u32 \
match ip dport 0x5500 0xff00 \
flowid 1:30

Нет ли здесь ошибки с дпорт/спорт для торрента? на ЛАНе входящий траф идет на 50220 и это дпорт, но с 21760-22015 идет на ЛАН исходящий траф и тут надо бы вроде спорт ставить???

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

Может кто-нить прокомментировать эти эксперименты?

Vic_ing
23-11-2008, 13:04
В форуме utorrent уже несколько лет (!) народ обсуждает возможность сделать установку ToS для пакетов, которые посылает uTorrent. Разработчики напустили дыма, предлагают ставить полноценные роутеры, заниматься анализом пакетов и так далее, а вот добавить одну строчку не хотят. Я подумал, что SO_REUSEADDR мне не так нужен, как TOS? и подумал подпатчить torrent. Каково же было мое удивление, когда оказалось, что везде, где надо, эта штука все выставляет, и даже параметр такой есть, только надо его вытащить наружу. Ну, я и вытащил.

А для какой версии Utorrent нужно применить этот патчик?
код то навреное меняется прилично от версии к версии...

Сейчас сел выдирать лучшее из ваших двух скриптов и своего "wshaper-vic".. - тот работает, но не слишком эффективно..((
надеюсь теперь сделаю отличный шейпер)

residend
28-11-2008, 16:48
Помогите!!!

разбирался как работает шейпер скрипт от king2, вроде всё логично и правильно, должен работать, однако у меня этот скрипт так и не заработал должным образом. Конечно, какая-то скорость забирается у торрента, но она забирается и при не запущенном скрипте от king2. Единственное я не патчил торрент, но это не обязательное условие для этого скрипта. Аппетит торента так и не удалось ужать до 10%, а если смотреть статистику, то почти весь трафик валит через 1:10...

Люди, помогите, никак не сделать шейпер, почему то ни один не работает!

PS: Кстати, а не запущен ли шейпер по умолчанию какой в олеговой прошивке (-10), который надо отключить перед запуском другого, как его отключить тогда? на форуме ответа не нашёл.

PPS: Не совсем в тему: а как пропатчить торрент, чем распаковать .exe и чем редактировать? Позабыл уже всё, раньше как то делал давно, вроде дос навигатором редактировал...

решил поднять тему в надежде, что всё же кто-нибудь подскажет, куда копать! А то уже всё перепробовал...

Vic_ing
29-11-2008, 14:35
решил поднять тему в надежде, что всё же кто-нибудь подскажет, куда копать! А то уже всё перепробовал...

Редактировать EXE можно любым binary редактором
(например http://www.newfreedownloads.com/find/binary-editor.html)
просто ищете строку, которую нужно заменить, меняете в ней пару байт и сохраняете

А выложите свой шейпер, может подскажем что-нить?
мой вроде работает, торрент урезается, правда всё равно помедленнее чем без торрента и шейпера)) видимо большое количество пакетов сказывается несмотря ни на какой шейпер.

residend
29-11-2008, 23:01
Редактировать EXE можно любым binary редактором
(например http://www.newfreedownloads.com/find/binary-editor.html)
просто ищете строку, которую нужно заменить, меняете в ней пару байт и сохраняете


Ага... А распаковать чем exe? раньше при редактировании я чем то распаковывал .exe? после чего только и находились нужные строки. (просто давно я редактировал .exe такими способами, поэтому только помню последовательность действий)



А выложите свой шейпер, может подскажем что-нить?
мой вроде работает, торрент урезается, правда всё равно помедленнее чем без торрента и шейпера)) видимо большое количество пакетов сказывается несмотря ни на какой шейпер.

шейпер точно такой же как здесь http://wl500g.info/showpost.php?p=92586&postcount=76 (один в один, только заменён порт торрента на мой). А привинчивал его по шагам, как написано здесь(тот же самый шейпер просто в другой теме): http://wl500g.info/showpost.php?p=92753&postcount=4 и 2-я часть: http://wl500g.info/showpost.php?p=92756&postcount=5

Vic_ing
29-11-2008, 23:53
Ага... А распаковать чем exe? раньше при редактировании я чем то распаковывал .exe? после чего только и находились нужные строки. (просто давно я редактировал .exe такими способами, поэтому только помню последовательность действий)
Хм..может я чего то не знаю..
Просто все патчи и кряки, которые когда-либо применял, я применял к целому EXE, то есть просто открывал его в редакторе и пару байт менял..

шейпер точно такой же как здесь http://wl500g.info/showpost.php?p=92586&postcount=76 (один в один, только заменён порт торрента на мой). А привинчивал его по шагам, как написано здесь(тот же самый шейпер просто в другой теме): http://wl500g.info/showpost.php?p=92753&postcount=4 и 2-я часть: http://wl500g.info/showpost.php?p=92756&postcount=5

Я просто на всякий случай сделал
1)чуть больше классов - 1:10, 1:11, 1:12, 1:20, 1:30
2) default класс 1:20
3) торрент и емул (по портам, ToS) пытаюсь кидать в 1:30
4) http в 1:10
5) icmp в 1:11 - так проще всего было увидеть что шейпер работает, пишешь пинг и видишь изменения в 11ом классе
6) ack, RDP в 13
7)что-то ещё типа SSH и VOip уж не помню куда, не так важно

Смысл всего этого в том, что это дало мне уверенность, что торрент (а их в локалке пара запущена) попадёт или в 1:30 класс, или, если что-то недоработал, в 1:20, по умолчанию.
http, ACK, ping, SSh всегда будут в других, более приоритетных классах
вроде работает...

Может мой вариант не слишком лаконичен и рационален, но для меня он был нагляден, помог увидеть реально куда какие пакеты идут, помог полнее расбросать траффик.
Если что могу кинуть свои версии (грязноваты немного, не всё комменчено, но может поможет чем)

residend
30-11-2008, 20:53
Vic_ing, кинь ,пожалуйста, свои варианты, наверное прямо сюда, и опиши подробно, по шагам как их прикрутить. Может чего отключить надо или чего установить (понимаю, что всё уже разжёвано везде, да и более того я и сам прекрасно знаю как что и куда пихать... Но вдруг всё же что-то я упускаю из того, или что-то не дописано где-то - ведь у многих же работает всё, а у меня никак!) )

Vic_ing
04-12-2008, 09:25
Vic_ing, кинь ,пожалуйста, свои варианты, наверное прямо сюда, и опиши подробно, по шагам как их прикрутить. Может чего отключить надо или чего установить (понимаю, что всё уже разжёвано везде, да и более того я и сам прекрасно знаю как что и куда пихать... Но вдруг всё же что-то я упускаю из того, или что-то не дописано где-то - ведь у многих же работает всё, а у меня никак!) )

запускается у меня он так:
в файле /usr/local/sbin/post-firewall есть строка:

/usr/local/sbin/wshaper-viс start ppp0 br0 2800 9700

далее сам wshaper-vic (сделан на базе версии wshaper-king и моего первого шейпера, который недостаточно хорошо работал)


#!/bin/sh
# Wonder Shaper, last modified by Oleg King (aka king2)
# last modified by Victor Shmaev (aka Vic_ing) 03.12.08
# wshaper-vic (start|stop|status) WAN LAN UPLINK DOWNLINK

WAN=$2
LAN=$3
UPLINK=$4
DOWNLINK=$5

# show status and exit
if [ "$1" = "status" ]
then
echo "Outgoing traffic:";
echo "-----------------";
tc -s class ls dev $WAN
echo "Incoming traffic:";
echo "-----------------";
tc -s class ls dev $LAN
exit
fi

# clean existing downlink and uplink qdiscs, hide errors
tc qdisc del dev $WAN root 2> /dev/null > /dev/null
tc qdisc del dev $LAN root 2> /dev/null > /dev/null
if [ "$1" = "stop" ]
then
exit
fi

### WAN ###
/usr/local/sbin/shape.sh $WAN $UPLINK

# PRIO3 --- torrents will fly with laggage ToS=0x3f and ports 4663 + 21760-22015 ---
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip tos 0x3f 0xff \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 0x5500 0xff00 \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 4663 0xffff \
flowid 1:30
# if they won't - i don't care - they'll go to 1:20 (default)

### LAN ###
/usr/local/sbin/shape.sh $LAN $DOWNLINK

# PRIO0 --- MAN always first and unlimited
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip src 172.22.22.1/32 \
flowid 1:1
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip dst 172.22.22.1/32 \
flowid 1:1

MANLIST=`ip route | grep vlan1 | grep -v default | awk '{print $1}'`
for a in $MANLIST
do
echo "adding $a to MAN filter..."
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip src $a flowid 1:1
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip dst $a flowid 1:1
done

# PRIO3 --- torrents will fly with laggage --- (dst ports 4663 + 21760-22015)
tc filter add dev $LAN parent 1:0 protocol ip prio 5 u32 \
match ip dport 4663 0xffff \
flowid 1:30
tc filter add dev $LAN parent 1:0 protocol ip prio 5 u32 \
match ip dport 0x5500 0xff00 \
flowid 1:30


далее shape.sh

#!/bin/sh
# Wonder Shaper, last modified by Oleg King (aka king2)
# Modified by Victor Shmaev (aka Vic-ing) 03.12.08
# shape.sh DEV SPEED

DEV="$1"
SPEED="$2"

#just to make code more readable
ICMP="match ip protocol 1 0xff"
TCP="match ip protocol 6 0xff"
UDP="match ip protocol 17 0xff"
DPORT="match ip dport"
SPORT="match ip sport"
SRC="match ip src"
DST="match ip dst"
U32="protocol ip u32"
U16="protocol ip u16"
U8="protocol ip u8"

# install root HTB, shape everything to collect all the queue in our router, and divide traffic into 3 parts
tc qdisc add dev $DEV root handle 1: htb default 555
tc class add dev $DEV parent 1: classid 1:1 htb burst 256k rate 100mbit ceil 100mbit
tc class add dev $DEV parent 1:1 classid 1:2 htb burst 64k rate ${SPEED}kbit ceil ${SPEED}kbit

# setclass: device, class_id, prio, total uplink, percentage of uplink
#10 - http(80,8080,443,3128,25);
#11 - icmp;
#12 - VOIP,DNS, ACK, SSH;
#13 - UDP,RDP;
#30 - emule,torrent;
#20 - default
tc class add dev $DEV parent 1:2 classid 1:10 htb burst 64k rate $((30*$SPEED/100))kbit ceil ${SPEED}kbit prio 3
tc class add dev $DEV parent 1:2 classid 1:11 htb burst 64k rate $((5*$SPEED/100))kbit ceil ${SPEED}kbit prio 1
tc class add dev $DEV parent 1:2 classid 1:12 htb burst 64k rate $((15*$SPEED/100))kbit ceil ${SPEED}kbit prio 2
tc class add dev $DEV parent 1:2 classid 1:13 htb burst 64k rate $((20*$SPEED/100))kbit ceil ${SPEED}kbit prio 4
tc class add dev $DEV parent 1:2 classid 1:20 htb burst 1k rate $((20*$SPEED/100))kbit ceil $((80*$SPEED/100))kbit prio 5
tc class add dev $DEV parent 1:2 classid 1:30 htb burst 1k rate $((10*$SPEED/100))kbit ceil $((80*$SPEED/100))kbit prio 6

tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:11 handle 11: sfq perturb 10
tc qdisc add dev $DEV parent 1:12 handle 12: sfq perturb 10
tc qdisc add dev $DEV parent 1:13 handle 13: sfq perturb 10
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10

# high priority for VoIP traffic (by TOS)
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip tos 0x68 0xff \
match ip protocol 0x11 0xff \
flowid 1:12
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip tos 0xb8 0xff \
match ip protocol 0x11 0xff \
flowid 1:12

# ICMP (ip protocol 1) in the interactive class
tc filter add dev $DEV parent 1: protocol ip prio 0 u32 \
match ip protocol 1 0xff \
flowid 1:11

tc filter add dev $DEV parent 1: prio 1 $U32 $ICMP flowid 1:11

# all UDP traffic are interractive
tc filter add dev $DEV parent 1:0 protocol ip prio 3 u32 \
match ip protocol 0x11 0xff \
flowid 1:13

#DNS
tc filter add dev $DEV parent 1: prio 1 $U32 $SPORT 53 0xffff flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $DPORT 53 0xffff flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $DST 10.20.1.4 flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $SRC 10.20.1.4 flowid 1:12

# to make downloads fast while an upload is going on, speed up ACK packets
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip protocol 6 0xff \
match u8 0x05 0x0f at 0 \
match u16 0x0000 0xffc0 at 2 \
match u8 0x10 0xff at 33 \
flowid 1:12

#RDP
tc filter add dev $DEV parent 1: prio 3 $U32 $TCP $DPORT 3389 0xffff flowid 1:13
tc filter add dev $DEV parent 1: prio 3 $U32 $TCP $SPORT 3389 0xffff flowid 1:13


# TOS Minimum Delay (ssh, NOT scp)
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip tos 0x10 0xff \
flowid 1:10
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $SPORT 22 0xfffe flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $SPORT 222 0xfffe flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $SPORT 2200 0xfffe flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $DPORT 22 0xfffe flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $DPORT 222 0xfffe flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $DPORT 2200 0xfffe flowid 1:12


# web browsing is better than other traffic
tc filter add dev $DEV parent 1:0 protocol ip prio 2 u32 \
match ip sport 80 0xffff flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 2 u32 \
match ip dport 80 0xffff flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 2 u32 \
match ip sport 433 0xffff flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 2 u32 \
match ip dport 433 0xffff flowid 1:10

tc filter add dev $DEV parent 1: prio 2 $U32 $DPORT 3128 0xffff flowid 1:10
tc filter add dev $DEV parent 1: prio 2 $U32 $DPORT 8080 0xffff flowid 1:10

tc filter add dev $DEV parent 1: prio 2 $U32 $SPORT 25 0xffff flowid 1:10
#tc filter add dev $DEV parent 1: protocol ip prio 1 handle 1 fw flowid 1:10

#UDP (emule)
tc filter add dev $DEV parent 1: prio 5 $U32 $DPORT 13767 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $SPORT 13767 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $UDP $DPORT 4672 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $UDP $SPORT 4672 0xffff classid 1:30

# other traffic goes to default 1:20
tc filter add dev $DEV parent 1:0 protocol ip prio 4 u32 \
match ip dst 0.0.0.0/0 flowid 1:20


Требуется:
1) в post-firewall прописать строку запуска с необходимыми скоростями
2) в торренте прописать порты как в wshaper-vic
3) в wshaper-vic прописать адреса локальной сетки - там у меня 172.22.22.1\32
4) в shape.sh в разделе #DNS у меня стоит адрес 10.20.1.4 - это DNS моего прова.. не уверен что эти строки настолько нужны, но можно исправить на свои IP и оставить лежать тут)
5)RDP, это, на всякий случай, удалённый рабочий стол винды порт 3389
6) в разделе ssh у меня порты 22, 222, 2200 -это я менял порты своего SSH чтобы снаружи не лезли боты и сканеры - можно оставить один спокойно
7) 4672 - порт емула у меня, 13767 - входящий порт торрента. Подправить под себя

8) ну и ещё я немного зарезал максимальную скорость 20ого и 30ого классов - поставил ceil 80% и уменьшил burst с 64 до 1k.. вроде стало шустрее. когда стояло 100% и 64k - торренты качали шустро, но инет падал, когда скачек было много, сейчас инет раотает поувереннее, но в идеале надо продолжить изыскания))

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

residend
05-12-2008, 18:11
запускается у меня он так:
в файле /usr/local/sbin/post-firewall есть строка:

/usr/local/sbin/wshaper-viс start ppp0 br0 2800 9700

далее сам wshaper-vic (сделан на базе версии wshaper-king и моего первого шейпера, который недостаточно хорошо работал)


#!/bin/sh
# Wonder Shaper, last modified by Oleg King (aka king2)
# last modified by Victor Shmaev (aka Vic_ing) 03.12.08
# wshaper-vic (start|stop|status) WAN LAN UPLINK DOWNLINK

WAN=$2
LAN=$3
UPLINK=$4
DOWNLINK=$5

# show status and exit
if [ "$1" = "status" ]
then
echo "Outgoing traffic:";
echo "-----------------";
tc -s class ls dev $WAN
echo "Incoming traffic:";
echo "-----------------";
tc -s class ls dev $LAN
exit
fi

# clean existing downlink and uplink qdiscs, hide errors
tc qdisc del dev $WAN root 2> /dev/null > /dev/null
tc qdisc del dev $LAN root 2> /dev/null > /dev/null
if [ "$1" = "stop" ]
then
exit
fi

### WAN ###
/usr/local/sbin/shape.sh $WAN $UPLINK

# PRIO3 --- torrents will fly with laggage ToS=0x3f and ports 4663 + 21760-22015 ---
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip tos 0x3f 0xff \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 0x5500 0xff00 \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 4663 0xffff \
flowid 1:30
# if they won't - i don't care - they'll go to 1:20 (default)

### LAN ###
/usr/local/sbin/shape.sh $LAN $DOWNLINK

# PRIO0 --- MAN always first and unlimited
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip src 172.22.22.1/32 \
flowid 1:1
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip dst 172.22.22.1/32 \
flowid 1:1

MANLIST=`ip route | grep vlan1 | grep -v default | awk '{print $1}'`
for a in $MANLIST
do
echo "adding $a to MAN filter..."
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip src $a flowid 1:1
tc filter add dev $LAN parent 1:0 protocol ip prio 1 u32 \
match ip dst $a flowid 1:1
done

# PRIO3 --- torrents will fly with laggage --- (dst ports 4663 + 21760-22015)
tc filter add dev $LAN parent 1:0 protocol ip prio 5 u32 \
match ip dport 4663 0xffff \
flowid 1:30
tc filter add dev $LAN parent 1:0 protocol ip prio 5 u32 \
match ip dport 0x5500 0xff00 \
flowid 1:30


далее shape.sh

#!/bin/sh
# Wonder Shaper, last modified by Oleg King (aka king2)
# Modified by Victor Shmaev (aka Vic-ing) 03.12.08
# shape.sh DEV SPEED

DEV="$1"
SPEED="$2"

#just to make code more readable
ICMP="match ip protocol 1 0xff"
TCP="match ip protocol 6 0xff"
UDP="match ip protocol 17 0xff"
DPORT="match ip dport"
SPORT="match ip sport"
SRC="match ip src"
DST="match ip dst"
U32="protocol ip u32"
U16="protocol ip u16"
U8="protocol ip u8"

# install root HTB, shape everything to collect all the queue in our router, and divide traffic into 3 parts
tc qdisc add dev $DEV root handle 1: htb default 555
tc class add dev $DEV parent 1: classid 1:1 htb burst 256k rate 100mbit ceil 100mbit
tc class add dev $DEV parent 1:1 classid 1:2 htb burst 64k rate ${SPEED}kbit ceil ${SPEED}kbit

# setclass: device, class_id, prio, total uplink, percentage of uplink
#10 - http(80,8080,443,3128,25);
#11 - icmp;
#12 - VOIP,DNS, ACK, SSH;
#13 - UDP,RDP;
#30 - emule,torrent;
#20 - default
tc class add dev $DEV parent 1:2 classid 1:10 htb burst 64k rate $((30*$SPEED/100))kbit ceil ${SPEED}kbit prio 3
tc class add dev $DEV parent 1:2 classid 1:11 htb burst 64k rate $((5*$SPEED/100))kbit ceil ${SPEED}kbit prio 1
tc class add dev $DEV parent 1:2 classid 1:12 htb burst 64k rate $((15*$SPEED/100))kbit ceil ${SPEED}kbit prio 2
tc class add dev $DEV parent 1:2 classid 1:13 htb burst 64k rate $((20*$SPEED/100))kbit ceil ${SPEED}kbit prio 4
tc class add dev $DEV parent 1:2 classid 1:20 htb burst 1k rate $((20*$SPEED/100))kbit ceil $((80*$SPEED/100))kbit prio 5
tc class add dev $DEV parent 1:2 classid 1:30 htb burst 1k rate $((10*$SPEED/100))kbit ceil $((80*$SPEED/100))kbit prio 6

tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:11 handle 11: sfq perturb 10
tc qdisc add dev $DEV parent 1:12 handle 12: sfq perturb 10
tc qdisc add dev $DEV parent 1:13 handle 13: sfq perturb 10
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10

# high priority for VoIP traffic (by TOS)
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip tos 0x68 0xff \
match ip protocol 0x11 0xff \
flowid 1:12
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip tos 0xb8 0xff \
match ip protocol 0x11 0xff \
flowid 1:12

# ICMP (ip protocol 1) in the interactive class
tc filter add dev $DEV parent 1: protocol ip prio 0 u32 \
match ip protocol 1 0xff \
flowid 1:11

tc filter add dev $DEV parent 1: prio 1 $U32 $ICMP flowid 1:11

# all UDP traffic are interractive
tc filter add dev $DEV parent 1:0 protocol ip prio 3 u32 \
match ip protocol 0x11 0xff \
flowid 1:13

#DNS
tc filter add dev $DEV parent 1: prio 1 $U32 $SPORT 53 0xffff flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $DPORT 53 0xffff flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $DST 10.20.1.4 flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $SRC 10.20.1.4 flowid 1:12

# to make downloads fast while an upload is going on, speed up ACK packets
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip protocol 6 0xff \
match u8 0x05 0x0f at 0 \
match u16 0x0000 0xffc0 at 2 \
match u8 0x10 0xff at 33 \
flowid 1:12

#RDP
tc filter add dev $DEV parent 1: prio 3 $U32 $TCP $DPORT 3389 0xffff flowid 1:13
tc filter add dev $DEV parent 1: prio 3 $U32 $TCP $SPORT 3389 0xffff flowid 1:13


# TOS Minimum Delay (ssh, NOT scp)
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip tos 0x10 0xff \
flowid 1:10
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $SPORT 22 0xfffe flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $SPORT 222 0xfffe flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $SPORT 2200 0xfffe flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $DPORT 22 0xfffe flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $DPORT 222 0xfffe flowid 1:12
tc filter add dev $DEV parent 1: prio 1 $U32 $TCP $DPORT 2200 0xfffe flowid 1:12


# web browsing is better than other traffic
tc filter add dev $DEV parent 1:0 protocol ip prio 2 u32 \
match ip sport 80 0xffff flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 2 u32 \
match ip dport 80 0xffff flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 2 u32 \
match ip sport 433 0xffff flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 2 u32 \
match ip dport 433 0xffff flowid 1:10

tc filter add dev $DEV parent 1: prio 2 $U32 $DPORT 3128 0xffff flowid 1:10
tc filter add dev $DEV parent 1: prio 2 $U32 $DPORT 8080 0xffff flowid 1:10

tc filter add dev $DEV parent 1: prio 2 $U32 $SPORT 25 0xffff flowid 1:10
#tc filter add dev $DEV parent 1: protocol ip prio 1 handle 1 fw flowid 1:10

#UDP (emule)
tc filter add dev $DEV parent 1: prio 5 $U32 $DPORT 13767 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $SPORT 13767 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $UDP $DPORT 4672 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $UDP $SPORT 4672 0xffff classid 1:30

# other traffic goes to default 1:20
tc filter add dev $DEV parent 1:0 protocol ip prio 4 u32 \
match ip dst 0.0.0.0/0 flowid 1:20


Требуется:
1) в post-firewall прописать строку запуска с необходимыми скоростями
2) в торренте прописать порты как в wshaper-vic
3) в wshaper-vic прописать адреса локальной сетки - там у меня 172.22.22.1\32
4) в shape.sh в разделе #DNS у меня стоит адрес 10.20.1.4 - это DNS моего прова.. не уверен что эти строки настолько нужны, но можно исправить на свои IP и оставить лежать тут)
5)RDP, это, на всякий случай, удалённый рабочий стол винды порт 3389
6) в разделе ssh у меня порты 22, 222, 2200 -это я менял порты своего SSH чтобы снаружи не лезли боты и сканеры - можно оставить один спокойно
7) 4672 - порт емула у меня, 13767 - входящий порт торрента. Подправить под себя




Спасибо огромое!

правда я чего то я не понял как в уторенте прописать порты...В конфигах можно только один входящий порт прописать, я так понимаю это надо менять в 7-м пункте, а вот куда прописывать второй пункт?

Cd_spb
05-12-2008, 19:16
Спасибо огромое!

правда я чего то я не понял как в уторенте прописать порты...В конфигах можно только один входящий порт прописать, я так понимаю это надо менять в 7-м пункте, а вот куда прописывать второй пункт?

У коллеги две одновременно работающие p2p программы. Соотвтственно умы нужно два порта. Если бы было три, тогда три порта.

residend
05-12-2008, 21:32
У коллеги две одновременно работающие p2p программы. Соотвтственно умы нужно два порта. Если бы было три, тогда три порта.

имеется ввиду вот это:

2) в торренте прописать порты как в wshaper-vic

7) 4672 - порт емула у меня, 13767 - входящий порт торрента. Подправить под себя (это в shape.sh)

А то что 2 p2p клиента это понятно, но по скрипту получается, что для торрента описано ПО ПОРТАМ в 2-х местах...

Cd_spb
06-12-2008, 08:28
Сейчас внимательнее посмотрел на скрипты Vic_ing, и меня удивляет другое:
/usr/local/sbin/wshaper-viс

# PRIO3 --- torrents will fly with laggage ToS=0x3f and ports 4663 + 21760-22015 ---
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip tos 0x3f 0xff \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 0x5500 0xff00 \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 4663 0xffff \
flowid 1:30
# if they won't - i don't care - they'll go to 1:20 (default)

Как это согласуется с /usr/local/sbin/shape.sh:

#UDP (emule)
tc filter add dev $DEV parent 1: prio 5 $U32 $DPORT 13767 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $SPORT 13767 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $UDP $DPORT 4672 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $UDP $SPORT 4672 0xffff classid 1:30


Я далеко не специалист в этих вопросах, но все таки интересно.

residend
06-12-2008, 11:26
Сейчас внимательнее посмотрел на скрипты Vic_ing, и меня удивляет другое:
/usr/local/sbin/wshaper-viс

Cd_spb, так мой вопрос как раз про это и был!!! )))

Vic_ing
07-12-2008, 01:02
Cd_spb, так мой вопрос как раз про это и был!!! )))

Пардон коллеги :))
В этом месте вылез как раз огрех скрещивания моего старого шейпера и шейпера king-а.
В shape.sh попало то, что было у меня
#UDP (emule)
tc filter add dev $DEV parent 1: prio 5 $U32 $DPORT 13767 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $SPORT 13767 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $UDP $DPORT 4672 0xffff classid 1:30
tc filter add dev $DEV parent 1: prio 5 $U32 $UDP $SPORT 4672 0xffff classid 1:30
тут 13767 - это входящий порт моего торрента а 4672 - входящий порт емула. Вместо них нужно поставить те порты, которые вы прокидываете для своих торрентов и мулов.

А вот уже в wshaper-vic попал кусок от king
# PRIO3 --- torrents will fly with laggage ToS=0x3f and ports 4663 + 21760-22015 ---
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip tos 0x3f 0xff \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 0x5500 0xff00 \
flowid 1:30
tc filter add dev $WAN parent 1:0 protocol ip prio 5 u32 \
match ip sport 4663 0xffff \
flowid 1:30
# if they won't - i don't care - they'll go to 1:20 (default)

тут исходящие порты (sport там) 4663 и 21760-22015.
4663 по большому счету не нужен, как я понимаю? можно строчку удалить
а вот 21760-22015 прописываются в настройках торрента на закладке advanced - net.outgoing_port = 21760, net.outgoing_max_port=22015.

residend
09-12-2008, 01:11
Вообщем "поигрался" я со скриптами с этой темы в течении месяца уже, но ни с одного так и не удалось добиться того, чтобы http был действительно приоритетным, всё вроде работает и торрент пропатчил, но не получается никакими способами у торента отобрать максимальную полосу (из 4-х мегабит получается где-то 1-1,5 мегабит на http) причём как не крути, но торент в любом положении занимает минимум 70% канала, хотя по логам, шейпер трафик правильно определяет и всё ходит через нужные классы.

В связи с этим вопрос к знатокам, реально ли отбирать на http (и другой приоритетный трафик) максимально возможную полосу (минимум 90%), чтобы работа торентов не сказывалась на комфорте работы в сети? Просто уже не знаю в какую сторону и копать то... (или это занятие безперспективно и результата с данными шейперами не добиться и надо придумывать что-то сугубо новое?)

PS: Отдельное спасибо Vic_ing за то, что откликнулся на мои вопросы! :)

lastwalrus
09-12-2008, 14:45
Хм..может я чего то не знаю..

Смысл всего этого в том, что это дало мне уверенность, что торрент (а их в локалке пара запущена) попадёт или в 1:30 класс, или, если что-то недоработал, в 1:20, по умолчанию.
http, ACK, ping, SSh всегда будут в других, более приоритетных классах
вроде работает...


Класс 1:30 Не работает и не может работать :D
В твоём shape.sh правила "#UDP (emule)" имеют prio 5, а строчки чуть ниже prio 4(!)
так что всё будет валиться в 1:20

-------
# other traffic goes to default 1:20
tc filter add dev $DEV parent 1:0 protocol ip prio 4 u32 \
match ip dst 0.0.0.0/0 flowid 1:20
-------

Вот ктобы подсказал как правильно подбирать параметры burst(да и rate). Особенно если линия всего 128kbit.

Vic_ing
09-12-2008, 17:16
Класс 1:30 Не работает и не может работать :D
В твоём shape.sh правила "#UDP (emule)" имеют prio 5, а строчки чуть ниже prio 4(!)
так что всё будет валиться в 1:20
-------
# other traffic goes to default 1:20
tc filter add dev $DEV parent 1:0 protocol ip prio 4 u32 \
match ip dst 0.0.0.0/0 flowid 1:20
-------
Вот ктобы подсказал как правильно подбирать параметры burst(да и rate). Особенно если линия всего 128kbit.

Спасибо за замечание!!)
На работу это сильно не сказывалось из-за сильно урезанного 1:20.
Но теперь да, надо исправить приоритет и заработает и 30.

Спасибо за вопрос про burst.
Я сам себе тоже особо чётко не представлял как он физически отражается, но погуглил чуток и нашел полезную ссылку:
http://www.docum.org/docum.org/tests/htb/burst/
тут товарищ наглядно показал, как влияет burst и Cburst.

Думаю оптимально будет убрать все burst у всех классов, ну максимум оставить немного у HTTP.
Тут правда одно но. когда я убирал значение burst полностью, оно просчитывалось автоматом и ставилось около 8кб кажется
поэтому считаю, что нужно поставить всем классам-детям burst 1кб, для http скажем 50-100кб, и для родительского класса раза в два больше.

ЗЫ: ещё полезного немножко тут нашёл http://xgu.ru/wiki/QoS_в_Linux

residend
09-12-2008, 20:27
так а всё же у кого на сколько эффективны шейперы? У меня торрент всё время занимает минимум 70% полосы, как не крути, не удаётся его никак зажать поближе к нулю...

Vic_ing
09-12-2008, 23:44
так а всё же у кого на сколько эффективны шейперы? У меня торрент всё время занимает минимум 70% полосы, как не крути, не удаётся его никак зажать поближе к нулю...

У меня, когда торрент один, он качает со скоростью 1мбайт\с
Скачивал пару программ по http размером 60-100мб - скорость торрента на глазах падала до 500 кбайт\с.
В принципе это навевало мысль о том, что правила работают.
Проблемы начинались только когда качается много закачек и отдаётся много. В этом случае закачка большого файла проходила нормально, а вот запросы HTTP при серфе инета уже подтормаживали, это кажется было до того как я сильнее урезал burst и rate для торрента и класса по умолчанию...
После этого статистику дать пока не могу - пару раз оказывалось что выключения торрента при сильных тормозах не помогало, видимо был виноват провайдер.
То есть инет вроде работает медленнее, но численно оценить пока не удалось((
Попробую ещё сильнее урезать всем классам burst а родителю (1:1) дать много burst и cburst...

Vic_ing
10-12-2008, 08:19
так а всё же у кого на сколько эффективны шейперы? У меня торрент всё время занимает минимум 70% полосы, как не крути, не удаётся его никак зажать поближе к нулю...

А у тебя какие значения стоят для ceil тех классов, в которые попадает торрент?
Скрипт и на аплод и на даунлод?
У меня скорость не выше ceil - то есть зарезать торрент всегда можно, уменьшив его максимальную скорость. То есть rate и ceil работают, особенно если burst-ов нет :)))

lastwalrus
10-12-2008, 19:16
Спасибо за замечание!!)
На работу это сильно не сказывалось из-за сильно урезанного 1:20.
Но теперь да, надо исправить приоритет и заработает и 30.

Спасибо за вопрос про burst.
...



Кстати, там есть аналогичная ошибка с UDP пакетами. Твой prio для emule опять не сработает, а Udp согласно скрипту будет приоритетный :)

За ссылки спасибо, покурим.

residend
10-12-2008, 21:12
А у тебя какие значения стоят для ceil тех классов, в которые попадает торрент?
Скрипт и на аплод и на даунлод?
У меня скорость не выше ceil - то есть зарезать торрент всегда можно, уменьшив его максимальную скорость. То есть rate и ceil работают, особенно если burst-ов нет :)))

Скрипт и аплоад и даунлоад,
ceil рабоет как надо, но вот rate.... То есть при появлении более приоритетного трафика скорость торента (или другого низкоприоритетного) должна падать до rate, на сколько я понимаю, но этого не происходит, скорость падает на торенте, но не так сильно, как этого хотелось бы - процентов на 30 где-то, rate 1:10 (высокоприоритетный) стоит в 90% от полосы
ceil ставил разные, при ceil = speed вообще полосу не освободить от того же торента, если ниже ставить, то уже получше, но всёравно далеко не то, что надо. А у тебя скорость торента до скольки падает при появлении более высокоприоритетного трафика?


PS: и всётаки, реально ли добиться от шейперов, основаных на wshaper того, чтобы в случае появления трафика с более высоким приоритетом низкоприоритетный трафик почти полностью освобождал полосу для него? Повторюсь, у меня так не получается, ни в одном шейпере с этого форума, максимум чего удаётся выжать, это освобождение 30-50% от полосы (в случае использования торента)

DarthSemafor
12-12-2008, 17:24
Перечитал огромное количество веток про приоритезацию трафика, но так и не понял, что эти скрипты делают именно - режут трафик на части с ограничением по определенным портам или устанавливают приоритет?
Уважаемые форумчане!:) Задача состоит вот в чем: установить приоритеты на даунлоад и аплоад (ограничивать канал не надо!) нижеследующих сервисов согласно пунктам:
1-HTTP (порт 80 - порт веб - сервера снаружи, перенаправлен iptables с внутреннего 8089)
2-ftp
3-rtorrent (качалка внутри роутера) Желательно показать какой - нибудь образец скрипта;)

residend
12-12-2008, 18:20
DarthSemafor,
Прочитай внимательнее эту тему, тут как раз это и обсуждается...

shadowcaster<