PDA

Bekijk de volledige versie : [QoS] Установка и настройка nShaper



Pages : [1] 2 3 4

Iguana
22-03-2008, 04:20
Обновил nShaper до V 0.4.4 - теперь он работает с любыми сборками проши от Энтузиастов, в независимости от давности/свежести
сборки (начиная с r644 и до самой последней ;)) и с любой версией линухового ядра (2.4 (-d) или 2.6 (-rtn))

Файл в незаархивированном виде - можно скачать wget-ом прямо на роутер, переименовать по вкусу, сделать исполняемым
(chmod +x nshaper) и пользоваться. Запускать можно как сервис, я рекомендую из post-firewall - nshaper restart

Версия в аттаче: nShaper FD (для Full Duplex канала) - если кому-нибудь очень сильно нужна будет версия HD
(для Half Duplex канала), я и её исправлю, но не хотелось бы по двум причинам:

во-первых, версии FD и HD не особо отличаются, поэтому я планирую ввести настройку, типа: HD_mode=yes
и в будущем это будет одна версия для обоих типов каналов, а также и некоторые др. дополнительные настройки ;)
во-вторых, опять придётся забросит основную идею и заниматься тупым копированием кода, вместо его исправления и оптимизации :)

Пока это "светлое будущее" не наступило :) выкладываю версию для Half Duplex канала, спасибо SerGri

Пробуйте, комментируйте, критикуйте, высказывайте "хотелки" по добавлению новых ф-ий, по возможности, буду стараться вносить изменения...

V 0.4.4.2:
теперь полностью корректно работает алгоритм определения версии софта на роутере;
строки до 230-ой не изменялись (нумерация строк по v 0.4.4.1) и в дальнейшем изменяться не будут!!! (обновляться стало легче ;))
оператор test заменён на []

! Начиная с версии -rtn-r2837 в проше Энтузиастов работает FastNAT (http://wl500g.info/showpost.php?p=228216&postcount=39) для корректной работы nShaper его необходимо отключить:

nvram set misc_fastnat_x=0
nvram commit && reboot

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

UPDATE 9/2009 Недавно был предложен новый вариант шейпинга траффика, причем,
похоже, довольно эффективно работающий и неплохо проработанный автором.
Дабы данное достойное начинание не затерялось в дебрях темы выношу ссылки на него в заголовок

Обоснование (http://wl500g.info/showpost.php?p=160025&postcount=133)
Использование (http://wl500g.info/showpost.php?p=161206&postcount=138)
Последняя версия от автора на данный момент (http://wl500g.info/showpost.php?p=163042&postcount=230)
Доработанная версия с разделенными файлами конфигурации (http://wl500g.info/showpost.php?p=164785&postcount=290)
Инструкция (http://wl500g.info/showpost.php?p=165841&postcount=302)

ссылки на разлиные версии скрипта (http://wl500g.info/showpost.php?p=187973&postcount=469)

Важно! Для использования данного шейпера нужна прошивка "от энтузиастов" (http://code.google.com/p/wl500g/) новее, чем r644.

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

у нас есть страничка bandwidth management, вроде можно настраивать, но там никакого описания, как это работает.

bash
22-03-2008, 13:10
у нас есть страничка bandwidth management, вроде можно настраивать, но там никакого описания, как это работает.
Ага, вижу строчку... "shape-test filter DEV CLSPREF <u|d> <1|2|3> "prio и условие в формате tc filter" [DISC] [ROOTCLS]".
На этой странице можно указывать толищну канала DL/UL для клиентов, но не приоритет.
Странно, в прошивки от асуса приоритет трафика можно было настроить через WEB :(

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
12-12-2008, 19:08
DarthSemafor
Просто задать скорость получаемых данных на входе нельзя.
Шейпинг трафика - это создание очереди пакетов на выходе из интерфейса. Шейпить в случае "провайдер-клиент" может провайдер в сторону клиента и клиент свой исходящий трафик к провайдеру. Весь остальной трафик (входящие торренты, например) шейпить нельзя, поскольку узким местом будет канал провайдер-клиент, и отправлять клиенту ip пакеты будет провайдер на свое усмотрение.
То, чем пытаются заниматся в данной ветке - это дропать пакеты на входе в интерфейс, когда они уже прошли узкое место. Это тоже имеет некоторый эффект, но не на собсвенно канал, а на приложения, которые корректируют свое взаимодействие по сети в зависимости оп получаемых данных ( http://www.opennet.ru/docs/RUS/linux_base/node354.html ). Советую почитать opennet по теме "Протокол TCP".

DarthSemafor
14-12-2008, 18:02
Спасибо за ответ! Хорошо, задача упрощается: шейпить надо только исходящий трафик в инет. У меня стоит встроенная качалка, поэтому взял за основу скрипт от leniviy (http://wl500g.info/showpost.php?p=88238&postcount=2), заточенный под Авангард. У меня провайдер - Корбина 8000/8000 для начала изменил в пусковом скрипте параметры скорости и убрал MAN. В итоге shape-test выводит следующее:

qdisc ingress ffff:
statistics truncated
qdisc sfq 2e: quantum 1460b perturb 10sec
statistics truncated
qdisc sfq 23: quantum 1460b perturb 10sec
statistics truncated
qdisc sfq 22: quantum 1460b perturb 10sec
statistics truncated
qdisc sfq 21: quantum 1460b perturb 10sec
statistics truncated
qdisc htb 1: r2q 10 default 555 direct_packets_stat 7
statistics truncated
class htb 1:22 parent 1:20 leaf 22: prio 2 rate 2460Kbit ceil 8200Kbit burst 4747b cburst 12094b
Sent 267102 bytes 645 pkts (dropped 0, overlimits 0)
rate 4bps
lended: 645 borrowed: 0 giants: 0
tokens: 12185 ctokens: 9391

class htb 1:23 parent 1:20 leaf 23: prio 3 rate 820Kbit ceil 8200Kbit burst 2648b cburst 12094b
Sent 78281754 bytes 56388 pkts (dropped 0, overlimits 0)
rate 449Kbit 41pps
lended: 48293 borrowed: 8095 giants: 0
tokens: 7014 ctokens: 8349

class htb 1:20 root rate 8200Kbit ceil 8200Kbit burst 12094b cburst 12094b
Sent 88304835 bytes 291649 pkts (dropped 0, overlimits 0)
rate 73525bps 379pps
lended: 8095 borrowed: 0 giants: 0
tokens: 9397 ctokens: 9397

class htb 1:21 parent 1:20 leaf 21: prio 1 rate 4920Kbit ceil 8200Kbit burst 7895b cburst 12094b
Sent 190155 bytes 1480 pkts (dropped 0, overlimits 0)
rate 10bps
lended: 1480 borrowed: 0 giants: 0
tokens: 10209 ctokens: 9404

class htb 1:2e parent 1:2f leaf 2e: prio 0 rate 26560bps ceil 26560bps burst 1864b cburst 1864b
Sent 14800 bytes 370 pkts (dropped 0, overlimits 0)
lended: 370 borrowed: 0 giants: 0
tokens: 56289 ctokens: 56289

class htb 1:2f parent 1:20 rate 26560bps ceil 26560bps burst 1864b cburst 1864b
Sent 9565824 bytes 233136 pkts (dropped 0, overlimits 0)
rate 13442bps 326pps
lended: 134846 borrowed: 0 giants: 0
tokens: 55796 ctokens: 55796

class htb 1:2c parent 1:2f prio 0 rate 2656bps ceil 26560bps burst 1625b cburst 1864b
Sent 102960 bytes 2439 pkts (dropped 0, overlimits 0)
rate 74bps 1pps
lended: 2439 borrowed: 0 giants: 0
tokens: 489175 ctokens: 56289

class htb 1:2d parent 1:2f prio 0 rate 7968bps ceil 26560bps burst 1678b cburst 1864b
Sent 9448064 bytes 230327 pkts (dropped 44572, overlimits 0)
rate 12730bps 309pps
lended: 95481 borrowed: 134846 giants: 0
tokens: 153306 ctokens: 55796

Что я делаю не так? Подскажите, пожалуйста.
P.S. Скрипты в аттаче

DarthSemafor
16-12-2008, 19:29
Ап:rolleyes:

residend
21-12-2008, 01:31
Ап:rolleyes:


Ап то оно конечно ап... Но что-то наверно все настроили всё беспроблемно и никто больше не пишет сюда. А вот про эффективность шейпера то же что-то нет никаких ответов. Следовательно 2 варианта, либо всётаки что-то у меня не так в скрипте и вообще в роутере (ну или голове), либо любая модификация wshapera имеет очень малую эффективность (впрочем к этому и склоняюсь, потому как не крути, а оно тупо дропает пакеты, что не выход абсолютно и большого результата при загруженом канале кучей соединений не даст... хм... И какую умную железяку не ставь, динамического распределения трафика без согласования оборудования на другом конце узкого канала не добиться)! :)

temikus
09-02-2009, 09:14
Ап то оно конечно ап... Но что-то наверно все настроили всё беспроблемно и никто больше не пишет сюда. А вот про эффективность шейпера то же что-то нет никаких ответов. Следовательно 2 варианта, либо всётаки что-то у меня не так в скрипте и вообще в роутере (ну или голове), либо любая модификация wshapera имеет очень малую эффективность (впрочем к этому и склоняюсь, потому как не крути, а оно тупо дропает пакеты, что не выход абсолютно и большого результата при загруженом канале кучей соединений не даст... хм... И какую умную железяку не ставь, динамического распределения трафика без согласования оборудования на другом конце узкого канала не добиться)! :)

Вряд ли у всех все беспроблемно.
Лично для меня это достаточно сложно, и кроме того, свалили все в одну кучу. Предлагаю разбить задачу на составляющие.
Для начала решить самую главную задачу (по крайне мере для меня)
Снизить приорететность torrenta, при наличии любого другого трафика.
Исходя из написанного shadowcaster http://wl500g.info/showpost.php?p=123462&postcount=126
шейпить нужно исходящий трафик.

Поэтому логичный вопрос, можно ли с помощью шейпинга исходящего трафика рулить входящим. Иными словами, снизиться ли трафик входящего torrent-а, если при наличии исходящих/входящих http пакетов дропать все исходящие torrent пакеты?
Можно ли дропать с запасом? Т.е. если есть активность по http, то дропать пакеты от torrent некоторое время? (чтобы даже при наличии свободного исходящего канала torrent пакеты не проскальзывали)

Если такое сделать нельзя, то выход я так понимаю один, управлять самим приложением, обрезая ему скорость в зависимости от активности http и др. (такое "не совсем красивое" решение я где то видел, с помощью cron+mldonkey)


Может я конечно в корне не прав, тогда поправте меня плз.

msa100rus
10-02-2009, 17:49
У меня ничего толкового не получилось. И где-то я вполне даже объяснил почему, может быть выше в этой ветке. Т.е. моё мнение - хрен чего от шейпера добъёшься. Но, типа, заглядываю сюда периодически - вдруг я не прав. Вдруг найдется светлая голова... пока что лишь появляются люди у которых тоже не получается и задаются одни и те же вопросы.

rommel.ua
02-04-2009, 16:47
Инструкции по работе с Traffic Control на уровне ядра линукс довольно доходчиво расписаны на www.lartc.org
Собственно оригинальный скрипт wshaper сделали именно эти ребята.
Пробовал я по шагам разбираться с настройкой шейпера и получил некоторый затык:
В самом простом варианте, когда шейпится только исходящий траф на внешнем интефейсе можно использовать их оригинальный wshaper, хотя он принципиально не отличается ни от скриптов от King2, ни от Ленивого.
И тут возникает сложность - некоторые фильтры почему-то не отрабатывают :mad:
Т.е. все летит в дефолтный класс. Указываю match ip src 192.168.0.11 flowid 1:10 , а в итоге все равно поголовно все пакеты летят в 1:20, который указан как дефолт.
Есть подозрение, что нарушаю то ли какие-то соотношения между приоритетами указанными при создании классов и фильтров, то ли последовательность установки фильтров не должна быть произвольной, а как-то привязанной к последовательности создания классов..

UPD: единственный фильтр, который почему-то сработал - это тот, который поднимает приоритет АСК-пакетов. Это становится очевидным, когда пашет торрент (запущенный в LAN) на отдачу. Потому что при открытии страничек без шейпера ждать приходится втрое дольше.

Nikus
15-09-2009, 18:53
Всем доброго дня! Представляю вам небольшое лирическое отступление на тему шейпинга входящего трафика (с помощью IMQ).

В последних версиях svn добавили поддержку очередей esfq. Очередь esfq - по сути та же sfq, но имеет возможность более тонкой настройки, в том числе: регулируемый размер очереди, поддержка хеширования пакетов по ip-адресу источника/назначения, а не только по потокам. Последнее обстоятельство позволяет сбалансировать трафик между пользователями, а не tcp потоками, то есть очередь динамически распределяется поровну между пользователями, вне зависимости от того, кто и сколько работающих потоков в настоящий момент использует.

Напомню, что в правильно настроенном htb шейпере имеются несколько очередей, как правило это очереди для высокоприоритетного, обычного и низкоприоритетного трафика (градаций может быть больше). В первую очередь, как правило, направляют критичный к задержкам трафик, например VoIP потоки, онлайн-трансляции, игровой трафик, и служебный трафик. Во-вторую - к примеру - web и ftp потоки. А в третью - низкоприоритетный трафик торрентов и других качалок, мешающих нормальному серфингу. Всё это работает и с использованием sfq, и работает хорошо, пока пользователей совсем немного и они не мешают друг другу. Другое дело, когда серфить начинают несколько человек одновременно: например, один человек смотрит видеоролики на youtube, а другой скачивает по тому же http толстый дистрибутив качалкой в 10 потоков. Очередь sfq в итоге отдаст 10/11 трафика качающему, а смотрящему ролик придётся подождать. Как быть?

На первый взгляд, можно направить трафик youtube в высокоприоритетную очередь. Но на деле это - плохое решение, так как ролик мгновенно забьёт собой весь доступный приоритетной очереди канал, что приведёт к лагам во всём остальном. Вот тут нас и выручает esfq! Всего лишь заменив в своём шейпере листья дерева
tc qdisc add dev ... sfq perturb 10 на tc qdisc add dev ... esfq hash dst, мы получаем балансировку трафика нашей очереди между пользователями, безотносительно количества потоков.

Для иллюстрации процесса я провёл небольшой эксперимент. На скриншотах приведены графики загрузки файла в один поток, на левом - с параметрами дисциплины sfq perturb 10, на правом - esfq limit 128 depth 128 hash dst. В некоторый момент времени (примерно 0.4 от начала) на соседнем в сети компьютере стартует загрузка другого файла, в три потока.

http://s06.radikal.ru/i179/0909/7f/1be91f950f7f.png http://i064.radikal.ru/0909/87/565fa487f847.png

Как видим, в первом графике трафик делится в среднем по соотношению количества потоков (1:3), а график загрузки нестабильный, за счёт параметра perturb. Параметр perturb нужен затем, чтобы каждые 10 секунд случайным образом давать фору тем или иным потокам, с целью предотвращения "замирания" под давлением других потоков и последующего разрыва соединения по тайм-ауту.

Совсем другая картина во втором графике, здесь трафик делится строго поровну. Так сказать, мы построили коммунизм в отдельно взятой очереди :).Более того, на правом графике, в момент времени около 0.8, на втором компьютере была инициирована загрузка ещё одного файла в три потока, таким образом соотношение потоков составило 1:6. Это привело лишь к кратковременному проседанию производительности на первом компьютере (и от этого тоже можно избавиться, зарезав параметр burst на htb подклассе, к которому привязана наша очередь, до нужного значения, либо нарастив размер очереди). Красота, одним словом :)

А есть ли какие-либо альтернативы esfq? Оказывается, есть, но со своими достоинствами и недостатками. Альтернатива звучит так: вместо конечной дисциплины к нашей ветке среднеприоритетного трафика подключаем ещё N подклассов htb и очередей sfq, по количеству пользователей, каждому из которых устанавливаем rate = parent.rate/N и ceil = parent.ceil, таким образом мы поделили канал на всех пользователей поровну. Далее по скрипту, в разделе фильтров, сначала сортируем высокоприоритетный и низкоприоритетный трафик по своим очередям, а оставшийся трафик считаем среднеприоритетным и сортируем его согласно ip-адресу получателя по N очередям. Такая конструкция тоже должна заработать, однако, здесь есть недостатки:
усложнённый код шейпера, разросшееся дерево классов и некоторое снижение производительности;
необходимость модификации шейпера при каждом добавлении пользователя в сеть;
необходимость использования статичных ip адресов в сети.

Для устранения указанных недостатков, теоретически можно было бы заставить dhcp сервер при выдаче ip адреса модифицировать шейпер, но это очень и очень непросто. Зато есть и плюсы: в плане потребления трафика здесь не коммунизм, но тонкая настройка по rate/ceil и prio подклассов, таким образом есть возможность поощрять одних пользователей и угнетать других.

Решение же с esfq не только более экономично с точки зрения использования ресурсов, но и является единственным средством справедливого управления трафиком в сети с переменной структурой, например, в сети кафетерия с точкой доступа WiFi. Также это решение является простым в написании и отладке и надёжным в использовании.

theMIROn
15-09-2009, 19:58
Здорово было бы еще how-to написать с использованием esfq

igor77777
15-09-2009, 21:44
Всем доброго дня! Представляю Вам небольшое лирическое отступление на тему шейпинга входящего трафика (с помощью IMQ).

А что нужно чтобы поставить это на наш роутер (какая прошивка и т.д. и т.п.)?

Будет-ли это работать, если торрент-качалка(rTorrent) и просто-качалка(ADOS или Download Engine) стоят на роутере?

Nikus
15-09-2009, 22:09
А что нужно чтобы поставить это на наш роутер (какая прошивка и т.д. и т.п.)?

Будет-ли это работать, если торрент-качалка(rTorrent) и просто-качалка(ADOS или Download Engine) стоят на роутере?Нужна последняя прошивка 1.9.2.7-d-r566. Она даёт поддержку IMQ с возможностью фильтрации за NAT, то есть становится возможным шейпить трафик и качалке тоже. Работоспособный скрипт для настройки шейпера я написал, сейчас он проходит обкатку, после чего выложу его сюда :), и, возможно, напишу небольшой how-to по написанию собственного шейпера, пока свежи впечатления.

igor77777
16-09-2009, 05:01
Работоспособный скрипт для настройки шейпера я написал, сейчас он проходит обкатку, после чего выложу его сюда :), и, возможно, напишу небольшой how-to по написанию собственного шейпера, пока свежи впечатления.

Жду с нетерпением скрипт.
И пожалуйста, напишите how-to, а то потом забудется и лень будет.

PS: Моё решение по ограничению прожорливого до трафика rTorrenta, я тоже предпалагаю выложить в ближайшем будущем. Но мне самом оно кажется полумерой или даже четвертьмерой. :-(

Nikus
23-09-2009, 05:32
Обкатал я свой шейпер, результатом доволен: круглосуточно без запинок играет инет-радио, rtorrent работает без ограничений на всю доступную ширину канала, как на приём так и на передачу, ролики с rutube грузятся практически не замечая rtorrent'a :cool:

Ha HowTo меня так и не пробило :( Чукча не писатель, чукча читатель...
Инфы для написания шейпера с нуля нужно перелопатить не так много, но она довольно тяжёлая, и как всё это доходчиво и понятно объяснить в нескольких абзацах, я не знаю... Могу порекомендовать ссылку Повесть о Linux и управлении трафиком (http://gazette.linux.ru.net/rus/articles/taleLinuxTC.html) (Иван Песин) - лаконичная, но тем не менее подробная и доступно написанная обзорная статья, с примерами и прочим (раздел про CBQ можно не читать). Писал свой скрипт, можно сказать, по ней :)
Может быть, если сложится дискуссия в ветке (я постараюсь ответить на любые вопросы по QoS), из неё потом можно будет нарезать FAQ или даже HowTo.

За сим публикую исходный код (http://wl500g.info/attachment.php?attachmentid=5447&stc=1&d=1253715682) своего творения (назвал я его nShaper), в скрипте довольно много комментариев, разобраться, думаю, по ним будет не сложно, однако знание shell и английского языка, а также прочтение вышеуказанной статьи категорически приветствуются. В архиве лежит модуль sch_esfq.o (ядро 2.4.37.5) - для работы очередей esfq (зачем они нужны - см. выше). В настоящий момент модуль не входит в официальную версию прошивки, так как занимает почти 10 килобайт места, но если будут положительные отзывы, думаю, его добавят.

Так как я писал скрипт под своего провайдера :rolleyes:, то nShaper имеет поддержку локальных (пиринговых) зон провайдера. Сделано это для того, чтобы локальный трафик не забивал собой Интернет-трафик (в нашем городе ADSL провайдер вытворяет всякое, в прошлом году порезал всем профили под 2 мегабита, в этом году "исправился", увеличил ограничения до 8-ми, но всё равно при активном использовании локальных ресурсов внешка "зажимается"). Таким образом, с шейпером можно без ограничений использовать локальные ресурсы без риска потерять в скорости интернета. Принадлежность пакетов к той или иной зоне определяется списками ip адресов сетей, лежащих в файлах, по одному для каждой зоны (решение позаимствовал с этого форума :)).

Разобравшись с локальным трафиком, шейпер сортирует принятые данные по 5 очередям (согласно правилам, перечисленным в конце скрипта), каждая из которых имеет свой приоритет и гарантированную полосу пропускания (настраиваются в начале скрипта). То же самое справедливо и для шейпера исходящего трафика, за исключением того, что локальные зоны здесь не учитываются (в ADSL исходящий канал и так узкий, поэтому искусственных ограничений у провайдера нет).

Конструктор правил получился довольно гибкий (в скрипте есть справка по использованию) и отзывчивый (ругается в консоль на некорректные правила).

Опишу вкратце процедуру установки. Во-первых, надо убедиться, что прошивка роутера имеет версию 1.9.2.7-d-r527 или более позднюю. Далее надо распаковать файлы в угодное вам место, и отредактировать скрипт по своему усмотрению. Если имеются зоны льготной тарификации, создать для каждой зоны текстовые файлы со списками сетей (обычно их можно найти на сайте провайдера).

У меня подключен винчестер с rtorrent и прочими прибамбасами, поэтому я положил скрипт в /opt/etc/init.d, файлы со списками сетей имеют имена вида /opt/etc/nshaper/ip_[имязоны].lst, а модуль sch_esfq.o находится в /opt/lib/modules/2.4.37.5.
Важно: если ваши пути отличаются от указанных, то найдите в тексте скрипта эти пути и замените на свои. Модуль sch_esfq не является обязательным: при его отсутствии скрипт будет использовать очереди sfq.

Таким образом, у меня шейпер запускается однократно после загрузки и два раза в сутки рестартиться из cron'a (мой провайдер практикует "ночное удвоение").

Теоретически, в случае отсутствия флешки, можно установить шейпер в /etc, благо весит он немного, да и я при написании старался пользоваться только самыми стандартными средствами. Но не проверял.

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

За сим разрешите откланяться.

igor77777
23-09-2009, 08:21
Обкатал я свой шейпер, результатом доволен: круглосуточно без запинок играет инет-радио, rtorrent работает без ограничений на всю доступную ширину канала, как на приём так и на передачу, ролики с rutube грузятся практически не замечая rtorrent'a :cool:


Класс, это то, что я хочу.

Несколько вопросов. Возможно, ответы на некоторые нужно добавить в Ваше предыдущее сообщение.

1. Нужно ли что-то делать с модулем sch_esfq.o? Как-нибудь его подключать? Если нужно, то как?

2. Если происходит разрыв/переподключение ppp0 или vlan1 интерфейсов (у меня интернет через ppp0 и провайдер практикует частую смену ip), нужно ли перезапускать шейпер?

И вопрос, не относящийся к конкретно к шейперу.
3. Сейчас у меня олеговская прошивка 1.9.2.7-10.7 и настроен различный софт. При прошивке на 1.9.2.7-d-r527, нужно будет сбрасывать все настройки и/или переставлять софт?

theMIROn
23-09-2009, 08:26
3. Сейчас у меня олеговская прошивка 1.9.2.7-10.7 и настроен различный софт. При прошивке на 1.9.2.7-d-r527, нужно будет сбрасывать все настройки и/или переставлять софт?
несмотря на то, что совсместимость по настройкам порядка 99%, сброс в по-умолчанию, все же, желателен.
переставлять софт из optware скорее не придется

Nikus
23-09-2009, 08:59
1. Нужно ли что-то делать с модулем sch_esfq.o? Как-нибудь его подключать? Если нужно, то как?
Или Вы невнимательно прочли, или я невнятно выразился... Пост поправил.

2. Если происходит разрыв/переподключение ppp0 или vlan1 интерфейсов (у меня интернет через ppp0 и провайдер практикует частую смену ip), нужно ли перезапускать шейпер?У меня как раз проблем с разрывами не было, и ip постоянный, поэтому сейчас правила написаны так, что перезапускать придётся. Однако, можно выделять не роутерный трафик из общей кучи, а транзитный, правила будут немного сложнее, но попробовать можно.

igor77777
23-09-2009, 10:07
Если возникнут какие-то проблемы - пишите, постараемся решить. Если шейпер вам понравился, но не хватает какой-нибудь функциональности - сообщайте, подумаем.


А расшифруйте эту строку:

# "inet" zone means everything not matched with other zones
WAN_ZONES="inet cn z2 z0"
Связана она как-то с этой:

WAN_ZONES_DN_RATE="1900 1900 1900 $WAN_DN_RATE"

И при запуске скрипта: ветка restart совпадает со start. Это правильно?

Nikus
23-09-2009, 16:57
А расшифруйте эту строку:

# "inet" zone means everything not matched with other zones
WAN_ZONES="inet cn z2 z0"
Связана она как-то с этой:

WAN_ZONES_DN_RATE="1900 1900 1900 $WAN_DN_RATE"
WAN_ZONES - список пиринговых зон (каждая имеет свою скорость) + ссылка на оставшийся интернет. Имена произвольны, кроме ссылки inet. Эти имена потом используются при чтении файлов со списками IP сетей для каждой зоны. WAN_ZONES_DN_RATE - скорости загрузки с этих зон.

Для чего это сделано. Мой провайдер предоставляет канал 8МБит, куда входит инет трафик (2МБит по тарифу), пиринг с сетью cn.ru (ещё 2МБит), зона локальных ресурсов zone2 (ещё 2 МБит), зона локальных ресурсов zone0 (со скоростью 8 МБит). Все эти скорости выдерживаются провайдерским шейпером независимо друг от друга. Естественно, что одновременно эти зоны с полной скоростью работать не смогут, так как суммарная скорость всех полос 2+2+2+8 превышает пропускную способность канала в целом WAN_DN_RATE=8МБит. Поэтому возникла необходимость раздать приоритеты трафику на этом уровне, чтобы z0 уступал трафик остальным зонам, в первую очередь зоне inet. Именно поэтому зоны перечислены в таком порядке (сначала идут высокоприоритетные зоны, потом - низкоприоритетные).

Обратите внимание, что скорости в списке - 1900 а не 2048. Сделано это с тем, чтобы очередь наполнялась у нас в роутере, а не в оборудовании провайдера. Только в этом случае возможен шейпинг.


И при запуске скрипта: ветка restart совпадает со start. Это правильно?Так и должно быть, ветка start предусмотрительно чистит предыдущую конфигурацию.

P.S. По поводу п.2 предыдущего сообщения, я переписал правила скрипта без использования ip адреса WAN, так что теперь смена адреса на шейпинг не влияет, и рестарт не требуется. Обновленный скрипт выложил там же.

igor77777
23-09-2009, 20:33
WAN_ZONES - список пиринговых зон (каждая имеет свою скорость) + ссылка на оставшийся интернет. Имена произвольны, кроме ссылки inet. Эти имена потом используются при чтении файлов со списками IP сетей для каждой зоны. WAN_ZONES_DN_RATE - скорости загрузки с этих зон.

Что-то я запутался.
Какие значения мне присвоить этим переменным, если у меня есть только интернет, с параметрами dlrate=777 килобит, uprate=824 килобит (ограничен каналом).
Я предпалагаю такие параметры:
WAN_DN_RATE=724
WAN_UP_RATE=824
WAN_ZONES="inet"
WAN_ZONES_DN_RATE="$WAN_DN_RATE"

Но мне непонятно. Как я понял по вашему скрипту.
Корневому классу Вы устанавливаете скорость WAN_DN_RATE, а также получается что и для z0, Вы тоже устанавливаете скорость WAN_DN_RATE. Это правильно? или я что-то недопонял?

PS: Это вопрос не на ровном месте, мой провайдер тоже предоставляет доступ к т.н. "Домашней сети", где скорость dlrate ограничена скоростью модема. И нужно будет настраивать аналогичную функциональность.

Nikus
23-09-2009, 21:12
Что-то я запутался.
Какие значения мне присвоить этим переменным, если у меня есть только интернет, с параметрами dlrate=777 килобит, uprate=824 килобит (ограничен каналом).
Я предпалагаю такие параметры:
WAN_DN_RATE=724
WAN_UP_RATE=824
WAN_ZONES="inet"
WAN_ZONES_DN_RATE="$WAN_DN_RATE"
Так всё-таки, 777 или 724 на приём? По моим тестам нужно писать скорость на 5-10% меньше заявленной провайдером. А в целом все верно.

Но мне непонятно. Как я понял по вашему скрипту.
Корневому классу Вы устанавливаете скорость WAN_DN_RATE, а также получается что и для z0, Вы тоже устанавливаете скорость WAN_DN_RATE. Это правильно? или я что-то недопонял?
Давайте так:
WAN_DN_RATE - максимальная долговременная скорость загрузки по интерфейсу WAN, обычно ограниченная скоростью подключения модема ADSL, либо профилем ADSL на модеме провайдера, либо (если используется Ethernet) пропускной способностью предоставляемого порта.
WAN_ZONES_DN_RATE - максимальная долговременная скорость загрузки по каждой зоне, при условии отсутствия активности с узлами в других зонах.

В моём случае я могу в зоне z0 достичь полной загрузки имеющегося канала. Потому и цифры равны.

Sensei
23-09-2009, 23:01
Nikus, во-первых Спасибо! Это первый шейпер который у меня нормально заработал сразу. Зоны пиринга прописал, в крон прописал, т.к. ночью тоже есть удвоение.

Настроил так:

# Zone order represents their priority, decreasing from the first to the last

# WAN port real rate (dsl or ppp download/upload)
WAN_DN_RATE=10750
WAN_UP_RATE=2150

# "inet" zone means everything not matched with other zones
WAN_ZONES="inet peering"

# I've got double speed for inet and cn zones at night between 1:00-8:00
if test `date +%H` -ge 1 -a `date +%H` -lt 8; then
WAN_ZONES_DN_RATE="4200 $WAN_DN_RATE"
else
WAN_ZONES_DN_RATE="2100 $WAN_DN_RATE"
fi

Скорость на порту 10750/2150 Кбит
Интернет днем 2200/600 Кбит, ночью (с 1 до 8) 4400/1000Кбит
Пиринг по входящей не ограничен никак, на отдачу 1000Кбит в любое время.

Вопрос: Необходимо ли мне что-либо добавлять в настройки, т.к. провайдер ограничивает исходящий траффик?

Nikus
23-09-2009, 23:59
Sensei, на здоровье! Приятно слышать столь добрый отзыв. :)

Насчёт WAN_DN_RATE=10750 / WAN_UP_RATE=2150 я бы поостерёгся, и вот почему: мой модем подключен на скорости 8192/1560+, а скорость скачивания с локальных ресурсов не превышает 800 кбайт/сек. После точных замеров оказалось, что реальная ПСП равна 6400 кбит (уж не знаю чем она ограничена), поэтому я себе установил WAN_DN_RATE=6200. Если установить 6400 и выше, то очереди шейпера банально не успевают наполняться, график загрузки становится рваным, а эффект от шейпера - стремящимся к нулю. Если же, к примеру, я прописываю для inet скорость 2048 вместо 1900, то rtorrent не хочет делиться каналом, по тем же причинам. Смею предположить, что подобное может иметь место и в Вашем случае, поэтому советую измерить реальную ПСП канала.

Скорость на порту 10750/2150 Кбит
Интернет днем 2200/600 Кбит, ночью (с 1 до 8) 4400/1000Кбит
Пиринг по входящей не ограничен никак, на отдачу 1000Кбит в любое время.

Вопрос: Необходимо ли мне что-либо добавлять в настройки, т.к. провайдер ограничивает исходящий траффик?К сожалению, текущая реализация шейпера не предусматривает приоретизацию по зонам для исходящего трафика (так как не было необходимости). А теперь, раз появились первые положительные результаты, можно попробовать доработать. :)

AndreyUA
24-09-2009, 00:15
А тут

if test `date +%H` -ge 1 -a `date +%H` -lt 8; then
WAN_ZONES_DN_RATE="1900 1900 1900 $WAN_DN_RATE"
не нужно $WAN_DN_RATE умножать на два?

Nikus
24-09-2009, 04:57
А тут

if test `date +%H` -ge 1 -a `date +%H` -lt 8; then
WAN_ZONES_DN_RATE="1900 1900 1900 $WAN_DN_RATE"
не нужно $WAN_DN_RATE умножать на два?На 2 умножать надо только те зоны, для которых провайдер обещает ночное удвоение. Как правило это только интернет (мой провайдер - исключение, всё не могут договориться о нормальном пиринге с конкурентами из cn)

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

# WAN port real rate (dsl or ppp download/upload)
WAN_DN_RATE=8192
WAN_UP_RATE=1500

# Set rate to value 5-10% less than measured, if real rate is less than rate
# in list below, the shaper will not work properly!
# I've got double speed for inet and cn zones at night between 1:00-8:00
if test `date +%H` -ge 1 -a `date +%H` -lt 8; then
WAN_ZONES_DN_RATE="1900 1900 1900 6200"
else
WAN_ZONES_DN_RATE=" 950 950 1900 6200"
fi
Иными словами, WAN_DN_RATE - это "железная" скорость порта, задаётся в соответствии с максимальным значением скорости всего потока. Меньше ставить не рекомендуется - при скорости входного потока, превышающей это значение, "лишние" с точки зрения шейпера пакеты будут дропаться, а это плохо. WAN_UP_RATE, напротив, должен быть несколько ниже реальной скорости. Совсем ненамного, но достаточно для того, чтобы в модеме не скапливалась очередь на передачу.

WAN_ZONES_DN_RATE - это гарантированная скорость до каждой зоны за вычетом нескольких процентов "на манёвры". Чем этот запас выше, тем оперативней будут наполняться очереди шейпера, тем более чутко он сможет присматривать за трафиком и реагировать на конъюнктуру, тем быстрее "разогреется" приоритетный поток. Например, rtorrent использует канал по полной, а вы в броузере запускаете видеоролик на воспроизведение. Тогда скорость загрузки ролика начнёт плавно нарастать от 0 до номинала, и время этого нарастания сильно зависит от этого запаса "на манёвры", 7% при моих скоростях хватает за глаза, можно и меньше, но нервы дороже :), а при слишком малом запасе приоритетный трафик может так и не выйти на номинал.

Добавил поддержку шейпинга исходящего трафика по зонам, вот выкладываю версию 0.3 5450, прошу желающих протестировать, ибо мне не на чем...

igor77777
24-09-2009, 05:08
Так всё-таки, 777 или 724 на приём? По моим тестам нужно писать скорость на 5-10% меньше заявленной провайдером. А в целом все верно.

Скорость нисходящего соединения в модеме около 8000мегабит, восходящий 824 килобит. В соответствии с тарифом (DISEL BOOM 777) нисходящий канал ограничен провадером до 777 килобит. По наблюдениям - восходящий канал ни чем не ограничен.
В соответствии с рекомендациями я вписал значение меньшее чем есть. Т.е. 777 -> 724, а 824 -> 800.
Кстати, нужно ли самому ограничивать восходящий канал? Если нужно то тоже на 5-10 %

А вообще, супер. Работает. То что, пробовал раньше не работало или криво работало.
Даже сам пытался написать костыль для ограничения rTorrent'а при наличии форвардного трафика.
Но теперь похоже проблема решена.
Ваш шейпер - работает. :-)

Осталось параметры довести до оптимума.


ой, не прочитал последнее сообщение.
Т.е. теперь должно получиться:
WAN_DN_RATE=777
WAN_UP_RATE=824
WAN_ZONES="inet"
WAN_ZONES_DN_RATE="724"

Но остался вопрос по ограниченичени исходящей скорости. Нужно ставить меньше скорости канала или нет?

Nikus
24-09-2009, 05:55
Ваш шейпер - работает. :-)

Осталось параметры довести до оптимума.
Я рад :) Согласно последним эмпирическим данным, код должен выглядеть вот так:

WAN_DN_RATE=8000
WAN_UP_RATE=800
WAN_ZONES="inet"
WAN_ZONES_DN_RATE="724"
# начиная с версии 0.3
WAN_ZONES_UP_RATE="800"


Кстати, нужно ли самому ограничивать восходящий канал? Если нужно то тоже на 5-10 %Нужно. Иначе исходящая очередь переедет из роутера в модем, и время прохождения передаваемых пакетов значительно увеличится. Ограничивать общим параметром WAN_UP_RATE.

Желаю Вам дальнейших успехов с настройкой локальной зоны ;)

igor77777
24-09-2009, 08:03
А ещё такой вопрос.
При экспериментах, ещё с версией 0.2 заметил такую вещь.
При отсутсвии загрузки каналов (rTorrent стоит, радио молчит)
ping ya.ru составляет ~20-30 mc
При максимальной загрузке каналов (rTorrent качает, радио играет, странички грузятся)
ping ya.ru подскакивает больше 100 mc
Это нормальное поведение пинга? Он же вроде попадает в самую высокоприоритетную очередь.

PS: "каналов" - это имеется ввиду:
1 канал - upload
2 канал - download

GDR
24-09-2009, 08:39
Спасибо Nikus за новый вариант шейпера. Но появились вопросы.
Прошивка 566, статический ip.
Смотрю как получается значение MTU


MTU=`nvram get wan_pppoe_mtu 2>/dev/null`



[admin@WL500G root]$ nvram get wan_pppoe_mtu 2>/dev/null
1492


Далее по коду альтернативный метод получения переменных, если что-то не заполнено. В частности MTU. Но этот код не выполняется, т.к. все переменные в моем случае заполнены.



tmp=`ip link show $WAN_IF`
tmp=${tmp#*mtu }
MTU=${tmp%% *}



[admin@WL500G root]$ ip link show vlan1
5: vlan1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff


Получается в одном случае 1492 - в другом 1500.
Где правильнее?

GDR
24-09-2009, 12:19
Всем кому интересно посмотреть, что происходит с трафиком в классах.
Нашел неплохой скрипт tc-viewer (http://pawilcz.eu/tc-viewer/tc-viewer.html).

Требует наличия perl5 (можно поставить ipkg install perl).
Вешать на интерфейсы imq0 - входящий трафик, imq1 - исходящий трафик. На оба сразу - не получается.

Надеюсь этот скрипт будет полезен.

Nikus
24-09-2009, 14:13
Нашёл небольшую багу, после каждой строчки
bw=$((bw - rate)) следует добавить строчку
if test $bw -eq 0; then bw=1; fiСправедливо для любой версии.

igor77777, у меня пинг до ya.ru на холостом ходу выше 70 :)
Попробуйте сильней ограничить исходящий канал, например так:

WAN_UP_RATE=770
WAN_ZONES_UP_RATE="700"

GDR, благодарю за скрипт :) я как раз искал такой.
Если не используются ни PPPoE, ни PPTP/L2TP, то mtu по идее должен
равняться 1500. А что выдаёт команда `nvram show | grep mtu`?

Sensei
24-09-2009, 15:09
Попробовал новую версию скрипта, все вроде бы работает, исходящий тоже шейпится.

Настроил теперь так:



WAN_DN_RATE=10752
WAN_UP_RATE=2048
#
WAN_ZONES="inet peering"
#
if test `date +%H` -ge 1 -a `date +%H` -lt 8; then
WAN_ZONES_DN_RATE="4128 10240"
WAN_ZONES_UP_RATE="950 1000"
else
WAN_ZONES_DN_RATE="2064 10240"
WAN_ZONES_UP_RATE="570 1000"
fi


Смущает что в лог пишет:

Sep 24 15:31:25 rc.unslung: start service /opt/etc/init.d/S15nshaper
Sep 24 15:31:25 kernel: Hooking IMQ after NAT on PREROUTING.
Sep 24 15:31:25 kernel: Hooking IMQ before NAT on POSTROUTING.
Sep 24 15:31:25 kernel: HTB init, kernel part version 3.17
Sep 24 15:31:26 kernel: HTB init, kernel part version 3.17
Sep 24 15:31:26 kernel: HTB: quantum of class 20200 is small. Consider r2q change.
Sep 24 15:31:26 kernel: HTB: quantum of class 20203 is small. Consider r2q change.
Sep 24 15:31:26 kernel: HTB: quantum of class 20204 is small. Consider r2q change.

P.S. Красные строчки появляются после выполнения /opt/etc/init.d/S15nshaper restart (я добавил S15 к названию для автозапуска)

GDR
24-09-2009, 16:17
Nikus

Вот все, что есть из настроек. Как и говорил ip у меня статический, подключение к сети провайдера напрямую без всяких PPoE

[admin@WL500G root]$ nvram show | grep mtu
size: 12539 bytes (20229 left)
wan_pppoe_mtu=1492
wan0_pppoe_mtu=1492

Nikus
24-09-2009, 18:33
GDR, ну тогда придётся уходить от использования nvram. Сотри эти 4 строчки, и последующую конструкцию if..fi. В следующей версии так и будет.

Sensei, это warning'и и на них не обращай внимания - это HTB ругается на то,что не сможет прецизионно шейпить низкоприоритетные классы, которым досталась гарантированная пропускная способность в 1 кбит.

Less
24-09-2009, 19:32
Строка 191

insmod /opt/lib/modules/2.4.37.5/sch_esfq.o > /dev/null 2>&1
смысла в таком пути нету можно просто положыть в тот же

/opt/etc/nshaper
и загружать insmod /opt/etc/nshaper/sch_esfq.o

Nikus
24-09-2009, 19:43
Строка 191

insmod /opt/lib/modules/2.4.37.5/sch_esfq.o > /dev/null 2>&1
смысла в таком пути нету можно просто положыть в тот же

/opt/etc/nshaper
и загружать insmod /opt/etc/nshaper/sch_esfq.o
Можно. Но никто и не говорил что так делать нельзя :)

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

GDR
25-09-2009, 13:07
Nikus

Мне непонятно, как правильно определять скорость в скрипте.

Вот мои данные. Есть только группа inet интерфейс imq0, никаких остальных групп нет.


root < 980Kbit - 980Kbit > 1.5 kbit/s ( 3pps)
all < 900Kbit - 900Kbit > 1.5 kbit/s ( 3pps)
time < 90Kbit - 810Kbit > 0.8 kbit/s ( 2pps)
high < 180Kbit - 810Kbit > 0.0 kbit/s ( 0pps)
middle < 450Kbit - 810Kbit > 0.0 kbit/s ( 0pps)
low < 90Kbit - 810Kbit > 0.3 kbit/s ( 0pps)
lazy < 90Kbit - 810Kbit > 0.3 kbit/s ( 0pps)


root - это скорости определенные переменой WAN_DN_RATE=980.
all - определена переменной WAN_ZONES_DN_RATE="930"

Вопрос 1-й - зачем определять скорость WAN_DN_RATE равной максимальной ширине канала, если определяем дочерний класс со скоростью, меньшей на 5-7% как положено?
Предполагаю, что для других зон, которых у меня нет, но и для них должно действовать ограничение на 5-7% для корректной работы шейпера.

Вопрос 2-й - зачем при определении классов для 5-ти полос интернета для параметра ceil мы указываем 90% от rate? Почему не указать полный rate родительского класса. В моем случае вместо 810 указать 900.

Воспрос 3-й - есть ли у вас практические и жизненные советы по оптимизации работы шейпера? Интересует быстродействие переключения при появлении дугого вида трафика (burst и т.п.) и т.д?

Nikus
25-09-2009, 17:49
Вопрос 1-й - зачем определять скорость WAN_DN_RATE равной максимальной ширине канала, если определяем дочерний класс со скоростью, меньшей на 5-7% как положено?
Потому что корневой класс 1:1 имеет параметры rate WAN_DN_RATE ceil WAN_DN_RATE. А это значит, что приди к вам на порт трафик со скоростью превышающей ceil, htb грохнет часть пакетов, с тем чтобы ограничить скорость до ceil. Это нас совершенно не устраивает, поэтому WAN_DN_RATE обязательно должен превышать пиковую скорость от провайдера. Какой у Вас тариф? 1024? Вот эта цифра должна быть стоять, как минимум. Можно поставить и 100000кбит, разницы особо не ощутите. А если будут дропы - Вы их увидите командой tc -s qdisc ls dev imq0.


Вопрос 2-й - зачем при определении классов для 5-ти полос интернета для параметра ceil мы указываем 90% от rate? Почему не указать полный rate родительского класса. В моем случае вместо 810 указать 900.
Сразу предупрежу, что указанные цифры взяты мною не с потолка, а являются результатом эмпирических исследований и длительных испытаний под различной нагрузкой. При испытаниях оказалось, что child.ceil < parent.rate гораздо лучше отрабатывает, чем child.ceil = parent.rate. Во-вторых, реально скорость этим параметром (0.9) не ограничивается, просто каждой полосе вводится прививка от жадности, и любые два класса под нагрузкой легко съедят полную скорость ceil корневого класса. Проводя аналогии с жизнью, можно этот параметр назвать антимонопольным законодательством :). В-третьих, в реальности любой класс сможет лишь бесконечно долго приближаться к скорости в 100% канала, так как всегда найдутся другие потребители трафика (например, возвратный канал для того же rtorrent, Вы же не хотите, чтобы скорость отдачи rtorrent'a проседала до нуля каждый раз, когда загружается видеоролик?). В тех. ВУЗе меня учили, что процессы, описываемые такой экспоненциальной зависимостью (например переходные процессы) следует считать завершёнными на 90%, и практика в данном случае хорошо подтверждает теорию. Вы же можете экспериментировать сами, скрипт перед Вами, лицензия GPL, кто мешает? ;) Попробуйте! Может у Вас получится ещё более удачная модель, чем у меня, и она сможет послужить не только Вам, но и обществу.


Воспрос 3-й - есть ли у вас практические и жизненные советы по оптимизации работы шейпера? Интересует быстродействие переключения при появлении дугого вида трафика (burst и т.п.) и т.д?Все свои наработки по оптимизации, давшие положительный результат, я уже включил в код. В частности, это очереди esfq, задание mtu и quantum, оптимальный с моей точки зрения способ задания rate и ceil. До параметра burst я ещё не добрался, о нём и о многом другом можно почитать, например, здесь (http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm#burst). С удовольствием выслушаю Ваши наработки по оптимизации шейпера :)

igor77777
25-09-2009, 18:45
Всем кому интересно посмотреть, что происходит с трафиком в классах.
Нашел неплохой скрипт tc-viewer (http://pawilcz.eu/tc-viewer/tc-viewer.html).

Требует наличия perl5 (можно поставить ipkg install perl).
Вешать на интерфейсы imq0 - входящий трафик, imq1 - исходящий трафик. На оба сразу - не получается.

Надеюсь этот скрипт будет полезен.

Что-то торможу.
perl стоит.
пытаюсь запустить срипт, он мне в ответ пишет:

./tc-viewer
/bin/sh: ./tc-viewer: not found


Причём тут /bin/sh

Как подправить скрипт, чтобы работал?

Первую строчку изменил на:
#!/opt/usr/bin/perl -w
результат тот же.

Nikus
25-09-2009, 19:19
Как подправить скрипт, чтобы работал?

Первую строчку изменил на:
#!/opt/usr/bin/perl -w
результат тот же.
А вы проверяли правильность пути /opt/usr/bin/perl? У меня он установился в /opt/bin/perl.
И не забудьте chmod a+x tc-viewer

GDR
25-09-2009, 19:32
Небольшая инструкция по установке скрипта tc-viewer (http://pawilcz.eu/tc-viewer/tc-viewer.html) для контроля работы шейпера. Может пойдет в FAQ по QoS, если такой когда-нибудь создадут :)

Я устанавливал скрипт так.
1. perl5 у меня уже был установлен. Иначе

ipkg install perl
2. Поместил конфигурационный файл tc-viewer.conf сюда /opt/etc/tc-viewer.conf
3. Скрипт tc-viewer поместил сюда /opt/bin/tc-viewer . Поправил пути для perl в заголовке с /usr/bin/perl на /opt/bin/perl и сделал скрипт исполняемым

chmod +x /opt/bin/tc-viewer
4. Можно поправить раз и навсегда конфигурационный файл и запускать просто скрипт с указанием этого файла

/opt/bin/tc-viewer --conf=/opt/etc/tc-viewer.conf
Лично я написал небольшой скрипт, чтобы не писать каждый раз параметры запуска такого вида:


#!/bin/sh
/opt/bin/tc-viewer --conf=/opt/etc/tc-viewer.conf --timer=3 --iface="imq0"

5. Интерфейс, на котором скрипт будет отслеживать работу, задается параметром --iface. В случае использования шейпера от Nikus это:
imq0 - интерфейс для входящего
imq1 - интерфейс для исходящего трафика.

После запуска скрипт выводит данные по классам в таком виде


Птн Сен 25 22:12:04 2009

Mode: HTB ^C to QUIT


root < 980Kbit - 980Kbit > 19.5 kbit/s ( 49pps)
all < 900Kbit - 900Kbit > 19.5 kbit/s ( 49pps)
time < 90Kbit - 810Kbit > 15.8 kbit/s ( 42pps)
high < 180Kbit - 810Kbit > 0.0 kbit/s ( 0pps)
middle < 450Kbit - 810Kbit > 0.0 kbit/s ( 0pps)
low < 90Kbit - 810Kbit > 3.5 kbit/s ( 5pps)
lazy < 90Kbit - 810Kbit > 0.2 kbit/s ( 0pps)

GDR
25-09-2009, 19:33
igor77777

Твоя проблема в п.3. Неправильно ты указал путь к установленному в /opt perl.

igor77777
25-09-2009, 20:06
igor77777

Твоя проблема в п.3. Неправильно ты указал путь к установленному в /opt perl.
Спасибо.
Главное я посмотрел где лежит perl, но исправил путь не правильно. :-(

Спасибо за инструкцию по запуску tc-viewer

Nikus
27-09-2009, 21:39
Версия 0.4 - 5472

* Добавлено отображение статуса командой "nshaper status":

http://i067.radikal.ru/0909/2e/278093bb167e.png

Жирным выделяется трафик, объём которого в единицу времени превышает гарантированную полосу (параметр rate в htb), красным - тот, который использует более 90% предельно возможной полосы (ceil). Счётчики усредняются по последним 10 секундам. Можно настроить единицы измерений и частоту обновления (см. nshaper status help).

* Все настройки перенесены в начало. Некоторые добавлены, будьте внимательны при обновлении.

igor77777
28-09-2009, 08:28
Версия 0.4 - 5472

* Добавлено отображение статуса командой "nshaper status":

http://i067.radikal.ru/0909/2e/278093bb167e.png

Жирным выделяется трафик, объём которого в единицу времени превышает гарантированную полосу (параметр rate в htb), красным - тот, который использует более 90% предельно возможной полосы (ceil). Счётчики усредняются по последним 10 секундам. Можно настроить единицы измерений и частоту обновления (см. nshaper status help).


Класс, осталось ещё добавить к статусу web-морду, чтобы можно было видеть распределение трафика по классам не заходя в роутер, а прямо из браузера. Что типа такого: Мониторинг загрузки полосы пропускания и процессора (http://wl500g.info/showthread.php?t=20702)

Хотя, получение такой информации, нужно только если есть какие либо проблемы. Чтобы понять, что идет не так. В остальное время, это только зря нагружает слабенький процессор. Зато было бы красиво. :-)

А ещё у меня родилась такая идея. Если посчитаете полезным, возможно включите её в следующий версии.
Я так понял, фильтры для распределения трафика по классам добавляются в самом конце, перед отработкой варианта запуска. Так вот, если пользователь добавлял свои фильтры, то при обновлении скрипта, они теряются. Можно сделать так, чтобы свои (пользовательские) фильтры помещались в отдельный файл. А этот файл включался в скрипт после типовых фильтров.

igor77777
28-09-2009, 08:45
Nikus
Подскажите, я правильно понял, работу типовых фильтров?
1. В очереди 1, 2, 3 попадают только пакеты идущие из локальной сети за роутером?
2. В 4 очередь попадает трафик генерируемый приложениями запущенными на роутере?
3. А эти правила для чего:
# only router's traffic remains unfiltered here
setrule lan port 50022 queue 1 # router's SSH
setrule lan port 8081 queue 1 # router's WEB server
4. У меня на роутере стоит прокси-сервер (порт 8023) и банеро-резка (8081). Т.е. они стоят в цепочке, браузер на ББ -> прокси (8023) -> банеро-резка (8081) -> интернет
Нужно добавлять фильтр для них, чтобы интернет трафик попадал во вторую очередь, или он и так будет попадать?

Nikus
28-09-2009, 13:25
Класс, осталось ещё добавить к статусу web-морду, чтобы можно было видеть распределение трафика по классам не заходя в роутер, а прямо из браузера. Что типа такого: Мониторинг загрузки полосы пропускания и процессора (http://wl500g.info/showthread.php?t=20702)Я думал об этом раньше. Потом установил tc-viewer, кое-что мне в нём не понравилось, решил переделать, но так как в перле я не очень силён, то плюнул и написал свой вариант :). Правда мой вариант кушает немного больше cpu, но тут уже ничего не поделаешь - видимо shell не так быстр как perl в оперировании переменными. Зато загружается быстрей ;)

За ссылку спасибо, посмотрим что можно придумать на досуге. Хочется чтоб и красиво было, и без нагрузки на проц/память, и не с нуля писать...

Я так понял, фильтры для распределения трафика по классам добавляются в самом конце, перед отработкой варианта запуска. Так вот, если пользователь добавлял свои фильтры, то при обновлении скрипта, они теряются. Можно сделать так, чтобы свои (пользовательские) фильтры помещались в отдельный файл. А этот файл включался в скрипт после типовых фильтров.Конфигурационный файл? И об этом тоже думал :rolleyes: В следующей версии, думаю, будет. Просто по-хорошему надо писать парсер настроек, а было лениво и стояли другие, более интересные задачи :)

Подскажите, я правильно понял, работу типовых фильтров?
1. В очереди 1, 2, 3 попадают только пакеты идущие из локальной сети за роутером?
Да, это определяется параметром lan ip $LAN, где LAN=$LAN_IP/$LAN_MASK

2. В 4 очередь попадает трафик генерируемый приложениями запущенными на роутере?
Да, потому что строкой выше весь нераспределённый транзитный трафик направляется в очередь 3: setrule lan ip $LAN queue 3

3. А эти правила для чего:
# only router's traffic remains unfiltered here
setrule lan port 50022 queue 1 # router's SSH
setrule lan port 8081 queue 1 # router's WEB server
Эти правила для того, чтобы можно было удалённо (из интернета) заходить на роутер по ssh и на web-сервер, и не испытывать при этом лагов от торрента. Настройки мои, здесь Вы должны настроить под себя.

4. У меня на роутере стоит прокси-сервер (порт 8023) и банеро-резка (8081). Т.е. они стоят в цепочке, браузер на ББ -> прокси (8023) -> банеро-резка (8081) -> интернет
Нужно добавлять фильтр для них, чтобы интернет трафик попадал во вторую очередь, или он и так будет попадать?
Вам нужно направить web-трафик в адрес роутера в очередь 2. Для этого следует заменить строчки
setrule lan ip $LAN wan port 80 queue 2 # HTTP
setrule lan ip $LAN wan port 443 queue 2 # HTTPS
на строчки
setrule wan port 80 queue 2 # HTTP
setrule wan port 443 queue 2 # HTTPS
По сути просто отменяем фильтр в сеть для http трафика.

GDR
28-09-2009, 14:24
Nikus
Спасибо за очередную версию.

Поправьте в версии 0.4 имя переменной полного пути к модулю

ESFQ_MOD="/opt/etc/nshaper/sch_esfq.o"
там где его используете

insmod $MOD_ESFQ > /dev/null 2>&1
А то модуль esfq не грузится и все работает через sfq.

А вообще стоит попросить разработчиков прошивки от энтузиастов включить этот модуль по умолчанию в прошивку. Если что - я за :)

Еще вопрос - с чем связана увеличение limit и depth в параметрах esfq с 128 до 256 в последней версии? Увеличилось число соединений (торрент и т.п.)?

igor77777
28-09-2009, 14:50
Конфигурационный файл? И об этом тоже думал :rolleyes: В следующей версии, думаю, будет. Просто по-хорошему надо писать парсер настроек, а было лениво и стояли другие, более интересные задачи :)

ну а если просто и примитивно:
...

. /opt/путь к файлу с пользовательскими фильтрами

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



2. В 4 очередь попадает трафик генерируемый приложениями запущенными на роутере?
Да, потому что строкой выше весь нераспределённый транзитный трафик направляется в очередь 3: setrule lan ip $LAN queue 3

Т.е. получается, у меня трафик интернета (ББ -> прокси -> банеро-резка -> интернет), попадал в туже очередь, что трафик rTorrenta :-(
А я то думаю, почему у меня странички не особо быстро открываются. Но при этом открываются. Раньше, когда торрент качал, то странички не открывались вообще. Это наверно благодаря более продвинутой очереди, которая честно делит полосу между приложениями.



3. А эти правила для чего:
# only router's traffic remains unfiltered here
setrule lan port 50022 queue 1 # router's SSH
setrule lan port 8081 queue 1 # router's WEB server
Эти правила для того, чтобы можно было удалённо (из интернета) заходить на роутер по ssh и на web-сервер, и не испытывать при этом лагов от торрента. Настройки мои, здесь Вы должны настроить под себя.

У меня ssh смотрит в интернет 443 портом, в iptables я его прокидываю на внутренний 192.168.1.1:22
Я должен заменить ваши правила на своё:


setrule lan port 443 queue 1

?
И не нужно ли трафик к ssh из локальной сети, тоже поместить к более высокоприоритетную очередь:


setrule lan ip $LAN wan port 22 queue 1

?
Или нужно сделать и то и другое вместе?



setrule wan port 80 queue 2 # HTTP
setrule wan port 443 queue 2 # HTTPS
По сути просто отменяем фильтр в сеть для http трафика.
Спасибо!

lly
28-09-2009, 14:52
А вообще стоит попросить разработчиков прошивки от энтузиастов включить этот модуль по умолчанию в прошивку. Если что - я за :)
Сперва имеет смысл влить esfq в sfq, как это сделано в ядрах новее 2.6.25. На это нам нужно некоторое время, и, опять придется потестировать...

Updated: это оказалось проще и быстрее, чем я ожидал - собирайте и пробуйте r642. esfq в скриптах заменить на sfq и модуль подгружать не надо.

Nikus
28-09-2009, 18:31
GDR
Спасибо за очередную версию.
Да на здоровье! :)

Поправьте в версии 0.4 имя переменной полного пути к модулю ESFQ_MOD
А то модуль esfq не грузится и все работает через sfq.

Я забыл написать, что с этой версии модуль esfq.o переезжает в папку шейпера /opt/etc/nshaper...
Руководствовался следующим:
1. С версии прошивки r617 ядро обновилось до 2.4.37.6, и старый путь уже не актуален.
2. Согласился с доводами Less: смысла в таком пути нету можно просто положыть в тот же /opt/etc/nshaper
3. Надеюсь, скоро esfq появится в прошивке, и о внешнем модуле можно будет позабыть ;)

Еще вопрос - с чем связана увеличение limit и depth в параметрах esfq с 128 до 256 в последней версии? Увеличилось число соединений (торрент и т.п.)?

depth - глубина очереди; и так как при использовании esfq данный скрипт производит хеширование по ip адресу в локальной сети, то глубина 256 позволяет без проблем захешировать всю сеть LAN класса C (по умолчаню 255.255.255.0), то есть равномерно распределить нагрузку (внутри каждого подкласса шейпера) для всей сети. В общем, этот параметр большого влияния не имеет, главное чтобы он превышал реальное количество компьютеров в сети.

Вообще можно настроить так, что конкурировать (внутри подкласса шейпера) между собой за полосу будут не компьютеры, а tcp/udp потоки. Для этого нужно в первой строке QUEUE="... hash dst ..." параметр dst заменить на classic. Вот тогда может быть понадобится увеличить число хешируемых потоков - параметры limit и depth (например, если на пользовательских компьютерах стоит p2p софт, то очередь 3 может быть перегружена, а пакеты внутри этой очереди будут дропаться).

igor77777
Просто, если бы, не Ваши подсказки, я бы наверное долго разбирался, что да как. А если будут типовые правила для основных приложений и комментарий к ним, будет проще неискушенному пользователю.
(хотя писать документацию и комментарии, самое нудное занятие)

Первопроходцам всегда нелегко. Зато теперь можно будет составить faq по материалам ветки ;)

У меня ssh смотрит в интернет 443 портом, в iptables я его прокидываю на внутренний 192.168.1.1:22
Надеюсь Вы не забыли закрыть порт 22 на внешнем интерфейсе?

Я должен заменить ваши правила на своё: setrule lan port 443 queue 1?

Да. Обращаю Ваше внимание, что шейпер вешается на интерфейс между интернетом и роутером, стало быть, для него роутер находится в направлении lan, но при том потоки роутера имеют адрес назначения $WAN_IP.

И не нужно ли трафик к ssh из локальной сети, тоже поместить к более высокоприоритетную очередь: setrule lan ip $LAN wan port 22 queue 1?
Или нужно сделать и то и другое вместе?

Нет, шейпер вешается только на внешний интерфейс. Локальный трафик не лимитируется и не приоретизируется, так как скорость локального порта не является узким местом.

А сформулированное Вами правило звучит так: "трафик из локальной сети в направлении Интернет на 22 порт поместить в приоритетную очередь", то есть, данное правило повысит интерактивность работы с любым ssh сервером в интернете. Полезно для тех, кто пользуется ssh.

lly
Сперва имеет смысл влить esfq в sfq, как это сделано в ядрах новее 2.6.25. На это нам нужно некоторое время, и, опять придется потестировать..

Думаю, коллектив у нас уже сформировался, и за тестами "не заржавеет" ;)

Updated: это оказалось проще и быстрее, чем я ожидал - собирайте и пробуйте r642. esfq в скриптах заменить на sfq и модуль подгружать не надо.
Вот и отлично!

igor77777
28-09-2009, 19:22
Что-то у меня status работает как-то странно.
Во-первых не все считает.
Во-вторых, ветка Crit, показывается отдельно от зоны Inet, не так как на Вашем скриншоте.

У меня одна зона: Inet
WAN_DN_RATE=8128
WAN_UP_RATE=896

WAN_ZONES="inet"

WAN_ZONES_DN_RATE=725
WAN_ZONES_UP_RATE=800

Параметры тарифа: DN=777 килобит, UP=ограничен каналом

Прилагаю картинку
Прилагаю картинку. Почему-то добавить картинку на форум не могу (http://picasaweb.google.com/lh/photo/JCq2KtTSQtJ2t6r0EaqAfQ?authkey=Gv1sRgCLfLu4yWkLeq5 wE&feat=directlink)

igor77777
28-09-2009, 19:47
GDR
У меня ssh смотрит в интернет 443 портом, в iptables я его прокидываю на внутренний 192.168.1.1:22
Надеюсь Вы не забыли закрыть порт 22 на внешнем интерфейсе?

Нет, не забыл. И даже на единственном открытом порту стоит защита от брута.


GDR
Я должен заменить ваши правила на своё: setrule lan port 443 queue 1?

Да. Обращаю Ваше внимание, что шейпер вешается на интерфейс между интернетом и роутером, стало быть, для него роутер находится в направлении lan, но при том потоки роутера имеют адрес назначения $WAN_IP.

А вот тут я запутался.
Я думал что IMQ находится между ppp0 и br0.
Или там все сложнее?

Nikus
28-09-2009, 20:19
lly
Отличная работа! Протестил в боевых условиях, всё работает ;)

ABATAPA
28-09-2009, 20:31
* Добавлено отображение статуса командой "nshaper status":


Вот только gotox не работает в TERM=xterm (но работает в TERM=linux).

GDR
28-09-2009, 20:42
lly
Отличная работа! Протестил в боевых условиях, всё работает ;)

А вот где бы мне ее скачать?
На http://code.google.com/p/wl500g/ только последняя r617 лежит? Или я не там смотрю?

theMIROn
28-09-2009, 20:44
А вот где бы мне ее скачать?
На http://code.google.com/p/wl500g/ только последняя r617 лежит? Или я не там смотрю?

скомпилировать самостоятельно
http://code.google.com/p/wl500g/wiki/CompilingCustomFirmware
или дождаться стабильного публичного билда

GDR
28-09-2009, 21:07
скомпилировать самостоятельно
http://code.google.com/p/wl500g/wiki/CompilingCustomFirmware
или дождаться стабильного публичного билда

Подожду пожалуй. С компиляцией прошивки я пока не сталкивался. Только отдельные программы под роутер. Пусть пока работает esfq как отдельный модуль.

А вот с отображением статуса у меня тоже какие-то проблемы.

Вот это я вижу, если скопировать в буфер обмена вывод status скриптом


nShaper status Пнд Сен 28 23:36:17 SAMST 2009
Ctrl-C to exit
-Zones- -Download rate- -Received- -Upload rate- -Sent-
bit/s pps Bytes bit/s pps Bytes
Total 877k 123 2506M 726k 114 1785M
Crit 14.6k 39 32.3M 0 0 55.5k
inet 877k 123 2506M 726k 114 1785M
Prio 0 0 57.5k 0 0 199k
Web 40 0 1.34M 48 0 657k
Other 862k 83 2472M 726k 114 1784M
Lazy 152 0 390k 0 0 684


Как видите - все ок. Я сам был в шоке, когда увидел.

А вот в действительности на экране я вижу только
http://keep4u.ru/full/2009/09/28/be6dfc6a36294ab4b8b16cb2dd2effb7/jpg

На всякий случай вывод всех установленных переменных


[admin@WL500G root]$ set
HOME='/usr/local/root'
IFS='
'
LANG='ru_RU.UTF-8'
LOGNAME='admin'
PATH='/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
PPID='3731'
PS1='[\u@\h \W]$ '
PS2='> '
PS4='+ '
PWD='/tmp/local/root'
SHELL='/bin/sh'
TERM='xterm'
TERMINFO='/opt/share/terminfo'
USER='admin'
_='status'

lly
28-09-2009, 21:19
lly
Отличная работа! Протестил в боевых условиях, всё работает ;)
Ща внесём нестабильность ;) r644 - пришил последние довески от автора esfq


Подожду пожалуй. С компиляцией прошивки я пока не сталкивался. Только отдельные программы под роутер. Пусть пока работает esfq как отдельный модуль.
Кто не рискует, тот не пьет шампанское ;) Но если нет охоты экспериментировать, то правильное решение.

Nikus
28-09-2009, 21:39
igor77777 GDR
Так, с вашими багами всё понятно, надо курить ман по xterm-256...
(эх, не прогнал тесты в putty, а зря)
На экране "не видно" потому, что тест слился с фоном... ждите обновлений.

Зато я нашёл то, чего мне не хватало - экранный буфер и ... 256 цветов :)

igor77777
А вот тут я запутался.
Я думал что IMQ находится между ppp0 и br0.
Или там все сложнее?
Ну как так, там даже схема шейпера приведена, всё подписано... и imq тоже... Неужели непонятно? :(

ABATAPA
Вот только gotox не работает в TERM=xterm (но работает в TERM=linux).
:confused: У меня что в xterm, что в linux работает... Но всё равно спасибо, посмотрю альтернативные команды.
Если не секрет - как определили, что не работает? И как ведет себя, например, gotoy?

lly
Ща внесём нестабильность r644 - пришил последние довески от автора esfq
Ок, повторим :)

igor77777
29-09-2009, 05:27
igor77777 GDR
Так, с вашими багами всё понятно, надо курить ман по xterm-256...
(эх, не прогнал тесты в putty, а зря)
На экране "не видно" потому, что тест слился с фоном... ждите обновлений.

Зато я нашёл то, чего мне не хватало - экранный буфер и ... 256 цветов :)

То что проблема, с цветом и фоном, я понял по сообщению GDR
От меня что-то требуется настроить у себя, или это нужно поправлять Вам в скрипте?
Там ещё и ветка Crit перезжает.

Nikus
29-09-2009, 06:22
igor77777
Там ещё и ветка Crit перезжает.
Багу нашёл...

PS. Цвета поправил. Сегодня выложу.

lly
Нареканий нет :)

ABATAPA
29-09-2009, 06:57
Если не секрет - как определили, что не работает? И как ведет себя, например, gotoy?


Ммм... Зашел из xterm (Linux - рабочая среда дома и в офисе с 1994), увидел, что текст "слипся". gotoy, к слову, тоже не работает. Да, с разных версий xterm результат чуть разный. Например:
http://s55.radikal.ru/i148/0909/85/72a39192de4c.jpg

$ xterm -version
X.Org 6.8.99.903(248)

Xterm из KDE 4.* показывает чуть иначе - но схожим образом.

dimmer
29-09-2009, 08:58
igor77777
Там ещё и ветка Crit перезжает.
Багу нашёл...

PS. Цвета поправил. Сегодня выложу.

lly
Нареканий нет :)

Nikus, спасибо. Отлично работает скрипт. До этого пробовал разные с этого форума, в т.ч. сам делал, но твой понравился больше всего. Простотой, видимо.

p.s. кстати, есть какие-нибудь работающие решения, по выделению приоритета для траффика Скайпа? Что-то вроде setrule proto skype queue 1 :) level 7 filtering, так сказать...

Nikus
29-09-2009, 23:49
Обещал - выкладываю.
Версия 0.4.1 - 5487 - с поддержкой esfq внешним модулем.
В статусе поправлены цвета, сделана авторская сортировка.
Восстанавливается лог терминала при выходе.
Изучил awk, благодаря чему повысилась точность пересчёта.
Надеялся на снижение нагрузки CPU, но чуда не произошло...

Вот так оно должно выглядеть у вас:

http://i001.radikal.ru/0909/48/3bc05af41c58.png

Чтобы putty рисовал заголовки жирным шрифтом, нужно в настройках
Window->Colors снять галочку "Bolded text at different color".

Следующая версия выйдет, думаю, не раньше чем новая стабильная прошивка энтузиастов. Подумываю внедрить конфиг-файл и повозиться с интернет-статистикой, может что и выгорит. Если есть пожелания касаемо собственно шейпера (может не хватает какой функциональности) - с удовольствием выслушаю ;)

dimmer
Nikus, спасибо. Отлично работает скрипт. До этого пробовал разные с этого форума, в т.ч. сам делал, но твой понравился больше всего. Простотой, видимо.
Рад слышать :)

p.s. кстати, есть какие-нибудь работающие решения, по выделению приоритета для траффика Скайпа? Что-то вроде setrule proto skype queue 1 level 7 filtering, так сказать...
Level7 для нашего роутера - уж больно жёстко :)

Надо полагать, что в skype уже используется qos. Сниффером выловил отличительное поле DiffServ=0xC8, что соответствует коду DSCP=50. Набросал правило для dscp (раньше не попадалось) и вот - вуаля - тестовый звонок пополз в очередь 1. ;) В общем в версии 0.4.1 уже включено, можно ставить-тестировать.

ABATAPA
Посмотрел внимательно мануал, и действительно, в xterm другая команда gotox.
Код поправил. Помогло ли?

allion
30-09-2009, 06:31
В 4.1 осталась ошибка с подгрузкой модуля.
В строке
insmod $MOD_ESFQ > /dev/null 2>&1
переменная наоборот написана.

С цветами стало все нормально, спасибо.

Nikus
30-09-2009, 11:26
allion
В 4.1 осталась ошибка с подгрузкой модуля.
В строке
insmod $MOD_ESFQ > /dev/null 2>&1
переменная наоборот написана.

Благодарю. Поправил.

dimmer
Со скайпом я погорячился... Оказалось, это провайдерский шлюз маркирует все пакеты в мой адрес dscp=50. Так что надо подумать...

ABATAPA
30-09-2009, 11:41
Посмотрел внимательно мануал, и действительно, в xterm другая команда gotox.
Код поправил. Помогло ли?

Увы - нет:
http://i055.radikal.ru/0909/dc/bd8d7ed90e6c.jpg

Вы gotoy меняли?

Еще просьба: разделите код и настройки. Каждый раз приходится переносить настройки в новую версию.

И предлагаю добавить трафик SIP (порт 5060) в правило после Skype.

igor77777
30-09-2009, 11:49
Что-то у меня снова путаница с правилами.
Вот мои правила. Выделил жирным свои.

rules() {
# set rules for time-critical queue (both users' and router's traffic)
setrule proto icmp prio 10 queue 0 # ICMP
setrule port 53 queue 0 # DNS
setrule short flag ack queue 0 # TCP ACK
setrule short flag syn queue 0 # TCP SYN
setrule short flag rst queue 0 # TCP RST


# extract users' traffic using destiation ip
LAN="$LAN_IP/$LAN_MASK"

# set rules for high-priority queue
setrule lan ip $LAN afc 4 queue 1 # assured forward GOLD class
# (af4x obsoletes TOS=10)
setrule lan ip $LAN dscp 50 queue 1 # skype calls
setrule lan ip $LAN wan port 554 queue 1 # MMS/RealMedia
setrule lan ip $LAN wan port 1755 queue 1 # MMS
setrule lan ip $LAN wan port 1935 queue 1 # RTMP/Flash
setrule lan ip $LAN wan port 8000 queue 1 # igor Radio 101.ru


# set rules for middle-priority queue
setrule lan ip $LAN afc 3 queue 2 # assured forward SILVER class
# setrule lan ip $LAN wan port 80 queue 2 # HTTP
# setrule lan ip $LAN wan port 443 queue 2 # HTTPS
setrule lan ip $LAN wan port 5190 queue 2 # AIM

# igor internet for proxy on router's
setrule wan port 80 queue 2 # HTTP
setrule wan port 443 queue 2 # HTTPS


# set rules for low-prority queue
setrule lan ip $LAN queue 3 # all remaining users' traffic.


# only router's traffic remains unfiltered here
#setrule lan port 50022 queue 1 # router's SSH
#setrule lan port 8081 queue 1 # router's WEB server
setrule lan port 443 queue 1 # igor router's SSH
setrule lan port 22 queue 1 # igor router's SSH

# move all other router's traffic (such as P2P) to lazy queue
setrule lan all queue 4 # all other traffic to router
}
ssh у меня доступен на 443 порту
Подключаюсь к роутеру из интернета и вижу такую картинку:

-Zones- -Download rate- -Received- -Upload rate- -Sent-
bit/s pps Bytes bit/s pps Bytes
Total 5.46k 6 553k 9.55k 5 799k
inet 5.45k 6 553k 9.74k 5 799k
Crit 912 2 37.7k 4.50k 4 549k
Prio 0 0 0 0 0 0
Web 0 0 131 0 0 0
Other 920 1 72.9k 5.05k 1 250k
Lazy 3.70k 3 443k 0 0 0

Т.е. получается, что трафик между роутером и моим компьютером в интернете не попадает в очередь Prio, хотя в соответствии с этими правилами:

setrule lan port 443 queue 1 # igor router's SSH
setrule lan port 22 queue 1 # igor router's SSH
должен попадать.
Может я что-то не так сделал?

PS: 22 порт я добавил для верности, у меня 443 пробрасывается на 22 через prerouting

Nikus
30-09-2009, 12:11
ABATAPA
Вы gotoy меняли?

Я от него избавился :) так как в мануале по xterm не нашёл такой команды (есть gotoxy и относительное сдвигание курсора вверх/вниз, которое у Вас и не работает...). Попробуйте строчку
crlf="${esc}[1E"
заменить на
crlf="\n"

Еще просьба: разделите код и настройки. Каждый раз приходится переносить настройки в новую версию.
Работаем над этим.

И предлагаю добавить трафик SIP (порт 5060) в правило после Skype.
Работоспособность правила проверяли?
Если да, то добавлю в общую версию. (мне проверять не на чем...)

igor77777
30-09-2009, 12:33
Что-то у меня снова путаница с правилами.

Разобрался.
Я так понял, что важен порядок в котором добавляются правила.
Как только перенес своё правило для ssh в группу правил для первой очереди. Т.е. сделал так:

# set rules for high-priority queue
setrule lan ip $LAN afc 4 queue 1 # assured forward GOLD class
# (af4x obsoletes TOS=10)
setrule lan ip $LAN dscp 50 queue 1 # skype calls
setrule lan ip $LAN wan port 554 queue 1 # MMS/RealMedia
setrule lan ip $LAN wan port 1755 queue 1 # MMS
setrule lan ip $LAN wan port 1935 queue 1 # RTMP/Flash
setrule lan ip $LAN wan port 8000 queue 1 # igor Radio 101.ru
setrule lan port 22 queue 1 # igor router's SSH
то, трафик ssh стал попадать в первую очередь.

Обращаю внимание автора, что в такой последовательности описания правил:

# set rules for low-prority queue
setrule lan ip $LAN queue 3 # all remaining users' traffic.


# only router's traffic remains unfiltered here
setrule lan port 50022 queue 1 # router's SSH
setrule lan port 8081 queue 1 # router's WEB server
трафик к вашему ssh и web-серверу попадать в первую очередь не будет.
Nikus проверьте пожалуйста и опровергните или подтвердите мой вывод.

Nikus
30-09-2009, 12:45
igor77777
Обращаю внимание автора, что в такой последовательности описания правил:

# set rules for low-prority queue
setrule lan ip $LAN queue 3 # all remaining users' traffic.


# only router's traffic remains unfiltered here
setrule lan port 50022 queue 1 # router's SSH
setrule lan port 8081 queue 1 # router's WEB server
трафик к вашему ssh и web-серверу попадать в первую очередь не будет.

Nikus проверьте пожалуйста и опровергните или подтвердите мой вывод.

Опровергаю
Сейчас зашёл под RDP на один удалённый сервер, а оттуда с помощью putty на ssh своего роутера. Всё фильтруется как задумано ;)

-Zones- -Download rate- -Received- -Upload rate- -Sent-
bit/s pps Bytes bit/s pps Bytes
Prio 40 0 6.29k 6.02k 1 723k
Лучше приведите правила iptables, которыми Вы перебрасываете порт роутера.

ABATAPA
И предлагаю добавить трафик SIP (порт 5060) в правило после Skype.

Я посмотрел, SIP трафик обычно маркируется флагом expedited forward (tos=0x68 или, что то же самое, dscp=26)
Так что SIP трафик можно направить правилом setrule lan ip $LAN dscp 26 queue 1.
Можно форсировать и по номеру порта - setrule lan ip $LAN wan port 5060 queue 1, но я детали протокола SIP не знаю,
потому не могу утверждать, всегда ли используется этот порт.
Если существует такая возможность, не могли бы Вы опробовать оба варианта?

PS. Аналогично для RTSP можно прописать правило setrule lan ip $LAN dscp 46 queue 1.

ABATAPA
30-09-2009, 15:14
Попробуйте строчку
crlf="${esc}[1E"
заменить на
crlf="\n"

Да, это помогает. Спасибо!



Работоспособность правила проверяли?
Если да, то добавлю в общую версию. (мне проверять не на чем...)



Я посмотрел, SIP трафик обычно маркируется флагом expedited forward (tos=0x68 или, что то же самое, dscp=26)

Не уверен, что это делают все SIP-адаптеры.
А вот порт традиционно используется именно этот - 5060.
Но это - детали. Хотя, раз есть правило для Skype (и даже нестандартный ssh-порт), почему не быть для более дружелюбного и открытого ;) SIP?

OlegaVB
30-09-2009, 17:12
Не большой отчет по результатам испытаний.
Спасибо, все работает, как и должно быть.
Есть внутренняя сеть, скорость в которой ограничено на уровне примерно 40 Мбит. В nshaper стит ограничение 32 Мбита на эту сеть. Ну вот тут уже сам роутер не справляется.

При загрузке без nshaper скорость порядка 20 Мбит.
Если включить nshaper падает до 12 Мбит.
А если запустить status status то 8 Мбит.

Загрузка процессора в первом случае ~ 70, во втором ~ 90 и в третьем 100.
И в лог пишет:

Sep 30 21:00:02 kernel: HTB: quantum of class 20001 is big. Consider r2q change.
Sep 30 21:00:03 kernel: HTB: quantum of class 20021 is big. Consider r2q change.
Просит r2q увеличить, но с скрипте его нет.
Это не замечание. Просто комментарий.
Работает все отлично, еще раз спасибо.

Nikus
30-09-2009, 17:48
OlegaVB

Благодарю за отзыв и тесты! ;)
Меня раздирает любопытство, как поведёт себя роутер, если локальный трафик пустить в обход шейпера. Если Вас не затруднит, не могли бы Вы попробовать модифицировать скрипт и провести тесты заново? :)

Для этого нужно:
1) остановить nshaper
2) в скрипте при вызове "iptables ... " перед параметром -j IMQ добавить параметр -s ! 10.20.30.0/24, где 10.20.30.0 - адрес локалки, 24 - маска подсети.
Всего таких вызовов в скрипте - 4.
3) запустить nshaper

В частности интересует, будет ли выигрыш в скорости, и будет ли "забивать" интернет-трафик основательно нагруженный канал с локалкой.

Для возврата обратно нужно выполнить п.п.1-3 заново, вернув скрипт в исходное состояние. Заранее благодарю!

Просит r2q увеличить, но с скрипте его нет.
Это можно, добавлю в настройки в следующем релизе.

OlegaVB
30-09-2009, 17:54
10.20.30.0/24
Нужно заменить на адрес своей локалки?

Nikus
30-09-2009, 17:59
OlegaVB
Нужно заменить на адрес своей локалки?

Да. До которой скорость 40МБит

OlegaVB
30-09-2009, 18:13
Скорость практически не изменилась.
А в статусе все равно показывает трафик льготной зоны.
20 Мбит с шейпером, 30 без него.

Nikus
30-09-2009, 18:26
OlegaVB
Скорость практически не изменилась.
А в статусе все равно показывает трафик льготной зоны.
Это нормально, только цифры там должны быть нулевыми (с модифицированным скриптом).

20 Мбит с шейпером, 30 без него.
А как же "не изменилась"? Было 12, а стало 20.
Правда, без шейпера было 20, а стало 30. Чего-то я недопонимаю... Проясните?

OlegaVB
30-09-2009, 19:22
Написал не то. Пересчитывал мБайты в мБиты. Без шейпера 2.5 мБита - 20 мБайт. С шейпером 1.5 мБит - 12 мБайт. Может адреса не все прописал - там два диапазона 94.181.0.0/19 и 94.181.32.0/20 я прописал только первый 94.181.0.0/19.

Nikus
30-09-2009, 19:42
OlegaVB

Ясно. Что ж, отрицательный результат - тоже результат.
Благодарю за сотрудничество! :)

igor77777
30-09-2009, 20:08
igor77777
Обращаю внимание автора, что в такой последовательности описания правил:

# set rules for low-prority queue
setrule lan ip $LAN queue 3 # all remaining users' traffic.


# only router's traffic remains unfiltered here
setrule lan port 50022 queue 1 # router's SSH
setrule lan port 8081 queue 1 # router's WEB server
трафик к вашему ssh и web-серверу попадать в первую очередь не будет.

Nikus проверьте пожалуйста и опровергните или подтвердите мой вывод.

Опровергаю
Сейчас зашёл под RDP на один удалённый сервер, а оттуда с помощью putty на ssh своего роутера. Всё фильтруется как задумано ;)

-Zones- -Download rate- -Received- -Upload rate- -Sent-
bit/s pps Bytes bit/s pps Bytes
Prio 40 0 6.29k 6.02k 1 723k
Лучше приведите правила iptables, которыми Вы перебрасываете порт роутера.


Правила такие.
Проброс порта:

-A PREROUTING -d xxx.xxx.xxx.xxx -i ppp0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.1.1:22

xxx.xxx.xxx.xxx - мой ip на ppp0 интерфейсе выданный провайдером

и дальнейшая обработка ssh (выкладываю на всякий случай).


-A INPUT -d 192.168.1.1 -p tcp -m tcp --dport 22 -j SSH_EVAL

-A SSH_EVAL -i ! br0 -p tcp -m state --state NEW -m tcp --dport 22 -m recent --set --name SSH_ATTACKER --rsource
-A SSH_EVAL -i ! br0 -p tcp -m state --state NEW -m tcp --dport 22 -m recent --update --seconds 600 --hitcount 4 --name SSH_ATTACKER --rsource -j DROP
-A SSH_EVAL -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT


Сейчас проверить со стороны интернета не могу. Попроверяю ещё раз завтра с работы.
Я правильно понял, что для проверки, достаточно зайти pytty на роутер. Пока окно pytty открыто, будет ходить какой-то трафик, и он должен попадать в первую очередь. Для верности - тормознуть rtorrent. Так?


Т.е. порядок добавления правил (фильтров) в функции rules() не важен?

Nikus
30-09-2009, 20:59
igor77777

Порядок расположения правил, конечно же, важен.
Именно по порядку расположения правил просматривается каждый пакет, и делается вывод о направлении в ту или иную очередь.

НО если внимательно посмотреть блок-схему шейпера, то видно, что он внедряется после NAT.
Соответственно, после Вашего правила
-A PREROUTING -d xxx.xxx.xxx.xxx -i ppp0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.1.1:22
пакет меняет адрес назначения и становится "локальным", в силу чего шейпер, в соответствии с правилом

# set rules for low-prority queue
setrule lan ip $LAN queue 3 # all remaining users' traffic.
справедливо отправляет его в соответствующую очередь.

Одним из решений будет написание выше того правила следующего правила:
setrule lan ip $LAN_IP port 22 queue 1

Обращаю Ваше внимание на то, что, в отличие от Вашего рабочего варианта setrule lan port 22 queue 1, здесь применён фильтр по IP адресу роутера (локальному). Без него правило распространяется на всю локальную сеть, что несёт в себе потенциальную уязвимость.

Я правильно понял, что для проверки, достаточно зайти pytty на роутер. Пока окно pytty открыто, будет ходить какой-то трафик, и он должен попадать в первую очередь. Для верности - тормознуть rtorrent. Так?

Всё так, только тормозить торрент не обязательно. Достаточно увидеть ненулевые цифры в первой очереди.

OlegaVB
01-10-2009, 04:28
Если нужно сегодня вечером еще раз проверю скорости и выложу со скринами.
И попутно вопрос в файле описания /opt/etc/nshaper/ip_[zone name].lst две записи
94.181.0.0/19
94.181.32.0/20
- судя по Вашему описанию так может быть - это верно?

igor77777
01-10-2009, 07:44
igor77777

Порядок расположения правил, конечно же, важен.
Именно по порядку расположения правил просматривается каждый пакет, и делается вывод о направлении в ту или иную очередь.

Ага. Спасибо. С этим понятно.



НО если внимательно посмотреть блок-схему шейпера, то видно, что он внедряется после NAT.
Соответственно, после Вашего правила
-A PREROUTING -d xxx.xxx.xxx.xxx -i ppp0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.1.1:22
пакет меняет адрес назначения и становится "локальным", в силу чего шейпер, в соответствии с правилом

# set rules for low-prority queue
setrule lan ip $LAN queue 3 # all remaining users' traffic.
справедливо отправляет его в соответствующую очередь.

Одним из решений будет написание выше того правила следующего правила:
setrule lan ip $LAN_IP port 22 queue 1

Обращаю Ваше внимание на то, что, в отличие от Вашего рабочего варианта setrule lan port 22 queue 1, здесь применён фильтр по IP адресу роутера (локальному). Без него правило распространяется на всю локальную сеть, что несёт в себе потенциальную уязвимость.

В общем проверил ещё раз все варианты. Вывод такой.
Если моё правило.
такое: setrule lan port 22 queue 1
или такое setrule lan ip $LAN_IP port 22 queue 1
располагается после правила:
setrule lan ip $LAN queue 3 # all remaining users' traffic.
То трафик к моему ssh попадает в третью очередь.
Если же моё правило
такое: setrule lan port 22 queue 1
или такое setrule lan ip $LAN_IP port 22 queue 1
перенести до
setrule lan ip $LAN queue 3 # all remaining users' traffic.
То трафик у моему ssh попадает в первую очередь.

Для себя я вынес, что важен не только порядок правил, но то какие фильтры они накладывают.
Вначале нужно накладывать более "подробные" фильтры, переходя к менее подробным.

PS: Оставил правило, предложенное Вами. Работает. :-)

Nikus
01-10-2009, 07:50
Если нужно сегодня вечером еще раз проверю скорости и выложу со скринами.
И попутно вопрос в файле описания /opt/etc/nshaper/ip_[zone name].lst две записи
- судя по Вашему описанию так может быть - это верно?
Всё верно.

allion
01-10-2009, 08:12
Nikus
Может быть стоит в архив следующей версии добавить демонстрационные записи с описаниями зон? Было бы проще разбираться в первоначальной настройке.

ABATAPA
01-10-2009, 11:27
Nikus
Может быть стоит в архив следующей версии добавить демонстрационные записи с описаниями зон? Было бы проще разбираться в первоначальной настройке.

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

igor77777
01-10-2009, 11:42
А еще хорошо бы править первое сообщение, и выкладывать туда ссылку на актуальную версию, чтобы люди с конца темы не листали в поисках файлов.
Ну Nikus вряд ли сможет править первое сообщение в теме.
Может лучше создать новую тему и назвать её что-нибудь типа: "Шейпер на основе IMQ для прошивки от энтузиастов" и уже там выкладывать новые версии. К тому же, nshaper от Nikus стоит несколько особняком, от всех тех решений, что были предложены ранее. И главное, он работает на все 100%. И даже 200% ;-)

Только тему должен заводить сам автор.

OlegaVB
01-10-2009, 13:02
При запущенном шейпере в логах иногда появлется

Oct 1 13:56:22 kernel: __alloc_pages: 0-order allocation failed (gfp=0x20/0)

lly
01-10-2009, 13:10
При запущенном шейпере в логах иногда появлется
Шейпер тут не при чём - это торренты, кончилась память, совсем.

OlegaVB
01-10-2009, 13:12
Шейпер тут не при чём - это торренты, кончилась память, совсем.

Так и ест. Торренты качались в это момент. Но swap 512 Мб есть.

ABATAPA
02-10-2009, 09:12
Так и ест. Торренты качались в это момент. Но swap 512 Мб есть.
Вы правда верите, что с 32M RAM можно сделать своп 512M, и все будет "пучком"?
Поймите, в разы больше свопа - тоже плохо. Ведь под дескрипторы страниц тоже выделяется память. А уж о тормозах и не говорю...

ABATAPA
02-10-2009, 09:19
И главное, он работает на все 100%. И даже 200% ;-)


Согласен. Даже при "отпущенном на волю" Transmission на NASе (и, как следствии, забитом канале) можно звонить по SIP, без задержек (т.е. пинг такой же, как и на свободном канале) играть в Nexuiz (предварительно прописав для них правило, разумеется)...

OlegaVB
02-10-2009, 09:20
Вы правда верите, что с 32M RAM можно сделать своп 512M, и все будет "пучком"?
Поймите, в разы больше свопа - тоже плохо. Ведь под дескрипторы страниц тоже выделяется память. А уж о тормозах и не говорю...

Вроде как своп обычно равняется удвоенному значению памяти. 512 поставлено заведомо больше. Ну да ладно - откуда берется понятно. Последствий вроде нет.

lly
02-10-2009, 09:41
Вроде как своп обычно равняется удвоенному значению памяти. 512 поставлено заведомо больше. Ну да ладно - откуда берется понятно. Последствий вроде нет.
Offtopic: Чтобы четко ответить про проблему торрентов, надо чтобы кто-то этим занялся, но желающих за N лет не нашлось.
Для начала, всего-то надо определить какой вид памяти он пожирает - shared memory, data, stack и велики ли утечки.

igor77777
02-10-2009, 11:44
А подскажите нужно-ли и если нужно, то какое правило прописать для следующего случая?
Подключаюсь с работы к роутеру по ssh.
В путти настроен тунель L8085 на 127.0.0.1:80 (т.е. web-сервер роутера. У меня lighttpd работает на 80 порту, а web-морда роутера уехала на 8080).
Так вот морда ruTorrent - тормозит, обновляется через раз, т.д. и т.п.
При этом морда Download Engine - работает нормально.
Из-за чего,может возникать такая проблема?

OlegaVB
02-10-2009, 11:58
А подскажите нужно-ли и если нужно, то какое правило прописать для следующего случая?
Подключаюсь с работы к роутеру по ssh.
В путти настроен тунель L8085 на 127.0.0.1:80 (т.е. web-сервер роутера. У меня lighttpd работает на 80 порту, а web-морда роутера уехала на 8080).


Сменить порт в этой строке на Ваш т.е. 80

setrule lan port 8081 queue 1 # router's WEB server



Так вот морда ruTorrent - тормозит, обновляется через раз, т.д. и т.п.
При этом морда Download Engine - работает нормально.
Из-за чего,может возникать такая проблема?

Они на одном порту работают. Просто сам по себе ruTorrent тяжелый - он даже локално с тормозами работает.

igor77777
02-10-2009, 12:45
Сменить порт в этой строке на Ваш т.е. 80

Не понял. Что это даст?



Они на одном порту работают. Просто сам по себе ruTorrent тяжелый - он даже локално с тормозами работает.
Ну это понятно, только это всетаки сервер работает на одном порту, на 80-м. А морды лежат в разных каталогах сервера.
А я обращаюсь к ним так:
http://localhost:8085/rtorrent/
и
http://localhost:8085/cgi-bin/dlengine.sh
У меня ещё есть морда BandWith (график загрузки процессора и сетевых интерфейсов) - она тоже не тормозит.

Я так подозреваю, что трафик от ssh-сервера, когда он "выходит" из тунеля (не знаю, как правильно это назвать. не специалист) на стороне роутета, попадает в низкоприоритетную очередь.

Другая идея состоит в том, что тормозит обращение к RPC2 (ruTorrent работает с rTorrent'ом через него). Возможно - это этот трафик попадает в низкоприоритетную очередь. А что с ним делать вообще не подозреваю.

OlegaVB
02-10-2009, 12:58
Не понял. Что это даст?
Ну это понятно, только это всетаки сервер работает на одном порту, на 80-м. А морды лежат в разных каталогах сервера.
А я обращаюсь к ним так:
http://localhost:8085/rtorrent/
и
http://localhost:8085/cgi-bin/dlengine.sh

Да тут я не правильно сказал, все по ssh туннелю идет, вот его и надо в приоритетную очередь отправить. В каком каталоге лежат это не важно.



У меня ещё есть морда BandWith (график загрузки процессора и сетевых интерфейсов) - она тоже не тормозит.

Аналогично BandWith не тормозит, а ruTorrent тормозит.


Я так подозреваю, что трафик от ssh-сервера, когда он "выходит" из тунеля (не знаю, как правильно это назвать. не специалист) на стороне роутета, попадает в низкоприоритетную очередь.

Другая идея состоит в том, что тормозит обращение к RPC2 (ruTorrent работает с rTorrent'ом через него). Возможно - это этот трафик попадает в низкоприоритетную очередь. А что с ним делать вообще не подозреваю.
Это уже внутри роутера, шейпинг только на внешнем интерфейсе, тем более в туннеле, там только ssh надо в приоритетную очередь отправить.

igor77777
02-10-2009, 13:10
Это уже внутри роутера, шейпинг только на внешнем интерфейсе, тем более в туннеле, там только ssh надо в приоритетную очередь отправить.
shh уже направлен в prio очередь.

а вот ruTorrent'ом не понятно.
Просто мне кажется, что когда канал на роутере на загружен на полную катушку, то и ruTorrent работает через тунель. А вот сейчас, я все загрузил на полную и теперь ruTorrent даже не загружается.

OlegaVB
03-10-2009, 12:59
Проверил еще раз шейпер под нагрузкой.
При отключенном скорость загрузки 4.6 Мбайт/сек.
При включенном стандартном шейпере скорость 2.9 Мбайт/сек.
При включенном шейпере с изменениями скорость 3.7 Мбайт/сек.
Т.е. скорость возрастает.
Загрузка процессора во всех случаях 92-94.
Вывод status со стандартным шейпером

-Zones- -Download rate- -Received- -Upload rate- -Sent-
bit/s pps Bytes bit/s pps Bytes
Total 18.7M 1680 132M 699k 932 4.92M
inet 3.26M 354 23.2M 446k 238 3.12M
Crit 11.9k 33 89.2k 0 0 0
Prio 0 0 0 0 0 0
Web 64 0 544 24 0 144
Other 3.26M 323 23.1M 451k 239 3.12M
Lazy 24 0 507 0 0 0
dom.ru 15.0M 1287 109M 241k 675 1.80M

и с измененным

nShaper status Сбт Окт 3 08:14:19 YEKST 2009
Ctrl-C to exit
-Zones- -Download rate- -Received- -Upload rate- -Sent-
bit/s pps Bytes bit/s pps Bytes
Total 3.63M 408 32.0M 780k 1444 6.65M
inet 3.67M 411 32.0M 361k 277 3.13M
Crit 15.6k 41 124k 0 0 0
Prio 32 0 194 8.55k 0 82.4k
Web 320 0 2.66k 88 0 554
Other 3.62M 366 31.9M 353k 276 3.05M
Lazy 136 0 1.13k 0 0 0
dom.ru 40 0 316 427k 1192 3.52M

Nikus
03-10-2009, 20:48
OlegaVB

Благодарю! Полученные результаты дают основания добавить в конфиг соответствующие настройки. Может кому пригодятся. :rolleyes:

OlegaVB
04-10-2009, 03:55
OlegaVB

Благодарю! Полученные результаты дают основания добавить в конфиг соответствующие настройки. Может кому пригодятся. :rolleyes:

Рад был помочь. :)

allion
04-10-2009, 20:52
Поставил новую r655. При запуске nshaper выдает серию сообщений
"Unknown qdisc "esfq", hence option "limit" is unparsable."

Upd: работает вроде нормально, не смотря на сообщения.

Nikus
04-10-2009, 23:52
Поставил новую r655. При запуске nshaper выдает серию сообщений
"Unknown qdisc "esfq", hence option "limit" is unparsable."

Upd: работает вроде нормально, не смотря на сообщения.
Начиная с версии r644 модуль esfq встроен в ядро.
Поэтому нужно либо обновиться до 5509 (обновлено), либо сделать следующие изменения вручную:
1. В функции stop() удалить строку rmmod sch_esfq
2. В функции start() исправить строку QUEUE="esfq ..." на QUEUE="sfq ..."
3. Последующий блок if...fi после строки п.2 - удалить.
4. Строку настройки с путем к модулю sch_esfq (вида MOD_ESFQ="...") - удалить
5. Сам модуль sch_esfq.o тоже можно удалить.

PS. Версия 0.4.2 работает только с прошивкой r644 и выше.

ncuxfj
05-10-2009, 08:49
проделал все 5 шагов, теперь шейпер перестал работать(что с ним что без него: при полной нагрузке одинаковые пинги(450-600мс до москвы) и скорости(в 7-10 раз упали)...
...раньше было на sfq и всё было замечательно(раньше была прошивка 617);
где я накосячил?


17:54
всё нормализовалось! провайдер косячил!

Sensei
05-10-2009, 14:03
На прошивке r566 и nShaper 0.4.1 все работало.
Обновил прошивку до r655 и nShaper до 0.4.2.

Теперь пиринг в статусе всегда по нулям. Даже если грузит на 10Мбит.
Грузится он с /opt/etc/nshaper/ip_peering.lst, ничего не менял.

Также торрент на компе перестал шейпится (Other) при серфинге (Web)
и начало заикаться радио (Prio)

Вот что выводит в статус:



nShaper status Пнд Окт 5 13:40:31 EEST 2009
Ctrl-C to exit
-Zones- -Download rate- -Received- -Upload rate- -Sent-
bit/s pps Bytes bit/s pps Bytes
Total 1.09M 180 49.1M 597k 190 27.1M
inet 1.09M 180 49.1M 597k 190 27.1M
Crit 19.9k 54 992k 1.94k 4 103k
Prio 74.7k 6 5.11M 1.72k 4 107k
Web 94.2k 8 5.91M 7.93k 7 976k
Other 888k 104 36.9M 526k 165 23.4M
Lazy 7.93k 7 437k 60.1k 8 2.84M
peering 0 0 0 0 0 0


Через TC-Viewer тоже ничего нет на пиринге:



Пнд Окт 5 14:18:18 2009

Mode: HTB ^C to QUIT


All < 10752Kbit - 10752Kbit > 1091.1 kbit/s (202pps)
Internet < 1056Kbit - 1056Kbit > 1091.1 kbit/s (202pps)
Critical < 211Kbit - 950Kbit > 24.9 kbit/s ( 70pps)
High < 211Kbit - 950Kbit > 104.9 kbit/s ( 9pps)
Middle < 422Kbit - 950Kbit > 128.2 kbit/s ( 11pps)
Low < 105Kbit - 950Kbit > 863.3 kbit/s (103pps)
Lazy < 105Kbit - 950Kbit > 6.7 kbit/s ( 8pps)
Peering < 9696Kbit - 10Mbit > 0.0 kbit/s ( 0pps)



В логе ничего страшного не появляется:


Oct 5 13:04:47 rc.unslung: start service /opt/etc/init.d/S30nshaper
Oct 5 13:04:48 kernel: HTB: quantum of class 20014 is small. Consider r2q change.
Oct 5 13:04:48 kernel: HTB: quantum of class 20015 is small. Consider r2q change.

Настройки (Перешел на новый тариф, заявленная скорость 1100/600Кбит, но по тестам и 1200 и 1400 Кбит бывает.):


WAN_DN_RATE=10752
WAN_UP_RATE=2048
WAN_ZONES="inet peering"
ZONE_PATH="/opt/etc/nshaper/ip_%ZONE%.lst"
if test `date +%H` -ge 1 -a `date +%H` -lt 8; then
WAN_ZONES_DN_RATE="2200 10240"
WAN_ZONES_UP_RATE="1000 1024"
else
WAN_ZONES_DN_RATE="1056 10240"
WAN_ZONES_UP_RATE="576 1024"
fi
R2Q=10

Nikus
05-10-2009, 17:10
Прошу прощения у всех, кто уже скачал и установил 0.4.2... :o Та версия, что я ранее выложил, оказалась "рабочей" (в смысле - черновой материал при разработке версии 0.5). Файл я перезалил, просьба обновиться ещё раз.

Эта проблема не затрагивает тех, кто отредактировал скрипт вручную (по вышеупомянутым 5 пунктам).

Sensei, благодарю за подробный отчёт.

OlegaVB
05-10-2009, 17:27
Такое впечатление, что торрент трафик попадает в Web

nShaper status Пнд Окт 5 21:06:48 YEKST 2009
Ctrl-C to exit
-Zones- -Download rate- -Received- -Upload rate- -Sent-
bit/s pps Bytes bit/s pps Bytes
Total 5.07M 546 33.5M 926k 383 10.6M
inet 2.51M 321 17.8M 872k 253 10.3M
Crit 22.4k 62 263k 696 1 15.7k
Prio 0 0 108 0 0 164
Web 2.05M 197 14.8M 368 0 17.4k
Other 313k 51 2.69M 146k 184 1.06M
Lazy 4.51k 4 60.9k 706k 62 9.22M
dom.ru 2.79M 243 15.7M 46.8k 131 277k

ABATAPA
05-10-2009, 18:21
просьба обновиться ещё раз.


А crlf="\n", смотрю, не входит?

Nikus
05-10-2009, 23:02
А crlf="\n", смотрю, не входит?
Упс, забыл внести...

wlad_wm
09-10-2009, 17:18
А можно ли для чайника расписать процедуру установки шейпера от Nikus. По шагам. Прошивка r655.

OlegaVB
09-10-2009, 18:12
А можно ли для чайника расписать процедуру установки шейпера от Nikus. По шагам. Прошивка r655.

Установить необходимые параметры в начале скрипта ( они описаны на предидущих страницах ) и запустить его.

Dayran
09-10-2009, 18:17
Перечитал все 12 страниц и что-то как-то не очень понятно. Может кто-нибудь подскажет, как мне модифицировать скрипт под себя? Имею безлимит на 512кбит в обе стороны. Локальных ресурсов у провайдера нет. На роутере стоит качалка download engine, которая хотелось бы что бы имела последний приоритет, остальные приоритеты можно оставить как у всех.

OlegaVB
09-10-2009, 18:28
Примерно так
WAN_DN_RATE=512
WAN_UP_RATE=512
Локальных ресурсов у провайдера нет
WAN_ZONES="inet "
Дневного ночного нет
if test `date +%H` -ge 1 -a `date +%H` -lt 8; then
WAN_ZONES_DN_RATE="512"
WAN_ZONES_UP_RATE="512"
else
WAN_ZONES_DN_RATE="512"
WAN_ZONES_UP_RATE="512"
fi

Ну вот и все. А с качалкой - если она по http качает, тогда никак не получится.

al37919
09-10-2009, 18:42
WAN_ZONES_DN_RATE="512"
WAN_ZONES_UP_RATE="512"
смысл в том, что чтобы наш шейпер шейпил необходимо, чтобы очередь была в нашем роутере, а не в роутере у провайдера. Т.е. здесь должны стоять значения несколько меньшие, чем то, что предоставляет провайдер, т.е. для данного случая 450-480 Причем желательно тестировать сколько реально выдает провайдер, либо смотреть по функционированию шейпера

OlegaVB
09-10-2009, 19:40
Конечно Вы правы - это начальные значения, а потом пробовать в работе.

wlad_wm
09-10-2009, 20:29
После запуска nshaper получил следующеесообщение:

Can't find ESFQ module. Using SFQ queues... прошивка 1.9.2.7-d-r655.

Как же тогда собощение о том, что модуль ESFQ встроен в ядро? Может стоит встроить этот модуль самому?

al37919
09-10-2009, 20:36
http://wl500g.info/showpost.php?p=163042&postcount=230

wlad_wm
09-10-2009, 21:55
Спасибо. Oказывается стояла старая версия nShaper/

Less
10-10-2009, 01:54
Установил nshaper. Попробовал установить TC-Viewer (по инструкции GDR http://wl500g.info/showpost.php?p=161650&postcount=165).
Запускаю, получаю

Mode: HTB ^C to QUIT


All < 1800Kbit - 1800Kbit > 64336.0 bit/s ( 6pps)
1:20 < 1800Kbit - 1800Kbit > 64336.0 bit/s ( 6pps)
1:202 < 900Kbit - 1620Kbit > 63800.0 bit/s ( 5pps)
1:204 < 180Kbit - 1620Kbit > 536.0 bit/s ( 0pps)


Почему вместо классов отражаются какие-то цифры?

потому что в tc-viewer.conf надо поправить строки


# class names to use
%names = (
'1:1' => 'All',
'1:2' => 'Crit',
'1:3' => 'Prio',
'1:4' => 'User1',
'1:5' => 'User2',
'1:6' => 'User3',
);
на то что у вас.


# class names to use
%names = (
'1:1' => 'All',
'1:20' => 'Crit',
'1:202' => 'Prio',
'1:204' => 'User1',
);

и вообще в самом nshaper есть status

Dayran
10-10-2009, 07:53
Примерно так
WAN_DN_RATE=512
WAN_UP_RATE=512
Локальных ресурсов у провайдера нет
WAN_ZONES="inet "
Дневного ночного нет
if test `date +%H` -ge 1 -a `date +%H` -lt 8; then
WAN_ZONES_DN_RATE="512"
WAN_ZONES_UP_RATE="512"
else
WAN_ZONES_DN_RATE="512"
WAN_ZONES_UP_RATE="512"
fi

Ну вот и все. А с качалкой - если она по http качает, тогда никак не получится.

Сделал всё так как вы написали, только по совету al37919 исправил все значения 512 на 460. Но вот как проверить теперь, что шейпер работает? status выдаёт одни нули. Попробовал установить tc-viewer, но он мне выдаёт No transfers ...
P.S.Ну и ещё хотел насчёт качалки на роутере спросить, есть ли какая-нибудь возможность сделать её наименее приоритетной?

OlegaVB
10-10-2009, 08:08
Запустите скачивание чего нибудь и посмотрите status.

Dayran
10-10-2009, 08:30
При запуске скрипт выдаёт такое:

ifconfig: ppp0: error fetching interface information: Device not found
Device "ppp0" does not exist.
Может в этом проблема?

Попробовал поменять

WAN_IF=ppp0
LAN_IF=br0
на

WAN_IF=br0
LAN_IF=ppp0
и status стал выдавать циферки, но приоритезация всё равно не работает, качалка заглушает радио.

igor77777
10-10-2009, 08:34
Автор, в свое время мне рекомендовал здесь писать физические параметры линии:
WAN_DN_RATE=512
WAN_UP_RATE=512
какое у вас соединение с провайдером?

А вот тут уже указывать скорость исходя из которой будет работать шейпер.

WAN_ZONES_DN_RATE="512"
WAN_ZONES_UP_RATE="512"

Запускать шейпер нужно так:

./nshaper start
останавливать

./nshaper stop
просматривать статистику можно так

./nshaper status
Обращаю внимание, что просмотр статистки нагружает процессор ройтера.


Для примера привожу свои параметры
У меня ADSL
dlrate = 8192 <- это параметр из вэб-морды модема
uprate = 896 <- это параметр из вэб-морды модема

тариф 777 килобит в секудку
при этом upload провайдером не ограничен.
Что я вписал в параметры шейпера


WAN_DN_RATE=8192
WAN_UP_RATE=896
Локальных ресурсов у провайдера нет
WAN_ZONES="inet "
Дневного ночного нет
if test `date +%H` -ge 1 -a `date +%H` -lt 8; then
WAN_ZONES_DN_RATE="725"
WAN_ZONES_UP_RATE="800"
else
WAN_ZONES_DN_RATE="725"
WAN_ZONES_UP_RATE="800"
fi

Т.е. в параметрах WAN_ZONES_DN_RATE и WAN_ZONES_UP_RATE нужно указать на процентов 5-10 меньшее значение чем дает провайдер.

OlegaVB
10-10-2009, 08:36
А через что Вы соединяетесь? br0 это локальная сеть.
ifconfig покажите.