QoS, шейпер и dual подключение

Post new topic   Reply to topic    DD-WRT Forum Index -> Использование и установка DD-WRT
Goto page 1, 2  Next
Author Message
truthx
DD-WRT User


Joined: 04 Feb 2010
Posts: 76

PostPosted: Sun Jun 13, 2010 22:15    Post subject: QoS, шейпер и dual подключение Reply with quote
Как известно, генератор скриптов позволяет настроить QoS только для одиночного подключения к провайдеру (Static, DHCP, PPPoE, PPTP и L2TP). А как быть в случае двойного подключения, когда интернет предоставляется по PPPoE или VPN, а локалка провайдера по физическому WAN? Предлагаю скрипт, который решает эту проблему.
Данный скрипт для 3 хостов, регулирует по отдельности скорость для сети провайдера, для интернета и для управления роутером изнутри сети, позволяет отдельно настраивать скорость для download и upload. В случае необходимости IP и величины скорости можно заменять на свои, вручную можно добавлять и другие хосты домашней сети. Следует учитывать, что сумма rate всех хостов не должна превышать общий rate канала от провайдера, а лучше указывать 90-95%. Для сети провайдера и для интернета действуют разные правила, поэтому сумма rate расчитывается по отдельности как для интернета, так и для локалки провайдера. На данный момент скорость DD-WRT не превышает 40-45 Мбит/c, поэтому сумма скорости сети к провайдеру и скорости интернета должна уложиться в 40-45 Мбит/c.
Результаты скорости (чистый NAT):
DD-WRT download
DD-WRT upload
Для регулирования скорости используются исходящие интерфейсы, так как виртуальное устройство IMQ в DD-WRT не работает, соответственно скрипт создаваемый генератором может ограничивать трафик только для download, ограничение для upload не будет работать. И как уже писалось выше, генератор предназначен только для одиночного подключения.
К сожалению, на DIR-300/NRU добавление скрипта в firewall приводит к уменьшению максимальной пропускной способности этого роутера до 25-30 Мбит/с. Такую особенность следует учитывать при указании максимальных значений скорости в вашем скрипте. Скорее всего и на других роутерах будет наблюдаться такая же картина. Возможно, причина кроется в архитектуре dd-wrt, так как при падении скоростных показателей загрузка процессора близка к нулю, память занята всего на 40%. Поэтому для корректной работы скрипта требуется его отладка именно на вашем оборудовании, скрипт ниже только для примера.
Code:
#---------------------------------------------------------------------------------------------------------------------------
SFQ="sfq perturb 10"
#---------------------------------------------------DOWNLOAD (LAN OUTPUT)--------------------------------------------------
LAN=$(nvram get lan_ifname)
CD="tc class add dev $LAN"
FD="tc filter add dev $LAN"
QD="tc qdisc add dev $LAN"
tc qdisc del dev $LAN root
tc qdisc add dev $LAN root handle 1:0 htb
tc class add dev $LAN parent 1:0 classid 1:1 htb rate 40960kbit
tc class add dev $LAN parent 1:0 classid 1:2 htb rate 5120kbit
tc class add dev $LAN parent 1:0 classid 1:3 htb rate 20480kbit
$CD parent 1:1 classid 1:10 htb rate 10240kbit ceil 40960kbit prio 4
$CD parent 1:1 classid 1:11 htb rate 10240kbit ceil 40960kbit prio 2
$CD parent 1:1 classid 1:12 htb rate 10240kbit ceil 40960kbit prio 1
$CD parent 1:1 classid 1:13 htb rate 10240kbit ceil 40960kbit prio 3
$CD parent 1:2 classid 1:20 htb rate 256kbit ceil 5120kbit prio 4
$CD parent 1:2 classid 1:21 htb rate 512kbit ceil 5120kbit prio 2
$CD parent 1:2 classid 1:22 htb rate 1024kbit ceil 5120kbit prio 1
$CD parent 1:2 classid 1:23 htb rate 256kbit ceil 5120kbit prio 3
$CD parent 1:3 classid 1:30 htb rate 10240kbit ceil 20480kbit prio 2
$QD parent 1:10 handle 10: $SFQ
$QD parent 1:11 handle 11: $SFQ
$QD parent 1:12 handle 12: $SFQ
$QD parent 1:13 handle 13: $SFQ
$QD parent 1:20 handle 20: $SFQ
$QD parent 1:21 handle 21: $SFQ
$QD parent 1:22 handle 22: $SFQ
$QD parent 1:23 handle 23: $SFQ
$QD parent 1:30 handle 30: $SFQ
$FD parent 1:0 prio 4 protocol ip handle 10 fw flowid 1:10
$FD parent 1:0 prio 2 protocol ip handle 11 fw flowid 1:11
$FD parent 1:0 prio 1 protocol ip handle 12 fw flowid 1:12
$FD parent 1:0 prio 3 protocol ip handle 13 fw flowid 1:13
$FD parent 1:0 prio 4 protocol ip handle 20 fw flowid 1:20
$FD parent 1:0 prio 2 protocol ip handle 21 fw flowid 1:21
$FD parent 1:0 prio 1 protocol ip handle 22 fw flowid 1:22
$FD parent 1:0 prio 3 protocol ip handle 23 fw flowid 1:23
$FD parent 1:0 prio 2 protocol ip handle 30 fw flowid 1:30
iptables -t mangle -A POSTROUTING -s 172.17.0.0/16 -d ! 192.168.1.101 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -s 172.17.0.0/16 -d ! 192.168.1.102 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -s 172.17.0.0/16 -d ! 192.168.1.103 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -d 192.168.1.101 -s 172.17.0.0/16 -j MARK --set-mark 11
iptables -t mangle -A POSTROUTING -d 192.168.1.102 -s 172.17.0.0/16 -j MARK --set-mark 12
iptables -t mangle -A POSTROUTING -d 192.168.1.103 -s 172.17.0.0/16 -j MARK --set-mark 13
iptables -t mangle -A POSTROUTING -m iprange --dst-range 192.168.1.1-192.168.1.100 -j MARK --set-mark 20
iptables -t mangle -A POSTROUTING -m iprange --dst-range 192.168.1.104-192.168.1.253 -j MARK --set-mark 20
iptables -t mangle -A POSTROUTING -d 192.168.1.101 -s ! 172.17.0.0/16 -j MARK --set-mark 21
iptables -t mangle -A POSTROUTING -d 192.168.1.102 -s ! 172.17.0.0/16 -j MARK --set-mark 22
iptables -t mangle -A POSTROUTING -d 192.168.1.103 -s ! 172.17.0.0/16 -j MARK --set-mark 23
iptables -t mangle -A POSTROUTING -s 192.168.1.254 -j MARK --set-mark 30
#---------------------------------------------------UPLOAD (WAN OUTPUT)----------------------------------------------------
WAN=$(nvram get wan_ifname)
CU="tc class add dev $WAN"
FU="tc filter add dev $WAN"
QU="tc qdisc add dev $WAN"
tc qdisc del dev $WAN root
tc qdisc add dev $WAN root handle 1:0 htb
tc class add dev $WAN parent 1:0 classid 1:1 htb rate 40960kbit
tc class add dev $WAN parent 1:0 classid 1:2 htb rate 5120kbit
$CU parent 1:1 classid 1:10 htb rate 10240kbit ceil 40960kbit prio 4
$CU parent 1:1 classid 1:11 htb rate 10240kbit ceil 40960kbit prio 2
$CU parent 1:1 classid 1:12 htb rate 10240kbit ceil 40960kbit prio 1
$CU parent 1:1 classid 1:13 htb rate 10240kbit ceil 40960kbit prio 3
$CU parent 1:2 classid 1:20 htb rate 256kbit ceil 5120kbit prio 4
$CU parent 1:2 classid 1:21 htb rate 512kbit ceil 5120kbit prio 2
$CU parent 1:2 classid 1:22 htb rate 1024kbit ceil 5120kbit prio 1
$CU parent 1:2 classid 1:23 htb rate 256kbit ceil 5120kbit prio 3
$QU parent 1:10 handle 10: $SFQ
$QU parent 1:11 handle 11: $SFQ
$QU parent 1:12 handle 12: $SFQ
$QU parent 1:13 handle 13: $SFQ
$QU parent 1:20 handle 20: $SFQ
$QU parent 1:21 handle 21: $SFQ
$QU parent 1:22 handle 22: $SFQ
$QU parent 1:23 handle 23: $SFQ
$FU parent 1:0 prio 4 protocol ip handle 10 fw flowid 1:10
$FU parent 1:0 prio 2 protocol ip handle 11 fw flowid 1:11
$FU parent 1:0 prio 1 protocol ip handle 12 fw flowid 1:12
$FU parent 1:0 prio 3 protocol ip handle 13 fw flowid 1:13
$FU parent 1:0 prio 4 protocol ip handle 20 fw flowid 1:20
$FU parent 1:0 prio 2 protocol ip handle 21 fw flowid 1:21
$FU parent 1:0 prio 1 protocol ip handle 22 fw flowid 1:22
$FU parent 1:0 prio 3 protocol ip handle 23 fw flowid 1:23
iptables -t mangle -A PREROUTING -d 172.17.0.0/16 -s ! 192.168.1.101 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -d 172.17.0.0/16 -s ! 192.168.1.102 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -d 172.17.0.0/16 -s ! 192.168.1.103 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -s 192.168.1.101 -d 172.17.0.0/16 -j MARK --set-mark 11
iptables -t mangle -A PREROUTING -s 192.168.1.102 -d 172.17.0.0/16 -j MARK --set-mark 12
iptables -t mangle -A PREROUTING -s 192.168.1.103 -d 172.17.0.0/16 -j MARK --set-mark 13
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.1-192.168.1.100 -j MARK --set-mark 20
iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.104-192.168.1.253 -j MARK --set-mark 20
iptables -t mangle -A PREROUTING -s 192.168.1.101 -d ! 172.17.0.0/16 -j MARK --set-mark 21
iptables -t mangle -A PREROUTING -s 192.168.1.102 -d ! 172.17.0.0/16 -j MARK --set-mark 22
iptables -t mangle -A PREROUTING -s 192.168.1.103 -d ! 172.17.0.0/16 -j MARK --set-mark 23
#--------------------------------------------------------------------------------------------------------------------------

Пояснения:
1 правило - сеть провайдера
10-13 правила - указываем скорость для сети провайдера (10 правило как бы по умолчанию, для всех хостов не указанных в 11-13 правилах)
2 правило - интернет
20-23 правила - указываем скорость для интернет (20 правило как бы по умолчанию, для всех хостов не указанных в 21-23 правилах)
3 правило - web-интерфейс (только для download, для upload нужно настраивать IMQ, который не работает в DD-WRT)
30 - правило для web-интерфейса, чтобы не тормозил при полной загрузке канала, а также для ssh и telnet
s - сеть источник пакетов
d - сеть назначения пакетов
192.168.1.0/24 - домашняя сеть
172.17.0.0/16 - сеть провайдера
Примечания:
Если у провайдера нет своей сети, то первое правило можно закомментировать # или удалить строки, предназначенные для локальной сети, тем самым существенно уменьшив размер скрипта.
Детали поиска данного решения в этой теме.
Sponsor
Evgeniy_10
DD-WRT User


Joined: 07 Jul 2009
Posts: 144

PostPosted: Tue Jul 20, 2010 15:47    Post subject: Reply with quote
кто сказал, что не работает imq ?

у меня в 13064 отлично работает

"tc class add dev imq0"
"tc filter add dev imq0"
"tc qdisc add dev imq0"

ip link set imq0 up
truthx
DD-WRT User


Joined: 04 Feb 2010
Posts: 76

PostPosted: Wed Aug 11, 2010 21:52    Post subject: Reply with quote
Evgeniy_10 wrote:
кто сказал, что не работает imq ?
у меня в 13064 отлично работает

На DIR-300/NRU не работает, может проблема в типе сборки, а может и в разных чипах на тестируемых устройствах. На мой роутер есть только стандартная прошивка от BrainSlayer, на сборках от Eko для других маршрутизаторов может и работает. На практически всех сборках от 13064 до 14896 IMQ для моего DIR не работает, но зато работает вышеприведённый скрипт.
Matrix_RELISE
DD-WRT Novice


Joined: 25 Jul 2010
Posts: 25

PostPosted: Tue Sep 14, 2010 23:02    Post subject: Reply with quote
Блин, классная штука, хотя даже подставлять своё достаточно сложно...

Как то неприятно на гигабитном роутере Asus RT-n16 терять кучу скорости из за такой радости, как выставление скорости... Хочу 100 мбит макс и рулить скорость 10-12 устройств.

Как оно пойдёт на моём азусе? И как оно тормозится при добавлении юзеров и/или сетей?
cracked
DD-WRT Novice


Joined: 27 Sep 2010
Posts: 9

PostPosted: Mon Sep 27, 2010 9:13    Post subject: Reply with quote
Добрый день.
Подскажите по настройке шейпера.
Имеется подключение к провайдеру с постоянным айпишником. По WAN идет интернет (1 мегабит) и собственно локальные ресурсы (торренты).

Как (и чем) настроить шейпинг? Хочется натсроить шейпинг для 1 клиента (ноут), чтоб при серфинге в инете(и при управлении роутером)трафик торрента (как локальный, так и через инет)позволял это комфортно делать.
Как это можно сделать? Скриптами или через вебморду?

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

Подскажите плз. Буду очень благодарен.
Fodin
DD-WRT User


Joined: 07 Mar 2010
Posts: 52

PostPosted: Sat Oct 02, 2010 5:11    Post subject: Reply with quote
truthx wrote:
Evgeniy_10 wrote:
кто сказал, что не работает imq ?
у меня в 13064 отлично работает

На DIR-300/NRU не работает

А что означает "не работает"? У меня dir-320. По-умолчанию нет imq. Порылся в файлах и в директории /lib/modules/2.4.37/ обнаружил imq.o. После insmod imq и ip link set imq0 up, ifconfig выдает
imq0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:30
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
cracked
DD-WRT Novice


Joined: 27 Sep 2010
Posts: 9

PostPosted: Wed Nov 03, 2010 9:32    Post subject: Reply with quote
В dir300nru лежит по пути /lib/modules/2.6.23.17/kernel/net/ipv4/netfilter
файлик ipt_IMQ.ko
truthx
DD-WRT User


Joined: 04 Feb 2010
Posts: 76

PostPosted: Wed Nov 03, 2010 18:13    Post subject: Reply with quote
cracked, так что IMQ уже работает? Начиная с какой версии?
P.S. Проверил, так и не заработало...
cracked
DD-WRT Novice


Joined: 27 Sep 2010
Posts: 9

PostPosted: Wed Nov 10, 2010 10:50    Post subject: Reply with quote
У меня
DD-WRT v24-sp2 (08/07/10) std - build 14896

вроде работает. Только плохо что некуда его записать, чтоб стартовал.

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

В общем я делаю так.
1. ssh
2. cd /lib/modules/2.6.23.17/kernel/net/ipv4/netfilter/
3. ls
4. должен лежать ipt_IMQ.ko
5. insmod imq
6. ip link set imq0 up
7. ifconfig
8. должен появиться imq0

Ну и потом я создаю скрипт шейпера, делаю его исполняемым и запускаю.
Но это до первого ребута...Потом все слетает.
truthx
DD-WRT User


Joined: 04 Feb 2010
Posts: 76

PostPosted: Wed Nov 10, 2010 18:28    Post subject: Reply with quote
Как я не пытался получить результат работы IMG - не выходит. Девайс после insmod imq и ip link set imq0 up появляется, но всё равно не работает, трафик не ограничивается, даже количество пакетов по нулям:
ifconfig
Code:
imq0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 
          UP RUNNING NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:30

Что до прогона трафика, что после - одинаково. Мой вердикт - не работоспособно. Делал и из-под ssh и из интерфейса. И к тому же, многие операции с роутером требующие изменения в параметрах в WebUI, приводит к отключению imq0 как устройства. А если просто набрать ip link set imq0 up, то появляется SIOCGIFFLAGS: No such device
cracked
DD-WRT Novice


Joined: 27 Sep 2010
Posts: 9

PostPosted: Thu Nov 11, 2010 6:44    Post subject: Reply with quote
imq1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 -00
UP RUNNING NOARP MTU:1500 Metric:1
RX packets:4264497 errors:0 dropped:0 overruns:0 frame:0
TX packets:4263325 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:30
RX bytes:3845602475 (3.5 GiB) TX bytes:3844979621 (3.5 GiB)

А какая версия прошивки и какой девайс?
truthx
DD-WRT User


Joined: 04 Feb 2010
Posts: 76

PostPosted: Thu Nov 11, 2010 19:10    Post subject: Reply with quote
cracked wrote:
А какая версия прошивки и какой девайс?

DIR-300/NRU, сейчас проверял на 15506 и 15693, раньше на более старых, где тоже не работало.
yurybx
DD-WRT Novice


Joined: 06 Nov 2010
Posts: 11

PostPosted: Mon Nov 15, 2010 17:11    Post subject: DIR-300 и IMQ Reply with quote
Тоже проблема с шейпом посредством IMQ.
С помощью программы WRT54SG сгенерил скрипт, который должен шейпить трафик по портам.
Сразу появилась проблема: трафик шейпит абсолютно весь без разбору по правилу, которое написано для _исходящего_ трафика. Забрёл на этот форум, исправил в скрипте modprobe на insmod. Запустил скрипт через командную строку - принято без ошибок. Трафик через imq0 идёт (судя по ifconfig). Но проблема остаётся!
Вот скрипт:
TCA="tc class add dev br0"
TFA="tc filter add dev br0"
TQA="tc qdisc add dev br0"
SFQ="sfq perturb 10"
tc qdisc del dev br0 root
tc qdisc add dev br0 root handle 1: htb
tc class add dev br0 parent 1: classid 1:1 htb rate 1600kbit
$TCA parent 1:1 classid 1:10 htb rate 400kbit ceil 800kbit prio 4
$TQA parent 1:10 handle 10: $SFQ
$TFA parent 1:0 prio 4 protocol ip handle 10 fw flowid 1:10
iptables -t mangle -A POSTROUTING -p tcp --sport 1:3388 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -p tcp --sport 3390:5059 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -p tcp --sport 5062:65535 -j MARK --set-mark 10
TCAU="tc class add dev imq0"
TFAU="tc filter add dev imq0"
TQAU="tc qdisc add dev imq0"
insmod imq
insmod ipt_IMQ
ip link set imq0 up
tc qdisc del dev imq0 root
tc qdisc add dev imq0 root handle 1: htb
tc class add dev imq0 parent 1: classid 1:1 htb rate 800kbit
$TCAU parent 1:1 classid 1:10 htb rate 200kbit ceil 400kbit prio 4
$TQAU parent 1:10 handle 10: $SFQ
$TFAU parent 1:0 prio 4 protocol ip handle 10 fw flowid 1:10
iptables -t mangle -A PREROUTING -p tcp --dport 1:3388 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -p tcp --dport 3390:5059 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -p tcp --dport 5062:65535 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -j IMQ --todev 0

Если убрать вторую часть (начинающуюся с insmod...), то входящий трафик шейпится нормально и правильно.
В чём загвоздка? Что не так написал? Или действительно IMQ на версии для DIR-300 некорректно работает? (версия DD-WRT sp2 13064).
Если да, то как грамотно шейпить исходящий трафик в таком случае?
yurybx
DD-WRT Novice


Joined: 06 Nov 2010
Posts: 11

PostPosted: Tue Nov 16, 2010 7:25    Post subject: vlan2-0 Reply with quote
Вот что ещё было замечено: при выполнении вышеуказанного скрипта появляется не только интерфейс imq0, но и ещё один - vlan2-0. Напрашивается подозрение, что каким-то образом вторая часть правил контачит с внешним интерфейсом, и тогда понятно почему рубится весь трафик по минимальному правилу (наскольно я помню, vlan2 - это внешний интерфейс). Но как это исправить, по прежнему непонятно.
truthx
DD-WRT User


Joined: 04 Feb 2010
Posts: 76

PostPosted: Tue Nov 16, 2010 16:54    Post subject: Reply with quote
yurybx, возьмите за основу скрипт из первого поста и всё будет работать, не мучайтесь с IMQ.
Goto page 1, 2  Next Display posts from previous:    Page 1 of 2
Post new topic   Reply to topic    DD-WRT Forum Index -> Использование и установка DD-WRT All times are GMT

Navigation

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum