Необходимо разделить канал для нескольких пользователей на базе недорогого роутера. Каждому пользователю будет гарантировано предоставляться определенная часть канала для скачивания/закрузки и полный канал при отсутствии других пользователей.
Решение
В качестве роутера был выбран DIR-615 C2 по соображениям низкой цены и возможности установить на нем прошивку DD-WRT. Так как в бесплатных вариантах DD-WRT QoS работает некорректно, то было решено настроить его с помощью скриптов.
Установка DD-WRT на роутер DIR-615 C2
1) Скачиваем с прошивку для DIR-615 C2. Для этого роутера будут найдеты два файла прошивки — «dir615c1-factory-to-ddwrt-firmware.bin» и «dir615c1-firmware.bin». Нас интересует dir615c1-factory-to-ddwrt-firmware.bin.
2) С помощью hex редактора меняем hardware ID в самом конце файла прошивки «dir615c1-factory-to-ddwrt-firmware.bin» с AP81-AR9130-RT-080609-05 на 01AP81-AR9130-RT-070614-02. Тут есть одна тонкость. Wiki по DD-WRT предлагает менять на AP81-AR9130-RT-070614-02. Но если на роутере стоит заводская прошивка с абривиатурой RUS, нужно менять на 01AP81-AR9130-RT-070614-02. В качестве hex редактора я использовал mc.
3) Подключаем DIR-615 и заходим через веб-интерфейс на . Пользователь admin, пароль пустой. Встроенными средствами (Tools -> Firmware) обновляем прошивку (выбираем модифицированную нами «dir615c1-factory-to-ddwrt-firmware.bin»). Настоятельно рекомендуется использовать Firefox.
4) Ждем пару минут, пока обновляется прошивка. После окончания загрузки прошивки роутер перезагрузится, а ip сменится на 192.168.1.1.
5) Открываем , настраиваем подключение к интернету и раздачу адресов в локальной сети.
Настройка QoS в DD-WRT с помощью скриптов
1) Отключаем QoS в веб интерфейсе (NAT/QoS -> QoS), нажимаем Apply Settings.
2) Скачиваем генератор скриптов .
3) Распаковываем и запускаем WRT54SG.exe.
Переключаем на английский (вверху круглая кнопка с флагами).
Указываем ip адрес роутера(192.168.1.1), а так же скорость скачивания и загрузки траффика. Эти скорости можно узнать на или умножив скорости, предоставляемые по договору провайдером, на 0.9.
В моем случае при договорной скорости 800 кб/с, скачивание — 720 кб/с, а загрузка 420 кб/c.
Настраиваем время жизни пакетов.
Тут я ничего не менял.
Добавляем пользователей, указав их гарантированную (Rate) и максимальную (Ceil) скорости скачавания/ загрузки и приоритет.
В моем примере это 3 пользователя:
- Код: Выделить всё
192.168.1.2, DL Rate — 400 kbps, DL Ceil — 720 kbps, UL Rate — 200 kbps, UL Ceil — 400 kbps, Priority — High, TCP — no limit, UDP — no limit 192.168.1.3, DL Rate — 150 kbps, DL Ceil — 720 kbps, UL Rate — 90 kbps, UL Ceil — 400 kbps, Priority — Normal, TCP — no limit, UDP — no limit 192.168.1.4, DL Rate — 150 kbps, DL Ceil — 720 kbps, UL Rate — 90 kbps, UL Ceil — 400 kbps, Priority — Normal, TCP — no limit, UDP — no limit
Я решил оставить «люфт» в гарантированных скоростях скачиваня/загрузки в 20 kbps, так как встречал рекомендации не выбирать гарантированными полосами пропускания весь диапазон.
Скрипт сгенерирован, копируем его в буфер или сохраняем в текстовый файл.
Вот пример получившегося скрипта:
- Код: Выделить всё
#-------------------------------------------- #WRT54 script Generator v1.02 #© 2006-2007 Robert \"Robson\" Mytkowski #-------------------------------------------- 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 720kbit $TCA parent 1:1 classid 1:10 htb rate 400kbit ceil 720kbit prio 1 $TCA parent 1:1 classid 1:11 htb rate 150kbit ceil 720kbit prio 2 $TCA parent 1:1 classid 1:12 htb rate 150kbit ceil 720kbit prio 2 $TQA parent 1:10 handle 10: $SFQ $TQA parent 1:11 handle 11: $SFQ $TQA parent 1:12 handle 12: $SFQ $TFA parent 1:0 prio 1 protocol ip handle 10 fw flowid 1:10 $TFA parent 1:0 prio 2 protocol ip handle 11 fw flowid 1:11 $TFA parent 1:0 prio 2 protocol ip handle 12 fw flowid 1:12 iptables -t mangle -A POSTROUTING -d 192.168.1.2 -j MARK --set-mark 10 iptables -t mangle -A POSTROUTING -d 192.168.1.3 -j MARK --set-mark 11 iptables -t mangle -A POSTROUTING -d 192.168.1.4 -j MARK --set-mark 12 TCAU=\"tc class add dev imq0\" TFAU=\"tc filter add dev imq0\" TQAU=\"tc qdisc add dev imq0\" modprobe imq modprobe 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 400kbit $TCAU parent 1:1 classid 1:10 htb rate 200kbit ceil 400kbit prio 1 $TCAU parent 1:1 classid 1:11 htb rate 90kbit ceil 400kbit prio 2 $TCAU parent 1:1 classid 1:12 htb rate 90kbit ceil 400kbit prio 2 $TQAU parent 1:10 handle 10: $SFQ $TQAU parent 1:11 handle 11: $SFQ $TQAU parent 1:12 handle 12: $SFQ $TFAU parent 1:0 prio 1 protocol ip handle 10 fw flowid 1:10 $TFAU parent 1:0 prio 2 protocol ip handle 11 fw flowid 1:11 $TFAU parent 1:0 prio 2 protocol ip handle 12 fw flowid 1:12 iptables -t mangle -A PREROUTING -s 192.168.1.2 -j MARK --set-mark 10 iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 11 iptables -t mangle -A PREROUTING -s 192.168.1.4 -j MARK --set-mark 12 iptables -t mangle -A PREROUTING -j IMQ --todev 0
4)В веб интерфейсе роутера открываем Administration -> Commands. Вставляем сгенерированный скрипт в поле Commands и сохраняем как фаевол (Save Firewall).
5) Перезагружаем роутер (Administration -> Commands в поле Commands пишем reboot и нажимаем Run Commands).
Итог
В результате произведенных выше действий был получен роутер с прошивкой DD-WRT, разделяющий канал в зависимости от заданных диапазона скоростей и приоритета для кажного пользователя.
Источник
IT-Profity