Posted: Sun Jun 13, 2010 22:15 Post subject: QoS, шейпер и dual подключение
Как известно, генератор скриптов позволяет настроить 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%. Поэтому для корректной работы скрипта требуется его отладка именно на вашем оборудовании, скрипт ниже только для примера.
Пояснения:
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 - сеть провайдера
Примечания:
Если у провайдера нет своей сети, то первое правило можно закомментировать # или удалить строки, предназначенные для локальной сети, тем самым существенно уменьшив размер скрипта.
Детали поиска данного решения в этой теме.
кто сказал, что не работает imq ?
у меня в 13064 отлично работает
На DIR-300/NRU не работает, может проблема в типе сборки, а может и в разных чипах на тестируемых устройствах. На мой роутер есть только стандартная прошивка от BrainSlayer, на сборках от Eko для других маршрутизаторов может и работает. На практически всех сборках от 13064 до 14896 IMQ для моего DIR не работает, но зато работает вышеприведённый скрипт.
Блин, классная штука, хотя даже подставлять своё достаточно сложно...
Как то неприятно на гигабитном роутере Asus RT-n16 терять кучу скорости из за такой радости, как выставление скорости... Хочу 100 мбит макс и рулить скорость 10-12 устройств.
Как оно пойдёт на моём азусе? И как оно тормозится при добавлении юзеров и/или сетей?
Добрый день.
Подскажите по настройке шейпера.
Имеется подключение к провайдеру с постоянным айпишником. По WAN идет интернет (1 мегабит) и собственно локальные ресурсы (торренты).
Как (и чем) настроить шейпинг? Хочется натсроить шейпинг для 1 клиента (ноут), чтоб при серфинге в инете(и при управлении роутером)трафик торрента (как локальный, так и через инет)позволял это комфортно делать.
Как это можно сделать? Скриптами или через вебморду?
Пробовал через морду - не вышло. Самая затыка что там не выставляется отдельно максимальная полоса для инета и для сети.
кто сказал, что не работает 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)
У меня
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
Ну и потом я создаю скрипт шейпера, делаю его исполняемым и запускаю.
Но это до первого ребута...Потом все слетает.
Как я не пытался получить результат работы IMG - не выходит. Девайс после insmod imq и ip link set imq0 up появляется, но всё равно не работает, трафик не ограничивается, даже количество пакетов по нулям:
ifconfig
Что до прогона трафика, что после - одинаково. Мой вердикт - не работоспособно. Делал и из-под ssh и из интерфейса. И к тому же, многие операции с роутером требующие изменения в параметрах в WebUI, приводит к отключению imq0 как устройства. А если просто набрать ip link set imq0 up, то появляется SIOCGIFFLAGS: No such device
Posted: Mon Nov 15, 2010 17:11 Post subject: DIR-300 и IMQ
Тоже проблема с шейпом посредством 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).
Если да, то как грамотно шейпить исходящий трафик в таком случае?
Posted: Tue Nov 16, 2010 7:25 Post subject: vlan2-0
Вот что ещё было замечено: при выполнении вышеуказанного скрипта появляется не только интерфейс imq0, но и ещё один - vlan2-0. Напрашивается подозрение, что каким-то образом вторая часть правил контачит с внешним интерфейсом, и тогда понятно почему рубится весь трафик по минимальному правилу (наскольно я помню, vlan2 - это внешний интерфейс). Но как это исправить, по прежнему непонятно.