ArtShtorm
есть рабочий вариант динамического шейпера (только на download к пользователям, upload делается аналогично с ifb0, но нужды не было), писал, изучая tc на openwrt.
файл /etc/init.d/fshaper
файл настроек /etc/config/fshaper (в принципе необязательный, параметр rate можно и в скрипте задать, лень уже было писать web-интерфейс к шейперу)
/etc/ip.isp - список ip-адресов сети провайдера (p2p), ограничений на скорость нет, как пример
/etc/ip.low - список ip-адресов за роутером с низким приоритетом (например, сервер с торрентами)
по умолчанию (без задания списков high, low) трафик делится равномерно между всеми клиентами.
все файлы создаются в соответствующий папках, далее даются права на выполнение для /etc/init.d/fshaper, в консоли активируем шейпер, чтобы стартовал автоматом:
шейпер тестировался скачкой 5 самых популярный торрентов на одной из машин (лимит 500 пиров), на других проигрывалось интернет-радио. параметры limit 1024 depth 1024 подобрал, чтобы никаких затыков в проигрывании не возникало. также проверялась ширина канала на speedtest.net , смотрелось видео на ютубе - активность торрентов даже не замечалась
респект авторам esfq
да, наблюдение: в горгульи не получилось вытянуть честные 100mbit через роутер с включённым шейпером, на чистом же openwrt все заработало на полной скорости. почему - не знаю.
роутер работает без замечаний, не глючит (пока), торрентов прокачивается довольно много + фильмы с p2p. wifi только для сотового. хотя поначалу расстроился из-за низкой производительности (гигабитом на wan и не пахнет) и ненастраиваемости стока.
есть рабочий вариант динамического шейпера (только на download к пользователям, upload делается аналогично с ifb0, но нужды не было), писал, изучая tc на openwrt.
файл /etc/init.d/fshaper
01 | #!/bin/sh /etc/rc.common |
02 | # fshaper |
03 | # Fair shaper (download) for OpenWRT 10.03.1 |
04 | # absent <тут был e-mail> |
05 | # This is free software licensed under the terms of the GNU GPL v2.0 |
06 | |
07 | START=50 |
08 | |
09 | NAME=fshaper |
10 | DEV= "br-lan" |
11 | ISP= "/etc/ip.isp" |
12 | LOW= "/etc/ip.low" |
13 | HIGH= "/etc/ip.high" |
14 | PATH= "/bin:/sbin:/usr/bin:/usr/sbin" |
15 | |
16 | stop(){ |
17 | tc qdisc del dev $DEV root >/dev/null 2>&1 |
18 | } |
19 | |
20 | start(){ |
21 | stop |
22 | local m= "cls_u32 sch_esfq sch_sfq sch_htb sch_prio" |
23 | for i in $m ; do insmod $i >/dev/null 2>&1; done |
24 | |
25 | local tcq= "tc qdisc add dev $DEV" |
26 | local tcc= "tc class add dev $DEV" |
27 | local tcf= "tc filter add dev $DEV" |
28 | local q= "quantum 10240" |
29 | local b= "burst 10240" |
30 | local p= "hash dst perturb 5 limit 1024 depth 1024 divisor 10" |
31 | local rate |
32 | config_load $NAME |
33 | config_get rate settings rate 1024 |
34 | [ "$1" ] && rate= "$1" |
35 | |
36 | $tcq root handle 1: htb default 13 |
37 | $tcc parent 1: classid 1:1 htb rate 1000mbit ceil 1000mbit $q burst 102400 |
38 | |
39 | $tcc parent 1:1 classid 1:1000 htb rate 1mbit ceil 1000mbit $q burst 102400 prio 2 |
40 | $tcq parent 1:1000 handle 1000: esfq $p |
41 | |
42 | $tcc parent 1:1 classid 1:2 htb rate ${rate}kbit ceil ${rate}kbit $q $b prio 1 |
43 | for i in 0 3 7; do |
44 | $tcc parent 1:2 classid 1:1 $i htb rate $((rate/10+1))kbit ceil ${rate}kbit $q $b prio $i |
45 | $tcq parent 1:1 $i handle 1 $i : esfq $p |
46 | done |
47 | |
48 | # isp local ip list, full interface speed |
49 | [ -r "$ISP" ] && while read i; do |
50 | if echo $i | egrep -q "^\s*#|^\s*$" ; then continue ; fi |
51 | $tcf protocol ip prio 7 u32 match ip src $i flowid 1:1000 |
52 | done < "$ISP" |
53 | |
54 | # low priority ip list |
55 | [ -r "$LOW" ] && while read i; do |
56 | if echo $i | egrep -q "^\s*#|^\s*$" ; then continue ; fi |
57 | $tcf protocol ip prio 7 u32 match ip dst $i flowid 1:17 |
58 | done < "$LOW" |
59 | |
60 | # high priority ip list |
61 | [ -r "$HIGH" ] && while read i; do |
62 | if echo $i | egrep -q "^\s*#|^\s*$" ; then continue ; fi |
63 | $tcf protocol ip prio 7 u32 match ip dst $i flowid 1:10 |
64 | done < "$HIGH" |
65 | } |
есть 3 файла списков ip-адресов (не обязательные, всё работает и без них):
/etc/ip.isp - список ip-адресов сети провайдера (p2p), ограничений на скорость нет, как пример
/etc/ip.high - список ip-адресов за роутером с высоким приоритетом (задавят всех кто ниже их, между собой поделят равномерно)
/etc/ip.low - список ip-адресов за роутером с низким приоритетом (например, сервер с торрентами)
по умолчанию (без задания списков high, low) трафик делится равномерно между всеми клиентами.
все файлы создаются в соответствующий папках, далее даются права на выполнение для /etc/init.d/fshaper, в консоли активируем шейпер, чтобы стартовал автоматом:
запускать/перезапускать:
можно запускать с указанием скорости в килобитах
что, кстати, удобно, если ночью провайдер повышает скорость - можно регулировать через крон, например, так:
шейпер тестировался скачкой 5 самых популярный торрентов на одной из машин (лимит 500 пиров), на других проигрывалось интернет-радио. параметры limit 1024 depth 1024 подобрал, чтобы никаких затыков в проигрывании не возникало. также проверялась ширина канала на speedtest.net , смотрелось видео на ютубе - активность торрентов даже не замечалась
респект авторам esfq
да, наблюдение: в горгульи не получилось вытянуть честные 100mbit через роутер с включённым шейпером, на чистом же openwrt все заработало на полной скорости. почему - не знаю.
роутер работает без замечаний, не глючит (пока), торрентов прокачивается довольно много + фильмы с p2p. wifi только для сотового. хотя поначалу расстроился из-за низкой производительности (гигабитом на wan и не пахнет) и ненастраиваемости стока.