PDA

Bekijk de volledige versie : Настройка QoS для чайника (распределение трафика в WL500gP)



alex7913
10-03-2007, 15:15
кое-как вроде настроил инет на десктоп и ноут. Вопрос: подскажите можно на роутере прописать 10-15 адресов в инете доступных для компа плюс все локальные ресурсы. Чтобы все остальное с этого компа было недоступно? Или это только средствами WinXP можно сделать?

-Fantomas-
21-09-2007, 13:28
WL500gp делит домашний интернет на два компа. Прошивка 1.9.2.7-8-pre9. Было замечено следующие :

когда один комп в сети , то он использует (по данным диспетчера задачь) не более 50 % канала ....но как в сеть подключаеться второй комп в диспетчерах задачь загрузка канала у обоих сразу падает до 25 % ...

Кто-то сталкивался с таким ?! - У всех ли идет вот такое резервирование канала ?! ...т.е. как бы выходит, что в любом случае роутером резервируеться 50 % канала .....:cool: :eek:

Reyter
21-09-2007, 13:47
100% загрузки канала по данным диспетчера задач, если я не ошибаюсь это когда трафик идет на полную катушку в обе стороны. т.е. одновременно и аплоад и даунлоад на полной скорости.
для измерения реальной скорости лучше использовать какие-то более другие тулзы. например - определить скорость скачивания конкретного файлы (обязательно архива или сжатого тем или иным образом).

-Fantomas-
21-09-2007, 14:10
хм... - у меня четко видно в диспетчере, как и "туда" и "обратно" с одним компом = 50 % ...с двумя = 25 % на каждый комп.....

метод измерения подозрений к диспетчеру не выявляет :p ;) - потому как когда подключаю ноут к сети без роутера и качаю какой-то большой файлик, то диспетчер без проблем показывает около 90% - 100 % загрузки 100 Мб (ну разумееться когда с большого колличества юзеров качает), а на роутере выходит 50 % от 54 Мб всегда свободно:cool:

Oleg
21-09-2007, 15:09
во-первых, 54 мегабит там нет (в факе написано). во-вторых, конечно делят - эфир же, общая среда.

-Fantomas-
21-09-2007, 15:12
дык, так выходит, что если на точке будет "висеть" 10 юзеров, то канал будет делиться на 10 в независимости загружают ли они его или нет?!

Oleg
21-09-2007, 15:23
в зависимости. т.е. всего эфир может пропустить 30 мегабит одновременно. если начнут качать все десять, то будет по 3 мегабита. если двое из этих десяти, то по 15. цифры условны. могут быть перекосы.

это не фича и не бага. это физика.

Sorin_j
08-04-2008, 12:07
Господа, прорывшись 3 дня на форуме, я так и не смог осуществить действие, вынесенное в название темы.
Задача: обладая минимальным опытом работы с Linux, настроить ограничения по скачиванию с WAN для компьютеров внутренней сети (для примера, с IP 192.168.1.3, 192.168.1.72, 192.168.1.115).
Что имеем: рутер WL500gP c последней прошивкой от Олега, настроенное подключение через PPPoE к повайдеру Lanck Telecom (Питер).
Что я сделал:
1. Установил и запустил терминальную программу Putty (под Vista).
2. Связался с рутером (адрес по умолчанию, 192.168.1.1). Ввёл логин и пароль администратора.
3. Изучил редактор vi (нашёл справку по нему, сделав запрос в ya.ru "vi editor commands"). Запускается командой vi, выход из него- набрать ZZ (shift+Z 2 раза).
4. Выяснил, что на моём рутере после запуска терминальной сессии я нахожусь в (пустом) каталоге root, по этому команда ls (аналог команды DIR для MS-DOS) ничего не выдаёт.
5. Выяснил, что команда cd /usr/sbin и последовательность команд cd /usr, cd /sbin приводят (почему-то!) в разные каталоги (согласно листингу ls). :confused:
6. Узнал, что файл wshaper в каталоге, куда я перешел командами cd /usr, cd/sbin, защищён от записи. Стереть/изменить его я не могу.

Подскажите, пожалуйста, дальнейшую последовательность действий.
Напомню, что жаргон типа "скомпилируй, смонтируй, сделай выполняемый скрипт" требует пошагового пояснения ввиду труднодоступности документации и обилия проблем типа пункта 5.

Sayd
08-04-2008, 19:32
Слэш в начале пути означает, что стоящая после него директория будет подыскиваться в корне, а не в текущей директории. Отсюда только проблема 5.

igor77777
08-04-2008, 23:16
Вдохновленный идеями от nil (http://wl500g.info/showpost.php?p=150419&postcount=54) и Siddha (http://wl500g.info/showpost.php?p=154919&postcount=57), описаными ими в этой теме здесь (http://wl500g.info/showpost.php?p=150419&postcount=54) и здесь (http://wl500g.info/showpost.php?p=154919&postcount=57). Я решил развить эту идею.
Моя идея состоит в том, что скорость rTorrent'а будет ограничиваться не только фактом наличия форвардного трафика, но и регулироваться в заданом диапазоне в зависимости от количества форвардного трафика. Кроме того, скрипт не будет постоянно крутиться в бескончном цикле, а будет запускаться самим rTorrent'ом с заданной периодичностью.
Ниже, я опишу, как я настраивал свой роутер, чтобы работал мой скрипт rt-shaper.sh. По аналогии и скорее всего с незначительными изменениями вы сможите сделать тоже самое.

Значит так. Предполагается, что роутер (ASUS wl-500gP или совместимый) уже прошит олеговской прошивкой и проведена начальная настройка до rTorrent. Кроме того, должны стоять следующие утилиты: tail, head, awk, wget. Если чего из этого нет, то отправляемся ищем темы по начальной настройке и настраиваем все, что нужно. Кроме того, понадобится утилита sudo, для того, чтобы скрипт смог работать под пользователем p2p, от имени которого стартует rTorrent.

Sudo
У меня rTorrent работает от имени пользователя p2p. Поскольку этот пользователь бесправный, то он не сможет запускать этот скрипт. Точнее скрипт он запустит, а вот обратиться к iptables - не сможет. Для того чтобы обойти эту неприятность и ставится sudo. Ставим:


ipkg install sudo

После установки, находим конфиг sudo (/opt/etc/sudoers) и правим его. Самый ПРАВИЛЬНЫЙ способ править конфиг sudo - это использовать утилиту visudo. Дело в том, что перед записью исправленного конфига visudo в начале проверяет его на корректность и если все нормально, то сохраняет его. А если находит ошибки - то не сохраняет. Итак, набираем в консоле:


[admin@IGORROUTER root]$ visudo

Вот мой конфиг sudo. Строки которые я исправлял, отмечены красным:


# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
# Failure to use 'visudo' may result in syntax or file permission errors
# that prevent sudo from running.
#
# See the sudoers man page for the details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification

# Defaults specification

# Runas alias specification

# User privilege specification
# root ALL=(ALL) ALL
admin ALL=(ALL) ALL

# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now

p2p IGORROUTER = (admin) NOPASSWD: /usr/sbin/iptables

Defaults:p2p runas_default = admin
Defaults:admin runas_default = admin

Пользователя root я закомментарил, и добавил пользователя admin, аналогичного root.
Указал, что пользователь p2p может запускать на моем роутере (IGORROUTER) утилиту iptables без пароля.
Пользователем по умолчанию для p2p назначен admin. Также и для пользователя admin, назначен пользователь admin, иначе sudo пытается использовать пользователя root, которого нет. Узнать имя роутера можно при помощи hostname. Набираем в консоле:


[admin@IGORROUTER root]$ hostname
IGORROUTER

и видим имя своего роутера. Заменяем IGORROUTER на имя своего роутера.

Кратко, команды, которые я использовал при правке конфига в visudo:
- клавиша <Insert> - перейти в режим редактирования;
- клавиша <Ecs> - выйти из режима редактирования;
- ":w" - сохранить конфиг;
- ":q" - выйти из visudo;
- ":wq" - сохранить конфиг и выйти из visudo.

Сам скрипт и описание как он работает в следующем сообщении (http://wl500g.info/showpost.php?p=160200&postcount=59).

igor77777
10-04-2008, 19:29
продолжение этого (http://wl500g.info/showpost.php?p=160199&postcount=58) сообщения.

Скрипт rt-shaper.sh

Скрипт rt-shaper.sh предназначен для автоматической регилировки скачки/отдачи bittorrent-клиентом rTorrent в зависимости от наличия и количества трафика проходящего через роутер. Другими словами, если форвардного(проходящего через роутер на клиентов в вашей сети) трафика через роутер нет, то rTorrent, установленный на роутер, не ограничивается. Если же форвардный трафик есть, то скорость скачки/отдачи ограничивается. Более того, и скорость скачки, и скорость отдачи изменяется в заданном интервале в зависимости от количества форвардного трафика.

Я рекомендую скрипт ставить в отдельный каталог. У меня он стоит в /opt/etc/rt-shaper

На данный каталог нужно дать права пользователю p2p. У меня в качестве группы для каталога указана p2p и группе даны права на чтение(r), запись(w) и выполнение(x).

Далее, нужно место, где будут храниться значения, которые должны сохраняться между запусками скрипта. Поскольку, при каждом запуске скрипта, туда что-то пишется, лучше это место завести не на флешке, а на винте. У меня винт смонтирован в /home, а на нём я создал подкаталог var и ещё подкаталог rtorrent. Таким образом, каталог с временными файлами имеет такой вид: /home/var/rtorrent

На него тоже нужно дать права на запись пользователю p2p. У меня права на этот каталог совпадают с правами на /home/var/rtorrent

Скрипт /opt/etc/rt-shaper/rt-shaper.sh я приложил к сообщению.

Переменные скрипта, которые возможно прийдется поменять под себя:
RTSHAPER= - каталог, в котором лежит сам скрипт
VARCAT= - каталог временных файлов
LOGFILE= - логфайл

В каталог /opt/etc/rt-shaper можно положить файл с настройками, которые будут использоваться в работе скрипта.

Файл rt-shaper.conf

min_uprate=50; # минимальный upload rate rTorrent в килобайтах. Скорость будет уменьшаться до него, но не ниже
min_dlrate=10; # минимальный download rate rTorrent в килобайтах. Скорость будет уменьшаться до него, но не ниже
step_rate=10; # шаг изменения rate в килобайтах
max_uprate=70; # максимальный upload rate rTorrent в килобайтах. При появлении форвардного трафика будет выставлен именно он. При дальнейшем росте форвардного трафика rate будет уменьшаться вплоть для min_uprate
max_dlrate=50; # максимальный download rate rTorrent в килобайтах. При появлении форвардного трафика будет выставлен именно он. При дальнейшем росте форвардного трафика rate будет уменьшаться вплоть для min_dlrate
max_count_change_rate=5; # максимально количество пропущенных изменений rate. После этого количества rate будет изменен по любому
interval_rate=7; # частота точнее интервал, в секундах, с которой дергается скрипт. Должен совпадать с тем, что указано в конфиге rTorrent
enable_log=0; # признак ведения лога 0-не вести лог. 1-вести лог, 2-вести подробный лог, 3-лог с промежуточными переменными
Можно конфиг и не ложить, а задать все необходимые значения прямо в скрипте.

Параметры: min_uprate, min_dlrate, max_uprate, max_dlrate, step_rate - задаются в килобайтах и зависят от скорости вашего интернета (У меня сейчас скорость такая: download = 777 килобит, upload = 824 килобит). Т.е. сейчас, при наличии форвардного трафика скорость скачки будет гулять в интервале между 10 килобайтами и 50 килобайтами, а скорость отдачи между 50 килобайтами и 70 килобайтами с шагом в 10 килобайтами.

Параметр: interval_rate - должен совпадать с тем значением, которое будет указано для шедулера rTorrent, который будет запускать скрипт.

Подключение скрипта к rTorrent

Для подключения скрипта к rTorrent, нужно добавить одну строчку в конфиг rTorrent.

У меня конфиг rTorrent лежит в /opt/etc/rtorrent.conf

Добавляем туда строку:

schedule = rtshaper,15,7,execute=/opt/etc/rt-shaper/rt-shaper.sh
Здесь: 15 - задержка, в секундах, после которой rTorrent начнет запускать скрипт на выполнение. 7 - интервал, в секундах, с которым rTorrent будет запускать скрипт, должен совпадать с параметром interval_rate из rt-shaper.conf.

Вот собственно и все. Надеюсь, что я ни чего не пропустил.

6opoga
11-04-2008, 15:24
Ау, господа. Что, никто не делал ограничение трафика? Неверю!

А зачем вам, собственно, ИЗМЕНЯТЬ файл wshaper? Он по идее должен конфигуриться извне.

6opoga
11-04-2008, 16:57
На самом деле wshaper тут не помощник совсем.
wshaper всего лишь настраивает неоптимальные параметры "по умолчанию" в более оптимальные. С точки зрения автора wshaper'а.

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

И в соответствии с вот этими подробностями нужно написать скрипт, который сделает правильные настройки, и прописать его в post-firewall. И задача написания этого скрипта - не "чайницкая" ни разу. А простых и удобных готовых решений я не видел, к сожалению.

Можно, конечно, тупо сказать "мой трафик главнее, сосунам - остатки", но тогда велик риск, что им не достанется вообще ничего :) Зато скрипт будет в пару строк.

Sorin_j
11-04-2008, 19:36
Так-так-так, давайте поподробнее.
1. Изменять напрасно я ничего не хочу. Но в силу ограниченности в знаниях, я не могу правильно сконфигурировать wshaper через веб-интерфейс: там, как я понял, можно задать ограничения по портам и IP. И если IP я могу определить, то узнать, по каким портам кто чего качает- увольте, не ставить же каждому файрволл с удалённым мониторингом открытых портов и траффика по ним?
2. Задача такая: во внутренней сети, которую обслуживает wl500gP, несколько (почти постоянно включенных) компьютеров. Один из них- админский, ему можно занимать всю полосу внешнего интернет-соединения, так как его потребление возможно ограничить на нём самом и на нём же контролировать. То есть, лишнего он не возьмёт.
Для остальных компьютеров правило простое: каждому выделить полосу не менее минимальной- из оставшихся ресурсов.

3. Отдельно, по возможности, хотелось бы увидеть описание простого (дл Вас) действия "прописать его в post-firewall". Как я уже писал, к примеру, у меня проблема с защитой от записи (если, конечно, я туда пытаюсь писать, куда надо).

romanchenko
11-04-2008, 19:55
я мож конечно чего не понял, но чем не устраивает штатный bandwitch manager? Когда сажусь поиграть по инету - режу ноуту жены 80 порт до 25кб/с (весь канал 500кб/с, если шейпить до 50кб/с - появляются лаги) - для серфа достаточно и моему пингу не мешает.
Толко вот хотелось бы узнать: возможно ли как-то без перезагрузки роутера оперативно включать/отключать шейп? Скажем по умолчанию все отключено, а при нужде поиграть запустил скриптик какой и вуаля... Закончил гамится - другой скриптик и опять все отключено...

Sorin_j
11-04-2008, 20:26
А если жена качает с ftp? 80 порт? А если ещё и скайп трафик жрёт? На все порты не напасёшься правил, да и все порты не предусмотришь. Или не прав?

ABATAPA
11-04-2008, 20:44
режу ноуту жены 80 порт до 25кб/с (весь канал 500кб/с, если шейпить до 50кб/с - появляются лаги) - для серфа достаточно и моему пингу не мешает.

Ээээ.. Такие пропорции - прямая угроза браку. :)

Sorin_j
11-04-2008, 20:58
Ни разу не угроза. Например, ноут моей жены не тащит WOW, поэтому она играет с одного из десктопов. Ноут же оккупирует кто-нибудь из выселенных из WOW детей- чисто посёрфить и поквипить.

Sorin_j
13-04-2008, 20:25
Опать всё встало, ни ответа, ни привета. Что, никто не настраивал, что-ли? :mad:

6opoga
14-04-2008, 12:26
Опать всё встало, ни ответа, ни привета. Что, никто не настраивал, что-ли? :mad:

Значит не настраивал. Нет, ну я в принципе представляю себе как и что написать, и как работают всякие шейперы тоже знаю (рекомендуемое чтиво на эту тему - linux advanced routing howto, гуглится на ура). Но готового скрипта у меня нет. В принципе там всего и надо-то два класса на CBQ и фильтр отсекающий зажимаемые адреса. Да, шейпить надо, конечно, br0, а не ppp0/vlan1.

Sorin_j
15-04-2008, 15:00
Вот так. Хочешь сделать ограничения трафика- предлагают изучить систему рутинга в линуксе. А дальнейшая часть повествовани (про скрипты и СBQ/vlan) тоже не для чайников писана... :(

dadittoz
15-04-2008, 15:59
У меня стоит шейпер на основе предложенного тут (http://www.wl500g.info/showpost.php?p=35084&postcount=74). Я не очень понимаю как он работает если его вешают на входящий интерфейс, но я его немного видоизменил, и вешаю на br0. Вроде бы работает. В связи с тем, что он вешается не на внешний интерфейс, а на внутренний, downlink и uplink поменяны местами, т.е. в данном скрипте uplink - это скорость входящего соединения, а downlink - исходящего. Хотя исходящий даже не важен в этом скрипте, у меня он не используется.

Мой модифицированный вариант
/opt/bin/myshaper

#!/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=10000
UPLINK=475
DEV=$2

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

# low priority destination netmasks
NOPRIOHOSTDST="$4"

# low priority source ports
NOPRIOPORTSRC="$5"

# low priority destination ports
NOPRIOPORTDST="$6"

# high priority destination netmasks
HIGHPRIOHOSTDST="$7"

# high priority destination netmasks
HIGHPRIOHOSTSRC="$8"

# high priority source ports
HIGHPRIOPORTSRC="$9"

# high priority destination ports
HIGHPRIOPORTDST="$10"

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

tc class add dev $DEV parent 1: classid 1:2 htb rate 100mbit \
ceil 100mbit


# high prio class 1:10 - gets 50 to 100% traffic and highest priority:
tc class add dev $DEV parent 1:1 classid 1:10 htb rate $((5*$UPLINK/10))kbit \
ceil ${UPLINK}kbit 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

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

# 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


# LAN - UNLIMITED
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip src 192.168.3.1/32 \
flowid 1:2

# 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

# high priority for VoIP traffic (by source port)
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip sport 5004 0xffff \
match ip protocol 0x11 0xff \
flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip sport 5060 0xffff \
match ip protocol 0x11 0xff \
flowid 1:10

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

# ICMP (ip protocol 1) in the interactive class 1:10 so we
# can do measurements & impress our friends:
tc filter add dev $DEV parent 1:0 protocol ip prio 1 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 2 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

# more highpriotraffic
for a in $HIGHPRIOPORTDST
do
echo HIGHPRIO DST PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip dport $a 0xffff flowid 1:10
done

for a in $HIGHPRIOPORTSRC
do
echo HIGHPRIO SRC PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip sport $a 0xffff flowid 1:10
done

for a in $HIGHPRIOHOSTSRC
do
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip src $a flowid 1:10
done

for a in $HIGHPRIOHOSTDST
do
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip dst $a flowid 1:10
done

# some traffic however suffers a worse fate
for a in $NOPRIOPORTDST
do
echo NOPRIO DST PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport $a 0xffff flowid 1:30
done

for a in $NOPRIOPORTSRC
do
echo NOPRIO SRC PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 15 u32 \
match ip sport $a 0xffff flowid 1:30
done

for a in $NOPRIOHOSTSRC
do
echo NOPRIO HOST SRC $a
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip src $a flowid 1:30
done

for a in $NOPRIOHOSTDST
do
echo NOPRIO HOST DST $a
tc filter add dev $DEV parent 1: protocol ip prio 17 u32 \
match ip dst $a flowid 1:30
done

# rest is 'non-interactive' ie 'bulk' and ends up in 1:20
#tc filter add dev $DEV parent 1: protocol ip prio 1 u32 \
# match ip dst 0.0.0.0/0 flowid 1:20

########## 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
#
# attach ingress policer:
#tc qdisc add dev ppp0 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 src \
# 0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1
#tc filter add dev ppp0 parent ffff: protocol ip prio 50 u32 match ip sport \
# 6882 0xffff police rate 256kbit burst 10k drop flowid :1


Запускать так
/opt/bin/myshaper start br0 "внешние_АДРЕСА_с_НИЗКИМ_приоритетом" "внутренние_АДРЕСА_с_НИЗКИМ_приоритетом" "внешние_ПОРТЫ_с_НИЗКИМ_приоритетом" "внутренние_ПОРТЫ_с_НИЗКИМ_приоритетом" "внешние_АДРЕСА_с_ВЫСОКИМ_приоритетом" "внутренние_АДРЕСА_с_ВЫСОКИМ_приоритетом" "внешние_ПОРТЫ_с_ВЫСОКИМ_приоритетом" "внутренние_ПОРТЫ_с_ВЫСОКИМ_приоритетом"

Я например вызываю из /usr/local/sbin/post-firewall
/opt/bin/myshaper start br0 "" "" "" "6667" "" "" "22 5190 6112" ""

Это уменьшает приоритет для входящего трафика на порт 6667 (там у меня висит торрент), а также ставит высокий приоритет для SSH, ICQ, GuildWars

ABATAPA
15-04-2008, 18:39
/opt/bin/myshaper start br0 "" "" "" "6667" "" "" "22 5190 6112" ""

Это уменьшает приоритет для входящего трафика на порт 6667 (там у меня висит торрент), а также ставит высокий приоритет для SSH, ICQ, GuildWars

Рекомендую добавить DNS.

A-r-t
17-04-2008, 15:23
:o dadittoz не мог бы ты обьяснить чайнику как все то что ты написал поставить в маршуртизатор :o:o:o

dadittoz
17-04-2008, 18:25
Попробую :) На всякий случай пишу в случае, если у вас нет внешнего диска у рутера.

1) Зайти на рутер через ssh или telnet как в первом сообщении в этой теме
Если вы не выполнялии инструкции по первоначальной настройке (http://wl500g.info/showthread.php?t=3171), запустите это:

mkdir -p /usr/local/sbin/
echo "#!/bin/sh" >> /usr/local/sbin/post-boot
cp /usr/local/sbin/post-boot /usr/local/sbin/post-firewall
cp /usr/local/sbin/post-boot /usr/local/sbin/post-mount
cp /usr/local/sbin/post-boot /usr/local/sbin/pre-shutdown
chmod +x /usr/local/sbin/p*

2) скачать файл скрипта myshaper (я тут его временно выложил)

wget http://www.humanscore.com/tmp/myshaper -O /usr/local/sbin/myshaper
поставить права на запуск для него

chmod +x /usr/local/sbin/myshaper
отредактировать

vi /usr/local/sbin/myshaper
нажать i
исправить строчки, сделать так чтобы значение DOWNLINK соответсвовало исходящей скорости вашего канала в интернет, а UPLINK входящей в килобитах

DOWNLINK=10000
UPLINK=475
после исправления нажать

Esc
:w
:q
файл должен сохраниться, а вы оказаться в коммандной строке
3) Добавить вызов myshaper в /usr/local/sbin/post-firewall

vi /usr/local/sbin/post-firewall
Вставить строчку (аналогично пункту 2)
Это пример для того чтобы уменьшить приоритет для порта 6667, а также увеличить для 22 53 5190. Если нужно что-то другое, смотрите мой предыдущий пост с описанием параметров, или пишите здесь, попробуем придумать для вашего случая.

/usr/local/sbin/myshaper start br0 "" "" "6667" "" "" "" "22 53 5190 6112" ""
Описание параметров смотрите в предыдущем сообщении. Сохранить, выйти.
4) Сохранить изменения во флэш.

flashfs save
flashfs commit
flashfs enable
5) Перезагрузить рутер

reboot
или запустить post-firewall

/usr/local/sbin/post-firewall

Sorin_j
17-04-2008, 21:10
УРА! Приступим.
1. [admin@WL-001731xxxx41 root]$ wget http://www.humanscore.com/tmp/myshaper -O /usr/local/sbin/myshaper
wget: /usr/local/sbin/myshaper: No such file or directory

Хорошо, попробуем так:
1a. cd ..
1b. [admin@WL-001731xxxx41 /]$ wget http://www.humanscore.com/tmp/myshaper -O /usr/local/sbin/
Connecting to www.humanscore.com[66.98.222.101]:80
sbin 100% |*****************************| 5849 00:00 ETA

Что-то куда-то загрузилось.
Дальше-то что?

Sorin_j
17-04-2008, 21:19
Что-то мне кажется, что там несколько папок /sbin, попытался создать файл в одной- пишет, что файловая система read-only...
И ещё при выводе команды ls названия выводятся разным цветом- синим, голубым, серым (Putty, telnet). Что-бы это значило?

dadittoz
18-04-2008, 00:11
Видимо вы не выполняли инструкции по первоначальной настройке (http://wl500g.info/showthread.php?t=3171).

И не модифицируйте команды пожалуйста на свой вкус :) Запустив
wget http://www.humanscore.com/tmp/myshaper -O /usr/local/sbin/ вы создали файл /usr/local/sbin. Теперь его надо удалить, если вы не перезагружали рутер или запускали команды flashfs save и т.д.

Удаляем файл на всякий случай. Если выдаст ошибку, ничего страшного, значит этого файла нет

rm /usr/local/sbin

После этого выполните эти команды:

mkdir -p /usr/local/sbin/
echo "#!/bin/sh" >> /usr/local/sbin/post-boot
cp /usr/local/sbin/post-boot /usr/local/sbin/post-firewall
cp /usr/local/sbin/post-boot /usr/local/sbin/post-mount
cp /usr/local/sbin/post-boot /usr/local/sbin/pre-shutdown
chmod +x /usr/local/sbin/p*

По поводу цвета: светло голубым показываются ссылки на файлы, зеленым запускаемые файлы, синим каталоги, серым просто файлы.

Насчет read-only файловой системы все правильно, у вас не получится создать файлы в каталоге /sbin, /bin и т.д. Только в каталоге /tmp. Да и там файлы при перезагрузке удалятся, если их не сохранить с помощью комманд flashfs. Если вы запустите ls -al /usr, то увидите, что каталог /usr/local по сути является ссылкой на каталог /tmp/local. И поэтому там у вас получится создать файл в /usr/local/sbin, и если вы сохраните его с помощью команд flashfs, то он будет восстанавливаться после перезагрузки.

Sorin_j
18-04-2008, 15:48
Ну конечно, никакие ssh-сервера я не настраивал. Никто не просил.
Но по указанной ссылке действовать тоже не получается:
[admin@WL-001731xxxx41 root]$ mkdir -p /usr/local/sbin/
mkdir: Cannot create directory `/usr/local/sbin/': Not a directory
Вот так пока...

P.S. О, чудо! Я допёр! Сначала я попобовал так:
[admin@WL-001731xxxx41 root]$ mkdir -p /usr/local/sbin
mkdir: Cannot create directory `/usr/local/sbin': File exists
Ага! Это тот "sbin", который я создал командой "wget http://www.humanscore.com/tmp/myshaper -O /usr/local/sbin/" . Удаляем его:
[admin@WL-001731xxxx41 root]$ rm /usr/local/sbin
Пробуем делать директорию:
[admin@WL-001731xxxx41 root]$ mkdir -p /usr/local/sbin/
[admin@WL-001731xxxx41 root]$
Ура, пока получается. Роем дальше...

Sorin_j
18-04-2008, 16:25
В общем, всё получилось. Но когда оно всё получилось, я понял: меня опять развели. В первом сообщении писал: "Задача: обладая минимальным опытом работы с Linux, настроить ограничения по скачиванию с WAN для компьютеров внутренней сети (для примера, с IP 192.168.1.3, 192.168.1.72, 192.168.1.115)."
Тут, заметьте, нет ни слова про порты. Это потому, невозможно выяснять, _по какому порту_ происходят соединения с компьютеров в моей внутренней сети. Нужно ограничить трафик ПО ВСЕМ ПОРТАМ. Не должно быть никакого дела, по каким портам кто сегодня качает инфу. Там могут быть и просмотр видео с youtube, и торрент-клиент, и Skype, и QIP, и FTP, и ещё 65000 портов. И что, все их вносить в myshaper???

Sorin_j
18-04-2008, 18:05
И ещё, если понадобится выключить/изменить параметры ограничителя трафика- как действовать? Достаточно-ли отредактировать post-firewall в редакторе vi, cохранить его и после команд flashfs save, flashfs commit, flashfs enable - дать команду reboot?

dadittoz
19-04-2008, 11:43
Это у меня стоит по портам, вы можете прописать и айпишники.

/opt/bin/myshaper start br0 "внешние_АДРЕСА_с_НИЗКИМ_приоритетом" "внутренние_АДРЕСА_с_НИЗКИМ_приоритетом" "внешние_ПОРТЫ_с_НИЗКИМ_приоритетом" "внутренние_ПОРТЫ_с_НИЗКИМ_приоритетом" "внешние_АДРЕСА_с_ВЫСОКИМ_приоритетом" "внутренние_АДРЕСА_с_ВЫСОКИМ_приоритетом" "внешние_ПОРТЫ_с_ВЫСОКИМ_приоритетом" "внутренние_ПОРТЫ_с_ВЫСОКИМ_приоритетом"


Если вы хотите поставить низкий приоритет этим айпишникам, запускайте так


/usr/local/sbin/myshaper start br0 "" "192.168.1.3 192.168.1.72 192.168.1.115"

Да, если нужно выключить чтобы не работало после перезагрузки можно закомментировать (поставить знак #) в начале строки, и выполнить flashfs save, flashfs commit, flashfs enable

А остановить шейпер можно написав в командной строке /usr/local/sbin/myshaper stop

Я вообще никого не разовдил. Я всего лишь поделился своим вариантом QoS который я использую для данной цели. Если он вам не подходит, напишите, как бы вы хотели чтобы работал шейпер, попробуем что-нибудь придумать. Скрипт поменять не сложно. Можно, например, жестко ограничить максимальную скорость для низкого приоритета, если есть такая задача. Я же исходил из своих потребностей.

Sorin_j
19-04-2008, 21:02
Ну слава богу, наконец-то всё встало на свои места. ЗАРАБОТАЛО!

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

Sorin_j
19-04-2008, 21:22
Вот бы что ещё хотелось, в плане повышения, так сказать, функциональности...
Хочется для ip c низким приоритетом выделить "гарантированную" полосу трафика, ниже которой shaper бы не обрезал. Скажем, 56кбит на адрес. Чтоб пинг в WOW не краснел :)

dadittoz
19-04-2008, 23:56
А так и есть, минимальная скорость для высокого приоритета 50% от скорости канала, среднего 40%, а низкого 10%. Ниже этих значений скорость опускаться не должна. Также если в каком-либо приоритете скапливается свободный трафик, он распределяется по другим используемым приоритетам.

A-r-t
28-04-2008, 14:27
Большое спасибо за шейпер, но у меня все равно кажись не работает... и у меня одна проблемка у меня безлимит, но на до ресурсов опреатора, и до пругих клиентов оператора (6 ИП адресов - файл серверы) скорость у меня 10 мегабит, на других клиентов мне наплевать, но вот скороть до файл серверов мне вообще не нужно как то либо урезать. а вот все остальное, что у нас называется внеха, скороть туда 1 мегабит, мне очень срочно надо урезать, причем иногда мне это нужно так, что бы у определеных компов скорость вообще выше определеной планки не поднималась, даже если никто кроме них не сидит.

вся срочность потому что этот канал делит между собой 7 человек, и все бы хорошо, но 2 из них узнали что такое торренты, и теперь, когда хотя бы один начинает что либо качать, канал забивается на 95%, естественно на 50-100 килобитах даже 3 человека нормально даже по сайтам не полазят. пришлось пока им в вебе урезать скорость до 300 килобит, и как вследстиве ограничение на все, включай внутрисеть

Dekker
28-04-2008, 17:45
побродите по этой теме

http://wl500g.info/showthread.php?t=13609

там приведены неплохие решения для приоритезации именно торенов

A-r-t
29-04-2008, 08:55
спасибо, сейчас буду смотреть. а что нибуть по моему вопросу кто нибуть что ниубть знает, я про внутрисеть - внеха.
По поводу приведеного шейпера, ОН У МЕНЯ ЗАРАБОТАЛ!!! и теперь осталосьрешить пару вопросов, я в этом деле чайник, поэтому если вопросы дурацкие то не ругайте:

1. в шейпере есть часть
# LAN - UNLIMITED
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 \
match ip src 192.168.3.1/32 \
flowid 1:2

что она означает, меня это заинтересовало, потому что внутри сетки у меня ИП стоят на 192.162.1.*
не надо ли что нибуть изменять ?
2. есть строки
# high prio class 1:10 - gets 50 to 100% traffic and highest priority:
tc class add dev $DEV parent 1:1 classid 1:10 htb rate $((5*$UPLINK/10))kbit \
ceil ${UPLINK}kbit 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

# lowest priority class 1:30 - gets 10 to 100% traffic and lowest priority:
tc class add dev $DEV parent 1:1 classid 1:30 htb rate $((1*$UPLINK/10))kbit \
ceil ${UPLINK}kbit burst 6k prio 3 quantum 1500
если я хочу что бы lowest priority class занимал у меня не более 50% канала, а высоко приоритетный не менее 80% достаточно ли просто поменять там циферки

ну и еще раз хочу спросить, так как это для меня сейчас очень важно, можно ли поставить этот шейпер только на "внеху", тоесть на всё, кроме 10 ИП адресов оператора

dadittoz
29-04-2008, 13:24
1) Этот адрес вам нужно поменять на адрес вашего сервера, чтобы трафик который идет локально от вашего сервера не резался шейпером, например когда заходите по telnet/ssh
2) Да, вы можете все поменять. rate - это минимальная скорость потока, ceil - максимальная, когда есть свободный трафик

По поводу добавления внешних ip, на которых бы трафик не резался вообще, то их можно добавить в класс 1:2, например так:


UNLIMHOSTS="ip1 ip2 ip3 ip4 ip5 ip6 ip7 ip8 ip9 ip10"

for a in $UNLIMHOSTS
do
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip src $a flowid 1:2
done
Можно добавить этот код в конец файла.

A-r-t
29-04-2008, 15:21
Ну вроде свершилось, все кажется получается, Спасибо сПасибо спАсибо спаСибо спасИбо спасиБо спасибО тебе dadittoz за все

A-r-t
29-04-2008, 20:22
со след месяца включают функцию с 02.00 до 08.00 скорость в два раза выше, в связи с чем встал вопрос, а как отключить шейпер автоматически в это время, и соответственно обратно включить в 8 часов. вопрос ограничения трафика меня в это время не особо волнует, но если возможно, то напишите кто нибуть возможно ли на это ночное время, тоесть включать другой шейпер, на 2 мегабита, на эти 6 часов

Dekker
30-04-2008, 06:36
crontab может помочь :)

A-r-t
30-04-2008, 11:26
:o:o еще вопрос, как IP адреса поменять на MAC адреса, ну или если пойти с другой стороны, как ограничить доступ в инет по IP адресу, по MAC адресу у меня уже стоит через Веб интерфейс, создан список тех кто может заходить, а всем остальным нет, вот такой же список бы и на ip адреса

и как ограничить количество потоков, а то даже с ограничениями, когда человек качает в в 10 потоков, он все забирает на себя

и еще, как заменить ip адреса на диапозоны, это в тему поста номер 32, а то оказывается мне нужно не оганичивать не 5 ip адресов, а 3 диапазона 212.49.96.0 - 212.49.127.255, 91.191.224.0 - 91.191.255.255, 92.242.0.0 - 92.242.31.255, как же эта команда пишется ?

может попробовать как тут написано http://wl500g.info/showthread.php?p=95224#post95224
тоесть создать файл-список ip адресов провайдера, Файл назвать "/etc/isp-ip-addrs.lst"
формат такойсделать :

89.110.48.0/21
89.110.56.0/22
...
78.37.112.0/20


а после написать

UNLIMHOSTS="/etc/isp-ip-addrs.lst"

for a in $UNLIMHOSTS
do
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip src $a flowid 1:2
done

это сработает? и что означает 89.110.48.0/21 это диапазон от0 до 21 или порт 21
а может можно просто поменять команду UNLIMHOSTS на какуюто другую и прописать в определеном формате диапазоны ???

dadittoz
30-04-2008, 20:02
С MAC-адресами так просто не выйдет. Надо будет в пакетах ковыряться с отступом. В гугле есть примеры, но честно говоря не пробовал, может быть отпишется кто-нибудь.

Диапазоны с масками можно прописывать вместо айпишников. Можно просто через пробел прописать в эту строчку

UNLIMHOSTS="89.110.48.0/21 89.110.56.0/22 78.37.112.0/20"
Если вам уж очень хочется в отдельном файле, тогда так

UNLIMHOSTS="$(cat /etc/isp-ip-addrs.lst)"
Учтите, что файл /etc/isp-ipaddrs.lst при перезагрузке исчезнет, если вы его не внесете в /usr/local/.files и не сохраните с помощью команд flashfs.

Что касается равномерного распределения трафика не по количеству потоков, а по ip адресам внутри одного класса, то я боюсь, что это невозможно. SFQ распределяет трафик по сессиям, а не по ip адресам. То есть, если ваш трафик относится к одному классу, то в нем уже не получится сделать честное распределение по айпишникам, трафик делится на общее количество потоков. Вам придется создать отдельный класс для этого пользователя и в нем установить ограничения.

A-r-t
30-04-2008, 22:07
Еще раз спасибо.
Странно, но кажется у меня не работают ВНУТРЕНИЕ АДРЕСА С ВЫСОКИМ ПРИОРИТЕТОМ, введя команду [^RandomArtem!@WL-001E8CD072C4 root]$ /usr/local/sbin/myshaper start br0 "" "192.162.1.5 192.162.1.6" "" "" "" "192.162.1.2" "80" ""

получил ответ

HIGHPRIO SRC PORT 80
NOPRIO HOST DST 192.162.1.5
NOPRIO HOST DST 192.162.1.6

проверил, и в действительности кажется не сработал, так как не выдает положеную ширинуканала, даже когда я один
поэксперементировав, еще раз провеил /usr/local/sbin/myshaper start br0 "1.1.1.1" "192.162.1.5 192.162.1.6" "21" "25" "2.2.2.2" "3.3.3.3" "80" "100"
получил
HIGHPRIO DST PORT 100
HIGHPRIO SRC PORT 80
NOPRIO DST PORT 25
NOPRIO SRC PORT 21
NOPRIO HOST SRC 1.1.1.1
NOPRIO HOST DST 192.162.1.5
NOPRIO HOST DST 192.162.1.6

dadittoz
01-05-2008, 11:37
А значение UPLINK у вас правильное стоит? Соответствует величине канала?

A-r-t
01-05-2008, 21:06
да, конечно, я уже как то раз на этом обжогся

dadittoz
01-05-2008, 22:53
По-поводу того, что наоборот SRC и DST - это так и должно быть, так как шейпер висит на внутреннем интерфейсе, а не на внешнем. Для внутреннего интерфейса DESTINATION это то, куда он отправляет данные приходящие на интерфейс, а SOURCE это данные откуда он получает.

Я думаю дело в том, что у меня приоритет портов прописывается выше, чем приоритет хостов. Мне лично именно так и надо, Вам же возможно хочется, чтобы весь трафик хостов с низким приоритетом резался, игнорируя порты с высоким приоритетом. Вам тогда в циклах
for a in $HIGHPRIOPORTDST
do
echo HIGHPRIO DST PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip dport $a 0xffff flowid 1:10
done
и $HIGHPRIOPORTSRC нужно будет поменять значение prio. Чтобы эти правила обрабатывались позже чем $NOPRIOHOSTDST. Поменяйте 3 на 20.

Вообще смотрите статистику через
myshaper status br0, правильно ли классифицируются ваши пакеты.

A-r-t
03-05-2008, 20:04
dadittoz если тебя не затруднит, то не мог бы ты расказать мне как добаить в этот шейпер еще один класс, например класс очень низких приоритетов, какие строки в какие места надо добавлять?

dadittoz
04-05-2008, 20:05
Примерно так:

Класс, ограниченный 5% общего трафика. Это создаст непосредственно сам класс.

tc class add dev $DEV parent 1:1 classid 1:40 htb rate $((5*$UPLINK/100))kbit \
ceil $((5*$UPLINK/100))kbit burst 6k prio 4 quantum 1500
tc qdisc add dev $DEV parent 1:40 handle 40: sfq perturb 10


А дальше уже добавляем, что отправлять в этот класс также как сделано для HIGHPRIO [PORTDST|PORTSRC|HOSTDST|HOSTSRC]. Например для PORTDST вот так:

for a in $LOWESTPRIOPORTDST
do
echo LOWESTPRIO DST PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport $a 0xffff flowid 1:40
done

A-r-t
07-05-2008, 13:00
В очередной раз огромная благодарность!
я кстати понял почему у меня не работли HIGHPRIOHOSTSRC и HIGHPRIOHOSTDST с крипте не стоит на них echo

for a in $HIGHPRIOPORTDST
do
echo HIGHPRIO DST PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip dport $a 0xffff flowid 1:10
done

for a in $HIGHPRIOPORTSRC
do
echo HIGHPRIO SRC PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip sport $a 0xffff flowid 1:10
done

for a in $HIGHPRIOHOSTSRC
do
!ВОТ ТУТ надо постасить строку! echo HIGHPRIO HOST SRC $a
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip src $a flowid 1:10
done

for a in $HIGHPRIOHOSTDST
do
echo HIGHPRIO HOST DST $a
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 \
match ip dst $a flowid 1:10
done

# some traffic however suffers a worse fate
for a in $NOPRIOPORTDST
do
echo NOPRIO DST PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport $a 0xffff flowid 1:30
done

for a in $NOPRIOPORTSRC
do
echo NOPRIO SRC PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 15 u32 \
match ip sport $a 0xffff flowid 1:30
done

for a in $NOPRIOHOSTSRC
do
echo NOPRIO HOST SRC $a
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip src $a flowid 1:30
done

for a in $NOPRIOHOSTDST
do
echo NOPRIO HOST DST $a
tc filter add dev $DEV parent 1: protocol ip prio 17 u32 \
match ip dst $a flowid 1:30
done

YAG
07-05-2008, 13:47
В очередной раз огромная благодарность!
я кстати понял почему у меня не работли HIGHPRIOHOSTSRC и HIGHPRIOHOSTDST с крипте не стоит на них echo


echo Вам просто на экран информацию пишет... Больше ничего не делает.

TrueAlex
07-06-2008, 22:34
Блин, читаю про этот шейпер.... кошмар какой-то :( может есть какая-нить gui к этому шейперу или что-то подобное, чтоб можно было сконфигурировать боле-менее под себя и оно уже готовый скрипт выдало??? а потом его подправить только под себя?

Ну, и опишу ситуацию, пожалуй, свою: у меня к точке доступа подключено несколько клиентов (допустим 7, в будущем будет больше), часть проводом к LAN портам, часть по wifi и часть подключена через MAN к openvpn серверу, который на точке доступа установлен... MAN этот шейпить не надо вообще, мне надо разделить только WAN который по pptp. Поделить хочу просто поровну (если несколько человек одновременно качает), а если только один качает, то весь канал ему достается, ну и приоритеты, чтоб сначала icmp, dns, icq (некоторые еще мелкие пакеты вроде с высоким приоритетом пускают и ACK) потом http, потом торренты и прочее.
Киньте, пожалуйста, скриптом более-менее подходящим мне, а то вообще ничего не понимаю с чего начать :( Или есть уже какой-то более-менее универсальный вариант, где все "по уму" сделано? А то несколько тем на форуме и все както не до конца раскрыто...

ABATAPA
08-06-2008, 10:36
Или есть уже какой-то более-менее универсальный вариант, где все "по уму" сделано? А то несколько тем на форуме и все както не до конца раскрыто...

Знаете, как в том анекдоте: "Но у всех же лица разные?! - Ну это только до первого бритья..."
Универсальный вариант - это возможности iptables и iproute2.
Но никто не обещает, что эта универсальность понравится и будет по силам всем.
Читайте http://lartc.org/, осмысливайте, ищите готовые решения, придумывайте свои.

Bivis
05-07-2008, 20:05
Собственно имеется WL500GpV2 с последней олеговской прошивкой и встроенным FTP-сервером. Роутер подключен к локалке, в которой инет через него должны иметь всего 4 компа а вот доступ к его FTP-серверу должен быть у всех (~20 компов). Пробовал использовать MAC-фильтр, но он режет вместе с инетом и FTP-сервер. Как можно ограничить инет не ограничивая при этом доступ к FTP-серверу?

ABATAPA
05-07-2008, 20:07
Как можно ограничить инет не ограничивая при этом доступ к FTP-серверу?

Использовать iptables.

Bivis
05-07-2008, 20:09
т.е. через веб-морду никак?
а по подробнее про iptables можно?

.com
05-07-2008, 20:15
Может маршрутизацией.
У меня инет, 2 локалки (моя и провайда) и FTP. Или я не догнал.

ABATAPA
05-07-2008, 20:25
т.е. через веб-морду никак?


Ну, попробуйте запретить "ненужным" машинам доступ в Интернет средствами Web-интерфейса.

Bivis
05-07-2008, 20:25
у меня со стороны лан всего одна подсеть на примерно 30 компов.
из этих 30-ти доступ в инет должны иметь только 4 а вот к фтпшнику должны иметь доступ все

Bivis
05-07-2008, 20:28
Ну, попробуйте запретить "ненужным" машинам доступ в Интернет средствами Web-интерфейса.


а как это можно сделать без использования MAC-фильтра? если только фильтром Lan-Wan, но в нём нельзя указывать диапазон запрещенных IP-адресов в Lan, только единичные.

midya
05-07-2008, 21:22
По мак через Bandwidth Management ограничивали ???

Bivis
06-07-2008, 07:18
По мак через Bandwidth Management ограничивали ???


Нет. Через Internet Firewall - Mac Filter (Accept).

SNEg
10-07-2008, 09:33
Решил ли кто подобный вопрос по разграничению доступа в инет? У меня оригинальная прошивка, тоже при фильтрации по МАК не пускает к роутеру даже получить ИП-адрес.

Romeo9128
10-07-2008, 10:29
Самое идеальное, на мой взгляд, решение - предложил уважаемый Mam(O)n - ограничение по макам.
http://wl500g.info/showthread.php?p=77077#post77077

SNEg
10-07-2008, 11:20
Самое идеальное, на мой взгляд, решение - предложил уважаемый Mam(O)n - ограничение по макам.
http://wl500g.info/showthread.php?p=77077#post77077

А можно ли както на родной прошывке реализовать?

Crep
06-08-2008, 19:53
Всем привет. Я шибко не спец в сетях, по этому не судите строго.
Ситуация такая: маршрутизатор wl-500gр, подключено 3 компа (1 через вай фай). Нужно присвоить статические ip адресса, ни где не могу найти как (В д-линк 504Т легко было). И понизить одному компу скорость до 64кб.

чет похожее нашел, но разобраться не могу : http://www.wl500g.info/showthread.php?t=8796&highlight=%F3%EC%E5%ED%FC%F8%E8%F2%FC+%F1%EA%EE%F0 %EE%F1%F2%FC

Обьясните ламеру плиз.

avk
06-08-2008, 20:07
Нужно присвоить статические ip адресса, ни где не могу найти как (В д-линк 504Т легко было)

IP Config - DHCP Server (http://my.router/Advanced_DHCP_Content.asp)
Enable Manual Assignment? Yes
Manually Assigned IP List
...
...

Crep
06-08-2008, 20:13
IP Config - DHCP Server (http://my.router/Advanced_DHCP_Content.asp)
Enable Manual Assignment? Yes
Manually Assigned IP List
...
...
Понял, там должен быть список подключенных компов, а там пусто.
Возникает вопрос как мне узнать МАС адресс других участников сети? Только глядя в статистику?
Более менее с этим разобрался. Спасиб.


Как понизить скорость злого соседа?

avk
06-08-2008, 20:37
Возникает вопрос как мне узнать МАС адресс других участников сети? Только глядя в статистику?

1. В свойствах подключения кнопочка "Подробности..."
2. В cmd команда ipconfig/all
3. И логи на роутере

И больше я Вам ничего не расскажу. :D

Crep
06-08-2008, 21:36
1. В свойствах подключения кнопочка "Подробности..."
2. В cmd команда ipconfig/all
3. И логи на роутере

И больше я Вам ничего не расскажу. :D
Хех.

Второй вопрос остался окрытым.:confused:

VOVA_iS
07-08-2008, 14:18
Хех.

Второй вопрос остался окрытым.:confused:

Bandwidth Management

Crep
07-08-2008, 15:01
Bandwidth Management
Что то похожее, а как указать все порты, для данного IP клиента?

shein
07-08-2008, 15:49
Вопрос как ограничить скорость одному из компов, решается не так просто как кажется. Есть много вариантов, поищи по форуму.
Надо сказать ничего из обсуждаемого у меня реализовать не получилось:confused:

поэтому через Bandwidth Management режу скорость.
нужно закрыть основные порты: 110, 80, 21 еще какие-нибудь...

дополняйте список!!!

Crep
07-08-2008, 16:33
Вопрос как ограничить скорость одному из компов, решается не так просто как кажется. Есть много вариантов, поищи по форуму.
Надо сказать ничего из обсуждаемого у меня реализовать не получилось:confused:

поэтому через Bandwidth Management режу скорость.
нужно закрыть основные порты: 110, 80, 21 еще какие-нибудь...

дополняйте список!!!

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

shein
07-08-2008, 20:57
Оставил поле с портом пустым. Кажись помогло.

если это так, то ты бог

shein
07-08-2008, 21:04
Как бы еще сделать, чтоб локалка работала на нормальной скорости, а инет на обрезаной

PsyDeX
21-08-2008, 12:01
присоединяюсь к вопросу

makcumka
21-08-2008, 12:48
это какие то проблемы в настройках трафик-шейпера
после чего они появились? как запускаете wshaper? или какие данные вводили в раздел Bandwidth Management вебморды?

PsyDeX
21-08-2008, 14:11
вот, точно я настройки шейпера делал:
из стандартного веб интерфейса (Олега прошивка)
собтсвенно и туда и обратно прописал порт с одиноковыми ширинами каналов
150-450 kbit/s
ip указал единственного компа в "сети" ( на него фиксированный адрес DHCP по макадресу выставлен )

vital-s
21-01-2009, 09:22
Как бы еще сделать, чтоб локалка работала на нормальной скорости, а инет на обрезаной

Возникла подобная задача, кто поможет.

MikeGod
21-01-2009, 12:35
Уважаемые, с прошивкой от Олега удалось обрезать скорость по IP, но режется только входящий трафик. Вопрос: как обрезать исходящую скорость?

PsyDeX
22-01-2009, 14:12
а реально сделать так, чтобы определённые IP вращались только в LAN и не могли получать INET, но скорость внутри LAN была необрезаная? а выбраные IP получали INET и LAN необрезаные

sapsan
11-02-2009, 08:20
Доброго времени суток.

Почитал тут много, но, так как не искушон в ремесле приоритезации трафика, не понял подойдёт ли какой-либо шейпер под мою задачу. :confused: Наиболее близким и понятным в использовании мне показался шейпер dadittoz

Вот сама задача:

Предусловия:
- провайдер с локальной сетью, в которой скорость неограничена (100Мб/с) Диапазон локальных адресов известен + ещё несколько внутрисетевых внешних адреса
- подключение к интернету через pptp на скорости (1Мб/с)
- прошивка Олега 1.9.2.7-10
- качалки на роутере (rtorrent, ADOS)
- сосед
- я :)

Условия:
По каналу интернета:
1. Сосед, которому нужно отдать половину канала с возможностью использовать мою половину, когда я ею не пользусь.
1.1. Без приоритезации тафика внутри соседского канала.

2. С моей стороны вторая половина канала, но с возможностью использовать половину соседа, когда он её не использует.
2.1. С моей стороны приоритезация трафика:
а. на роутере rtorrent и ADOS - самый низкий приоритет;
б. с моего компьютера высокоприоритетный трафик по VoIP;
в. остальной трафик со средним приоритетом.

По каналу локальной сети:
Ограничить канал соседа определённой скоростью (так как собирается пользоваться торрентом внутри локальной сети) с возможностью использования мной этого канала если сосед его не использует.

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

Заранее благодарю. :)

MMX2
11-02-2009, 14:22
Читал, читал, как-то все сильно запутано... У меня задача простая - обеспечить бесперебойную работу скайпа при любой загрузке канала... В официальной прошивке 3-й серии была просто кнопка "максимальный приоритет скайпу". Как подобную функцию реализовать под прошивкой Олега?
Особенно сбивает с толку, что не понятно, по каким портам скайп осуществляет прием и передачу данных:(

Может есть более простое решение для такой не серьезной задачи, чем мощный шейпер городить?

dimmer
17-02-2009, 13:50
У меня стоит шейпер на основе предложенного тут (http://www.wl500g.info/showpost.php?p=35084&postcount=74).
All, здравствуй!
Подскажи, пожалуйста, а почему скрипты wshaper не работают в случае использования качалок на самом роутере? И работает ли скрипт daditozz`а в таком случае?

Markiz
22-03-2009, 07:58
пытаюсь настроить шэйпер.

Что в наличии: инет 256кб\сек (256 аплоад, 256 даунлоад, а не в сумме как часто делают провайдеры). Локалка провайдера условно 100Мб\сек (в реальности около 30). Три ноута. Сервак, с фтп сервером и торрентами.

Что нужно: чтобы ноуты были примерно равны. Траффик на 53 (днс) 80 21 и прочие порты был приоритетен перед 17007 (торрентами на сервере). Грубо говоря если я тыкаю на ноуте страничку, то сначала качалась она, а торренты по остаточному принципу) При этом не трогать трафик в локалку провайдера.

Диапазон сетки провайдера 192.168.0.0/16

Что сделал:

#!/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=250
UPLINK=250
DEV=$2

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

# low priority destination netmasks
NOPRIOHOSTDST="$4"

# low priority source ports
NOPRIOPORTSRC="$5"

# low priority destination ports
NOPRIOPORTDST="$6"

# high priority destination netmasks
HIGHPRIOHOSTDST="$7"

# high priority destination netmasks
HIGHPRIOHOSTSRC="$8"

# high priority source ports
HIGHPRIOPORTSRC="$9"

# high priority destination ports
HIGHPRIOPORTDST="$10"

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

tc class add dev $DEV parent 1: classid 1:2 htb rate 100mbit ceil 100mbit


# high prio class 1:10 - gets 50 to 100% traffic and highest priority:
tc class add dev $DEV parent 1:1 classid 1:10 htb rate $((5*$UPLINK/10))kbit ceil ${UPLINK}kbit 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

# lowest priority class 1:30 - gets 10 to 100% traffic and lowest
#priority:
tc class add dev $DEV parent 1:1 classid 1:30 htb rate $((1*$UPLINK/10))kbit ceil ${UPLINK}kbit burst 6k prio 3 quantum 1500

# 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


# LAN - UNLIMITED
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip src 192.168.0.0/16 flowid 1:2

# 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

# high priority for VoIP traffic (by source port)
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip sport 5004 0xffff match ip protocol 0x11 0xff flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip sport 5060 0xffff match ip protocol 0x11 0xff flowid 1:10

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

# ICMP (ip protocol 1) in the interactive class 1:10 so we
# can do measurements & impress our friends:
tc filter add dev $DEV parent 1:0 protocol ip prio 1 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 2 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

# more highpriotraffic
for a in $HIGHPRIOPORTDST
do
echo HIGHPRIO DST PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 match ip dport $a 0xffff flowid 1:10
done

for a in $HIGHPRIOPORTSRC
do
echo HIGHPRIO SRC PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 match ip sport $a 0xffff flowid 1:10
done

for a in $HIGHPRIOHOSTSRC
do
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 match ip src $a flowid 1:10
done

for a in $HIGHPRIOHOSTDST
do
tc filter add dev $DEV parent 1: protocol ip prio 3 u32 match ip dst $a flowid 1:10
done

# some traffic however suffers a worse fate
for a in $NOPRIOPORTDST
do
echo NOPRIO DST PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 match ip dport $a 0xffff flowid 1:30
done

for a in $NOPRIOPORTSRC
do
echo NOPRIO SRC PORT $a
tc filter add dev $DEV parent 1: protocol ip prio 15 u32 match ip sport $a 0xffff flowid 1:30
done

for a in $NOPRIOHOSTSRC
do
echo NOPRIO HOST SRC $a
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip src $a flowid 1:30
done

for a in $NOPRIOHOSTDST
do
echo NOPRIO HOST DST $a
tc filter add dev $DEV parent 1: protocol ip prio 17 u32 match ip dst $a flowid 1:30
done

# rest is 'non-interactive' ie 'bulk' and ends up in 1:20
#tc filter add dev $DEV parent 1: protocol ip prio 1 u32 \
# match ip dst 0.0.0.0/0 flowid 1:20

########## 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
#
# attach ingress policer:
#tc qdisc add dev ppp0 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 src 0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1
#tc filter add dev ppp0 parent ffff: protocol ip prio 50 u32 match ip sport 6882 0xffff police rate 256kbit burst 10k drop flowid :1

Запускаю: /opt/bin/myshaper start br0 "" "" "" "17007" "" "" "80 53 21" ""


И тут чудеса. Указываю
DOWNLINK=128
UPLINK=128
все нормально. Торренты качают 128кб\сек, на http://speed.yoip.ru/ если мерять компом выдается 100кб\сек с торрентами, и 120 без них. Тоесть шэйпер работает и 80% скорости перекидывается на ноут. Все нормально. Но канал то у меня 256кб\сек. Нехорошо его руками резать в два раза. Идем дальше.

Ставлю свои реальные 250кб\сек, получаю торренты качающие на нормальной скорости в 240Кб\сек, но скорость серфинга на компе 15кб\сек. Тоесть торрент уже не режется.

В чем затык никак не могу понять?

P.S. чтобы не возникло путанницы: кб\сек = килобиты в секунду, кбайт\сек килобайты в секунду, мб\сек мегабиты в секунду.

Markiz
23-03-2009, 20:38
ап вопросу.

residend
24-03-2009, 11:06
Всё правильно, у всех так и работает! В данном случае происходит то, что между провом и роутером и есть самое узкое место, следовательно пакеты то идут, канал загружают, а шейпер то конечно дропает пакеты исходящие, но канал на вход остаётся максимально загружен... Чтобы этот шейпер работал хоть как то надо общую скорость указывать не более 70% от реальной, чтобы оставить канал для прохождения большего количества приоритетных пакетов в первое время...

@leksey
25-04-2009, 06:49
Наведите на правильную мысль.
К wl-500w подключен компьютер и xbox (и куча всего по фай-вай), но интересует ограничение скорости по порту ethernet. Ставлю на закачку через сервис Live Xbox демо версии игр для племяша, так он забивает мой не быстрый 500кбитный канал под 100%.
Прошивка Олега.
Какой софт использовать для ограничения скорости на встроенном хабе на определенном порте Ethernet? Спасибо.

Anth
02-05-2009, 14:00
Наведите на правильную мысль.
К wl-500w подключен компьютер и xbox (и куча всего по фай-вай), но интересует ограничение скорости по порту ethernet. Ставлю на закачку через сервис Live Xbox демо версии игр для племяша, так он забивает мой не быстрый 500кбитный канал под 100%.
Прошивка Олега.
Какой софт использовать для ограничения скорости на встроенном хабе на определенном порте Ethernet? Спасибо.
Я использовал Bandwidth Management - указываешь IP и ширину канала.

@leksey
03-05-2009, 07:09
Я использовал Bandwidth Management - указываешь IP и ширину канала.

Спасибо. Посмотрю.

nil
24-06-2009, 14:03
Чтобы этот шейпер работал хоть как то надо общую скорость указывать не более 70% от реальной, чтобы оставить канал для прохождения большего количества приоритетных пакетов в первое время...

Меня подобное функционирование шейперов как раз и не устраивало - пустует определённая часть канала в угоду когда_нибудь пролетевшему приоритетному трафику. А если полоса переменной ширины (от времени суток, причём от 1024Кбит и до 20Мбит глубокой ночью, когда все спят).
А хотелось всего-то, чтобы торренты на роутере не мешали пользователям. И всё. Роутер у меня - обычный комп (ITX), wl500 сгорел, к сожалению.
Перепробовал всякие конфигурации tc (и с ifb0 для организации очередей на download на стороне роутера тоже), и по времени суток полосы нарезАл - толку чуть. rtorrent забивает канал насмерть, а подстраиваться под -10-20% от ширины канала совсем надоело.
Вышел из положения (пока вышел) отказом от шейпера и написанием небольшого демона на sh (запускается вместе с rtorrent), который смотрит, был ли какой-то forward-трафик в течение некоторого времени (например 2-5 сек.), если был - резко ограничивает полосу up и down самого rtorrent'а через xmlrpc.

nil[~]$ cat /usr/local/bin/shape-torrent
#!/bin/sh

PATH=$PATH:/usr/bin:/usr/sbin
last=
rate=

while true; do
fwd=`iptables-save -t mangle -c | awk '/traf-in.*inet-in/{print $1}'`
if [ "$fwd" == "$last" ]; then
if [ ! -z "$rate" ]; then
rate=
xmlrpc localhost set_upload_rate 0 >/dev/null || break
xmlrpc localhost set_download_rate 0 >/dev/null || break
fi
sleep 2
else
last="$fwd"
if [ -z "$rate" ]; then
rate=1
xmlrpc localhost set_upload_rate 16384 >/dev/null || break
xmlrpc localhost set_download_rate 8192 >/dev/null || break
fi
sleep 8
fi
done
скрипт может немного непричёсан, но работает железно.
Запускаю так:
shape-torrent </dev/null >/dev/null 2>&1 &
В итоге работу rtorrent на локальной машине вообще не чувствую и канал использую при необходимости на (почти) полную ширину. Величину "проседания" торрентов сильно уменьшать не стал. И так не мешают.
fwd=`iptables-save -t mangle -c | awk '/traf-in.*inet-in/{print $1}'`
надо заменить на что-то своё - у меня в mangle едёт подсчет интернет-трафика локалки за роутером без учета трафика на локалку провайдера.
И вот думаю: что сильнее грузит роутер - 2-5-ти секундные дампы iptables-save или непрерывная работа кучи правил tc?
Тоже самое можно проделать и с transmission-daemon (с ним даже удобнее - не нужно городить огород с scgi сервером)
(это все делалось на обычном компьютере, но думаю, что вполне может работать и на wl. сам не проверял)

silence
26-06-2009, 03:07
Доброго времени суток, честно говоря запуталась с распределением трафика..
Моя ситуация:
2 компьютера по проводам, один сервер, другой рабочий.
100 мегабит сеть локальная, на сервере висит dc++ хаб по 411 порту, открытый в сеть, если я начинаю с компьютера клиента качать в дц, то всех людей скидывает с хаба.. ип сервера 192.168.1.2, ип рабочего 192.168.1.3.. Как мне сделать приоритет порту 411 на сервер, чтобы не кидало народ и я могла качать, с приемлимой скоростью (ну мег5-6/c)..
Роутер asus wl500GPV2:confused: Подскажите добрые люди :)
п.с. есть еще торрент клиент, запускаемый по ночам на сервере, его порт 4071

Siddha
06-07-2009, 11:53
http://info.iet.unipi.it/~luigi/dummynet/#bin

Набрел на такое. Может интересно кому будет. Там же есть собранные бинарники под роутер.

Siddha
03-08-2009, 21:24
Вдохновленный решением от nil из этого поста (http://wl500g.info/showpost.php?p=150419&postcount=54) и, так и не сумев скомпилировать утилиту xmlrpc, подсмотрел решение здесь (http://wl500g.info/showpost.php?p=103522&postcount=42).
Вот что получилось:

rtshaper


#!/bin/sh
PATH=/opt/bin:/opt/sbin:/usr/bin:/sbin:/bin:/usr/sbin
last=
rate=

while true; do
fwd=`iptables -t filter -L FORWARD -v -x -n | tail -n 5 | head -n 1 | awk '{print($2)}'`
if [ "$fwd" == "$last" ]; then
if [ ! -z "$rate" ]; then
rate=
wget -q --no-check-certificate --post-file=/opt/etc/shaper/down_up -O - http://127.0.0.1:8081/RPC2
wget -q --no-check-certificate --post-file=/opt/etc/shaper/upl_up -O - http://127.0.0.1:8081/RPC2
fi
sleep 2
else
last="$fwd"
if [ -z "$rate" ]; then
rate=1
wget -q --no-check-certificate --post-file=/opt/etc/shaper/down_dn -O - http://127.0.0.1:8081/RPC2
wget -q --no-check-certificate --post-file=/opt/etc/shaper/upl_dn -O - http://127.0.0.1:8081/RPC2
fi
sleep 8
fi
done


XML файлы имеют следующее содержание:

down_dn


<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>set_download_rate</methodName>
<params>
<param>
<value>
<string>10k</string>
</value>
</param>
</params>
</methodCall>


down_up

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>set_download_rate</methodName>
<params>
<param>
<value>
<string>0</string>
</value>
</param>
</params>
</methodCall>

upl_dn

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>set_upload_rate</methodName>
<params>
<param>
<value>
<string>10k</string>
</value>
</param>
</params>
</methodCall>

upl_up

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>set_upload_rate</methodName>
<params>
<param>
<value>
<string>0</string>
</value>
</param>
</params>
</methodCall>

Запускается как в источнике вдохновения:
rtshaper </dev/null >/dev/null 2>&1 &

Теперь хотелось бы сделать из этого скрипта демона с возможностью запуска-останова из rc.unslung при рестарте и выключении роутера...

Ruster
09-09-2009, 12:32
К роутеру через fiwi подключены два компьютера.
но такая проблема. если один из них начинает качать что-то к примеру из торрена. то весь траффик берет на себя и скорость у другого падает.

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

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

vectorm
09-09-2009, 19:29
Посмотрите в поиске по слову QoS например.

Ruster
09-09-2009, 20:00
а можно поподробнее ?
просто я в этом не спец.
по поиску нечего конкретного не нашел

vectorm
09-09-2009, 21:56
а можно поподробнее ?
просто я в этом не спец.
по поиску нечего конкретного не нашел
У меня в подписи есть ссылка на тему "Для новичков и ленивых" - там есть подраздел №8. Настройки трафика
Дальше уже сами.

Ruster
10-09-2009, 11:32
извините но не очень все еще понятно....
не подскажите в настройках куда зайти и что сделать
я даже не знаю чтобы такое QoS.
я не сисадмин, я веб-дизайнер :rolleyes:

igor77777
16-09-2009, 19:19
Вдохновленный идеями от nil (http://wl500g.info/showpost.php?p=150419&postcount=54) и Siddha (http://wl500g.info/showpost.php?p=154919&postcount=57), описаными ими в этой теме здесь (http://wl500g.info/showpost.php?p=150419&postcount=54) и здесь (http://wl500g.info/showpost.php?p=154919&postcount=57). Я решил развить эту идею.
Моя идея состоит в том, что скорость rTorrent'а будет ограничиваться не только фактом наличия форвардного трафика, но и регулироваться в заданом диапазоне в зависимости от количества форвардного трафика. Кроме того, скрипт не будет постоянно крутиться в бескончном цикле, а будет запускаться самим rTorrent'ом с заданной периодичностью.
Ниже, я опишу, как я настраивал свой роутер, чтобы работал мой скрипт rt-shaper.sh. По аналогии и скорее всего с незначительными изменениями вы сможите сделать тоже самое.

Значит так. Предполагается, что роутер (ASUS wl-500gP или совместимый) уже прошит олеговской прошивкой и проведена начальная настройка до rTorrent. Кроме того, должны стоять следующие утилиты: tail, head, awk, wget. Если чего из этого нет, то отправляемся ищем темы по начальной настройке и настраиваем все, что нужно. Кроме того, понадобится утилита sudo, для того, чтобы скрипт смог работать под пользователем p2p, от имени которого стартует rTorrent.

Sudo
У меня rTorrent работает от имени пользователя p2p. Поскольку этот пользователь бесправный, то он не сможет запускать этот скрипт. Точнее скрипт он запустит, а вот обратиться к iptables - не сможет. Для того чтобы обойти эту неприятность и ставится sudo. Ставим:


ipkg install sudo

После установки, находим конфиг sudo (/opt/etc/sudoers) и правим его. Самый ПРАВИЛЬНЫЙ способ править конфиг sudo - это использовать утилиту visudo. Дело в том, что перед записью исправленного конфига visudo в начале проверяет его на корректность и если все нормально, то сохраняет его. А если находит ошибки - то не сохраняет. Итак, набираем в консоле:


[admin@IGORROUTER root]$ visudo

Вот мой конфиг sudo. Строки которые я исправлял, отмечены красным:


# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
# Failure to use 'visudo' may result in syntax or file permission errors
# that prevent sudo from running.
#
# See the sudoers man page for the details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification

# Defaults specification

# Runas alias specification

# User privilege specification
# root ALL=(ALL) ALL
admin ALL=(ALL) ALL

# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now

p2p IGORROUTER = (admin) NOPASSWD: /usr/sbin/iptables

Defaults:p2p runas_default = admin
Defaults:admin runas_default = admin

Пользователя root я закомментарил, и добавил пользователя admin, аналогичного root.
Указал, что пользователь p2p может запускать на моем роутере (IGORROUTER) утилиту iptables без пароля.
Пользователем по умолчанию для p2p назначен admin. Также и для пользователя admin, назначен пользователь admin, иначе sudo пытается использовать пользователя root, которого нет. Узнать имя роутера можно при помощи hostname. Набираем в консоле:


[admin@IGORROUTER root]$ hostname
IGORROUTER

и видим имя своего роутера. Заменяем IGORROUTER на имя своего роутера.

Кратко, команды, которые я использовал при правке конфига в visudo:
- клавиша <Insert> - перейти в режим редактирования;
- клавиша <Ecs> - выйти из режима редактирования;
- ":w" - сохранить конфиг;
- ":q" - выйти из visudo;
- ":wq" - сохранить конфиг и выйти из visudo.

Сам скрипт и описание как он работает в следующем сообщении (http://wl500g.info/showpost.php?p=160200&postcount=59).

igor77777
16-09-2009, 19:19
продолжение этого (http://wl500g.info/showpost.php?p=160199&postcount=58) сообщения.

Скрипт rt-shaper.sh

Скрипт rt-shaper.sh предназначен для автоматической регилировки скачки/отдачи bittorrent-клиентом rTorrent в зависимости от наличия и количества трафика проходящего через роутер. Другими словами, если форвардного(проходящего через роутер на клиентов в вашей сети) трафика через роутер нет, то rTorrent, установленный на роутер, не ограничивается. Если же форвардный трафик есть, то скорость скачки/отдачи ограничивается. Более того, и скорость скачки, и скорость отдачи изменяется в заданном интервале в зависимости от количества форвардного трафика.

Я рекомендую скрипт ставить в отдельный каталог. У меня он стоит в /opt/etc/rt-shaper

На данный каталог нужно дать права пользователю p2p. У меня в качестве группы для каталога указана p2p и группе даны права на чтение(r), запись(w) и выполнение(x).

Далее, нужно место, где будут храниться значения, которые должны сохраняться между запусками скрипта. Поскольку, при каждом запуске скрипта, туда что-то пишется, лучше это место завести не на флешке, а на винте. У меня винт смонтирован в /home, а на нём я создал подкаталог var и ещё подкаталог rtorrent. Таким образом, каталог с временными файлами имеет такой вид: /home/var/rtorrent

На него тоже нужно дать права на запись пользователю p2p. У меня права на этот каталог совпадают с правами на /home/var/rtorrent

Скрипт /opt/etc/rt-shaper/rt-shaper.sh я приложил к сообщению.

Переменные скрипта, которые возможно прийдется поменять под себя:
RTSHAPER= - каталог, в котором лежит сам скрипт
VARCAT= - каталог временных файлов
LOGFILE= - логфайл

В каталог /opt/etc/rt-shaper можно положить файл с настройками, которые будут использоваться в работе скрипта. Файл rt-shaper.conf


min_uprate=50; # минимальный upload rate rTorrent в килобайтах. Скорость будет уменьшаться до него, но не ниже
min_dlrate=10; # минимальный download rate rTorrent в килобайтах. Скорость будет уменьшаться до него, но не ниже
step_rate=10; # шаг изменения rate в килобайтах
max_uprate=70; # максимальный upload rate rTorrent в килобайтах. При появлении форвардного трафика будет выставлен именно он. При дальнейшем росте форвардного трафика rate будет уменьшаться вплоть для min_uprate
max_dlrate=50; # максимальный download rate rTorrent в килобайтах. При появлении форвардного трафика будет выставлен именно он. При дальнейшем росте форвардного трафика rate будет уменьшаться вплоть для min_dlrate
max_count_change_rate=5; # максимально количество пропущенных изменений rate. После этого количества rate будет изменен по любому
interval_rate=7; # частота точнее интервал, в секундах, с которой дергается скрипт. Должен совпадать с тем, что указано в конфиге rTorrent
enable_log=0; # признак ведения лога 0-не вести лог. 1-вести лог, 2-вести подробный лог, 3-лог с промежуточными переменными

Можно конфиг и не ложить, а задать все необходимые значения прямо в скрипте.

Параметры: min_uprate, min_dlrate, max_uprate, max_dlrate, step_rate - задаются в килобайтах и зависят от скорости вашего интернета (У меня сейчас скорость такая: download = 777 килобит, upload = 824 килобит). Т.е. сейчас, при наличии форвардного трафика скорость скачки будет гулять в интервале между 10 килобайтами и 50 килобайтами, а скорость отдачи между 50 килобайтами и 70 килобайтами с шагом в 10 килобайтами.

Параметр: interval_rate - должен совпадать с тем значением, которое будет указано для шедулера rTorrent, который будет запускать скрипт.

Подключение скрипта к rTorrent

Для подключения скрипта к rTorrent, нужно добавить одну строчку в конфиг rTorrent.

У меня конфиг rTorrent лежит в /opt/etc/rtorrent.conf

Добавляем туда строку:


schedule = rtshaper,15,7,execute=/opt/etc/rt-shaper/rt-shaper.sh

Здесь: 15 - задержка, в секундах, после которой rTorrent начнет запускать скрипт на выполнение. 7 - интервал, в секундах, с которым rTorrent будет запускать скрипт, должен совпадать с параметром interval_rate из rt-shaper.conf.


Вот собственно и все. Надеюсь, что я ни чего не пропустил.

Ruster
17-09-2009, 20:34
Актуально.
Помогите, подскажите конкретно что нужно сделать

Sashunya
20-09-2009, 17:14
Установил скрипт. Вроде работает. Но есть вопрос по логу. Выдает следующее:



Previous forward trafic 0, now forward trafic 1744863, current state 1, current upload rate 246, current download rate 246. At Sun Sep 20 18:22:24 EEST 2009
set_upload_rate 246k. At Sun Sep 20 18:22:24 EEST 2009
set_download_rate 246k. At Sun Sep 20 18:22:24 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:22:30 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:22:37 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:22:44 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:22:51 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:22:58 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:23:05 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:23:12 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:23:19 EEST 2009
Previous forward trafic 1744863, now forward trafic 964549, current state 1, current upload rate 256, current download rate 256. At Sun Sep 20 18:23:26 EEST 2009
set_upload_rate 256k. At Sun Sep 20 18:23:26 EEST 2009
set_download_rate 256k. At Sun Sep 20 18:23:27 EEST 2009
Previous forward trafic 964549, now forward trafic 84446, current state 1, current upload rate 256, current download rate 256. At Sun Sep 20 18:23:33 EEST 2009


Смущает, сообщение связанное с wget. Это нормально?

Как прибить выдачу в лог роутера сообщения sudo?

igor77777
21-09-2009, 07:17
Установил скрипт. Вроде работает. Но есть вопрос по логу. Выдает следующее:



Previous forward trafic 0, now forward trafic 1744863, current state 1, current upload rate 246, current download rate 246. At Sun Sep 20 18:22:24 EEST 2009
set_upload_rate 246k. At Sun Sep 20 18:22:24 EEST 2009
set_download_rate 246k. At Sun Sep 20 18:22:24 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:22:30 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:22:37 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:22:44 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:22:51 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:22:58 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:23:05 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:23:12 EEST 2009
Find child wget. Script exit. At Sun Sep 20 18:23:19 EEST 2009
Previous forward trafic 1744863, now forward trafic 964549, current state 1, current upload rate 256, current download rate 256. At Sun Sep 20 18:23:26 EEST 2009
set_upload_rate 256k. At Sun Sep 20 18:23:26 EEST 2009
set_download_rate 256k. At Sun Sep 20 18:23:27 EEST 2009
Previous forward trafic 964549, now forward trafic 84446, current state 1, current upload rate 256, current download rate 256. At Sun Sep 20 18:23:33 EEST 2009


Смущает, сообщение связанное с wget. Это нормально?



Find child wget. Script exit. ...
Само по себе сообщение нормальное.
Оно говорит о том, что фактически предыдущий вызов скрипта ещё не отработал. Это нужно, чтобы не запускалось несколько копий скипта, пытающихся менять скорость rTorrent.а.
У меня, даже при интервале запуска в 5 секунд, такое сообщение выскакивало очень редко, только в том случае, когда роутер занят чем то ещё.

Покажите строчку rtorrent.conf, которой вы подключили rt-shaper.sh к rTorrent.

И какая в среднем загрузка процессора?



Как прибить выдачу в лог роутера сообщения sudo?
Не знаю.
Я об этом не думал, да и не знал что он генерит сообщения.
Должно быть их получается слишком много. :-(
Посмотрите man по sudo, может там есть параметр, отвечающий за логирование.

Ещё вариант, если у Вас стандарный syslogd заменен на syslog-ng, то можно настроить запись сообщений sudo в отдельный лог или вообще не писать.

Если будет время, вечерком, посмотрю что можно сделать с сообщениями sudo.


PS: А с какой скорость у Вас качает rTorrent, когда нет ограничения?

Sashunya
21-09-2009, 19:34
Мои настройки шейпера:



min_uprate=100;
min_dlrate=50;
step_rate=10;
max_uprate=256;
max_dlrate=256;
max_count_change_rate=5;
interval_rate=5;
enable_log=0;


Настройки rtorrent:



schedule = rtshaper,15,7,execute=/tmp/harddisk/torrent/rt-shaper/rt-shaper.sh


Процессор нагружен на 50-60%

Syslogd пока не менял, разве что перекинул его в /opt/var/log/

igor77777
22-09-2009, 18:20
Мои настройки шейпера:



min_uprate=100;
min_dlrate=50;
step_rate=10;
max_uprate=256;
max_dlrate=256;
max_count_change_rate=5;
interval_rate=5;
enable_log=0;


Настройки rtorrent:



schedule = rtshaper,15,7,execute=/tmp/harddisk/torrent/rt-shaper/rt-shaper.sh



Параметр interval_rate должен совпадать с третим параметром schedule. Проставте и там и там одинаковую цифру.



Процессор нагружен на 50-60%

Я думаю из-за такой загрузки скрипт и не успевает отрабатываться.
Это ответ вопрос, откуда берется это:

Find child wget. Script exit. .....

Как вариант, можно попробовать. Увеличить интервал запуска скрипта (внимание! оба параметра interval_rate и третий параметр schedule) секунд до 10-15. При этом можно уменьшить max_count_change_rate.

Еще, строчку в torrent.conf рекомендую изменить на такой вариант:

schedule = rtshaper,15,7,"execute={sh,-c,/opt/etc/rt-shaper/rt-shaper.sh& exit 0}"

В вашем случае:

schedule = rtshaper,15,7,"execute={sh,-c,/tmp/harddisk/torrent/rt-shaper/rt-shaper.sh& exit 0}"

Как мне объяснил Novik, это отвяжет выполнение скрипта, от rTorrent.
Т.е. теоретически, rTorrent ожидает окончания выполнения скриптов запущенных через schedule и может поэтому притормаживать, а такой вариант запуска избавить rTorrent от ожидания.

Siddha
23-09-2009, 14:27
При переходе на прошивку от энтузиастов http://code.google.com/p/wl500g/
строку 129 из скрипта http://wl500g.info/showpost.php?p=160200&postcount=59
вот эту:
fwd=`sudo iptables -t filter -L FORWARD -v -x -n | tail -n 5 | head -n 1 | awk '{print($2)}'`
нужно изменить так:
fwd=`sudo iptables -t filter -L FORWARD -v -x -n | tail -n 6 | head -n 1 | awk '{print($2)}'`

Связано это с изменениями в iptables.
Поправьте если не прав.

igor77777
24-09-2009, 08:19
При переходе на прошивку от энтузиастов http://code.google.com/p/wl500g/

При переходе на прошивку от энтузиастов рекомендую обратить самое пристальное внимание на вот этот шейпер (http://wl500g.info/showpost.php?p=161206&postcount=138)
ИМХО, я считаю, что это самое лучшее решение на данный момент.
Лично я, просто в восторге.




Связано это с изменениями в iptables.
Поправьте если не прав.
Не знаю. И времени проверить это просто нет.
После прошивки, на прошивку от энтузиастов, я не проверял свой скрипт.
Более того, я считаю, что мой костыль, для ограничения rTorrent в зависимости от форвардного трафика, в свете выше написанного, теряет свою актуальность.

PS: Обращаю внимание, что этот шейпер (http://wl500g.info/showpost.php?p=161206&postcount=138) только появился, и автор его активно адаптирует. Но при этом nshaper отлично РАБОТАЕТ!
Если заинтересовались, почитайте тут тему до конца.

Kent
06-11-2009, 18:59
Подключено несколько компьютеров по вай-фаю к роутеру wl500gp. Мне надо поставить ограничение на скорость для одного их компьютеров. Как это сделать?

almobil
08-11-2009, 12:00
сам задавался подобным вопросом... вот что получилось http://wl500g.info/showthread.php?t=21617