С ЛАН портами наверное можно, но тяжеловато. Вот с Ip Адресами - попроще...
Добрый день, Друзья!
Искал на форуме ответ, но положительных результатов это не дало, потому прошу о помощи!
Исходные:
Dev: Wl500g Premium
Firmware Version: 1.9.2.7
Firmware Release: 1.9.2.7-7f
Задача: Порезать входящий трафик из условий: Что бы на каждый LAN уходило 256 КБит минимум, т.е. гарантированно, а максимум 1 МБит, когда другие LAN не используют сеть.
Вот такую задачку поставил сам себе...
Вопрос. КАК это можно сделать?!
С ЛАН портами наверное можно, но тяжеловато. Вот с Ip Адресами - попроще...
Спаибо, что откликнулся
Я пробовал штатными средствами через Вебфейс... результат непонятен был.
Схема делитантская, если что поправь пожалуйста:
1. настраиваем тригер таким образом, что бы все, что приходит из вне на определенный ИП (в ЛАНе) сваливалось в один порт (взял 80 за основу)
2. Настраиваем ширину канала для заданного ИП мин. и макс. с привязкой на порт 80
3. смотрим результат при скачивании фильма (проверенно быстрый хост)...
Результат не совсем понятен... При указании малых значений ширины канала, закачивание либо слишком медленное, и не сопоставимо с заданными цифрами на самом роутере. И только при более или менее крупных значений, от 10-15 КБит скорость адекватная, но как то, все равно не сопоставимо, но теперь в сторону увеличения, т.е. больше заданного значения.
Логика есть в моих домыслах?
Замер делал на "скорую руку" штатными средстави Вин ХР. (тикер - число байт переданных-принятых в интервале времени)
Была задача - поделить 128 кбит на 5 пользователей предоставляя каждому как минимум 24 кбита (фактически делить полосу поровну между всеми работающими компьютерами). Кроме того была задача уменьшить потерю пакетов у провайдера.
Решение:
Железо - маршрутизатор asus wl-500g Premium с прошивкой 1.9.2.7-7f (2006-11-06) http://oleg.wl500g.info/
Родной bandwidth management надо отрубить в панели управления.
----------------------------------
Создать /usr/local/sbin
Там создать
-rwxr-xr-x post-firewall
-rwxr-xr-x wshaper
----------------------------------
содержание post-firewall:
#!/bin/sh
/usr/local/sbin/wshaper start vlan0 120 120
----------------------------------
содержание wshaper (оригинальный скрипт лежит в /sbin)
#/bin/sh
# Wonder Shaper
# please read the README before filling out these values
#
# 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=$3
UPLINK=$4
DEV=$2
#echo Please read the documentation in 'README' first
#exit
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:99:
tc qdisc add dev $DEV root handle 1: htb default 99
# root class 1
tc class add dev $DEV parent 1: classid 1:1 htb rate 100mbit
# router traffic subslass 2 (router IP=192.168.0.254)
tc class add dev $DEV parent 1:1 classid 1:2 htb rate 100mbit
tc qdisc add dev $DEV parent 1:2 handle 2: sfq perturb 10
tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \
match ip src 192.168.0.254 flowid 1:2
# internet traffic subclass 10
tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${UPLINK}kbit \
ceil ${UPLINK}kbit
# internet traffic subclasses 11, 12, 13,... for each client IP
tc class add dev $DEV parent 1:10 classid 1:11 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:12 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:13 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:14 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:15 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:99 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
# creating quques for each class
tc qdisc add dev $DEV parent 1:11 handle 11: sfq perturb 10
tc qdisc add dev $DEV parent 1:12 handle 12: sfq perturb 10
tc qdisc add dev $DEV parent 1:13 handle 13: sfq perturb 10
tc qdisc add dev $DEV parent 1:14 handle 14: sfq perturb 10
tc qdisc add dev $DEV parent 1:15 handle 15: sfq perturb 10
tc qdisc add dev $DEV parent 1:99 handle 99: sfq perturb 10
#sending traffic from clinet's IP's to classes
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.1 flowid 1:11
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.2 flowid 1:12
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.3 flowid 1:13
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.4 flowid 1:14
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.5 flowid 1:15
########## 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 $DEV 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 1k drop flowid :1
----------------------------------
сохранить настройки и перезапустить роутер:
flashfs save
flashfs commit
flashfs enable
reboot
Шейпинг повешен на vlan0 (это локальная сеть) а не на pppoe потому что шейпер может разруливать только исходящий трафик на итнерфейсе. Из за этого пришлось отдельно обозначать локальный трафик чтобы не пропускать его через шейпер. Общая скорость ограничена 120 кбит чтобы уменьшить потери пакетов у провайдера (чтобы у провайдера не скапливалась большая очередь и не дропались пакеты).
Шейпинг исходящего трафика пока что не делал. Приоритеты трафика не задавал. Не было необходимости пока что . То что сделано - проверено и работает как следует.
Добрый день!
А можно ли с помощью выше изложенного поделить трафик pppoe на три компа?
комп по проводу 1 - 256к
комп по проводу 2 - 128к
комп по проводу 3 - 128к
ноут по wifi - 128k
КПК по wifi - 128k
комп 1 работает редко.
И ещё, между компами (в сети 192.168.1.1/6) должна быть максимальная скорость!
Вот собственно и всё, жду вашого ответа!
WL500gP (1.9.2.7-10) + USB HDD Samsung 200gb
My home page - MyLan.Od.Ua
Можно, только нужно вешать шейпер на интерфейс br0 чтобы он работал еще и с вайфай. К сожалению я не знаю как сделать неравномерное деление трафика - только каждому поровну. (Правда можно задавать приоритеты. Еще есть идея - можно попробовать делать более ветвистое дерево классов трафика)
Привожу последний мой вариант скриптов- добавил ограничение на исходящий трафик на ppp0, убрал класс 99, добавил еще айпишников и сделал чтобы и по вайфаю все это работало в том числе.
192.168.1.1/6 это неправильное обозначение подсети судя по всему. 192.168.1.1 - 192.168.1.6 - надо было писать. оно там вроде бы будет ходить без ограничений, во всяком случае у меня так и есть... почемуто...
P.s. wifi антенна из консервной банки это мощно...
post-firewall:
#!/bin/sh
/usr/local/sbin/wshaper start br0 115
/sbin/wshaper start ppp0 1000 115
wshaper:
#/bin/sh
# Wonder Shaper
# please read the README before filling out these values
#
# 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.
UPLINK=$3
DEV=$2
# Now remove the following two lines :-)
#echo Please read the documentation in 'README' first
#exit
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:99:
tc qdisc add dev $DEV root handle 1: htb default 99
# root class 1
tc class add dev $DEV parent 1: classid 1:1 htb rate 100mbit
# router traffic subslass 2 (router IP=192.168.0.254)
tc class add dev $DEV parent 1:1 classid 1:2 htb rate 100mbit
tc qdisc add dev $DEV parent 1:2 handle 2: sfq perturb 10
tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \
match ip src 192.168.0.254 flowid 1:2
# internet traffic subclass 10
tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${UPLINK}kbit \
ceil ${UPLINK}kbit
# internet traffic subclasses 11, 12, 13,... for each client IP
tc class add dev $DEV parent 1:10 classid 1:11 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:12 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:13 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:14 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:15 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:16 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:17 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:18 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
tc class add dev $DEV parent 1:10 classid 1:19 htb rate 1kbit \
ceil ${UPLINK}kbit prio 2
# creating quques for each class
tc qdisc add dev $DEV parent 1:11 handle 11: sfq perturb 10
tc qdisc add dev $DEV parent 1:12 handle 12: sfq perturb 10
tc qdisc add dev $DEV parent 1:13 handle 13: sfq perturb 10
tc qdisc add dev $DEV parent 1:14 handle 14: sfq perturb 10
tc qdisc add dev $DEV parent 1:15 handle 15: sfq perturb 10
tc qdisc add dev $DEV parent 1:16 handle 16: sfq perturb 10
tc qdisc add dev $DEV parent 1:17 handle 17: sfq perturb 10
tc qdisc add dev $DEV parent 1:18 handle 18: sfq perturb 10
tc qdisc add dev $DEV parent 1:19 handle 19: sfq perturb 10
#sending traffic from clinet's IP's to classes
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.1 flowid 1:11
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.2 flowid 1:12
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.3 flowid 1:13
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.4 flowid 1:14
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.5 flowid 1:15
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.6 flowid 1:16
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.7 flowid 1:17
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.8 flowid 1:18
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.9 flowid 1:19
Last edited by AlexeyA; 21-09-2007 at 15:59.
Нее, такое не устраивает..
А возможно установить доп. соф на wl-500gP что бы он занимался делением трафика по моей схеме?
Кстати Wi-Fi клиенты могут ходить без ограничений(это в идеале можно им порезать скорость).
За то дешево и работает не хуже заводской!P.s. wifi антенна из консервной банки это мощно...
Новая схемка сетки (без Wi-FI клиентов):
Last edited by Janik; 23-09-2007 at 17:27.
WL500gP (1.9.2.7-10) + USB HDD Samsung 200gb
My home page - MyLan.Od.Ua
Если надо жестко ограничить максимальную скорость на каждый хост то это делается элементарно задав параметр ceil= rate=max speed для каждого IP в этих скриптах. У меня то задача была в динамическом перераспределении нашего дохлого канала (128) если он свободен на всех желающих. Чтобы при этом если один запустил мега-качалку на 10 потоков у остальных все не умирало.
Last edited by AlexeyA; 24-09-2007 at 00:05.
WL500gP (1.9.2.7-10) + USB HDD Samsung 200gb
My home page - MyLan.Od.Ua
Ну в вашем случае это будет видимо так :
post-firewall:
#!/bin/sh
/usr/local/sbin/wshaper start br0 512
/sbin/wshaper start ppp0 1000 512
wshaper:
#/bin/sh
# Wonder Shaper
# please read the README before filling out these values
#
# 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.
UPLINK=$3
DEV=$2
# Now remove the following two lines :-)
#echo Please read the documentation in 'README' first
#exit
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:99:
tc qdisc add dev $DEV root handle 1: htb default 99
# root class 1
tc class add dev $DEV parent 1: classid 1:1 htb rate 100mbit
# router traffic subslass 2 (router IP=192.168.0.1)
tc class add dev $DEV parent 1:1 classid 1:2 htb rate 100mbit
tc qdisc add dev $DEV parent 1:2 handle 2: sfq perturb 10
tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \
match ip src 192.168.0.1 flowid 1:2
# internet traffic subclass 10
tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${UPLINK}kbit \
ceil ${UPLINK}kbit
# internet traffic subclasses 12, 13,... for each client IP
tc class add dev $DEV parent 1:10 classid 1:12 htb rate 256kbit \
burst 6k prio 2
tc class add dev $DEV parent 1:10 classid 1:13 htb rate 128kbit \
burst 6k prio 2
tc class add dev $DEV parent 1:10 classid 1:14 htb rate 128kbit \
burst 6k prio 2
# creating quques for each class
tc qdisc add dev $DEV parent 1:12 handle 12: sfq perturb 10
tc qdisc add dev $DEV parent 1:13 handle 13: sfq perturb 10
tc qdisc add dev $DEV parent 1:14 handle 14: sfq perturb 10
#sending traffic from clinet's IP's to classes
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.2 flowid 1:12
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.3 flowid 1:13
tc filter add dev $DEV parent 1: protocol ip prio 20 u32 \
match ip dst 192.168.0.4 flowid 1:14
Last edited by AlexeyA; 25-09-2007 at 01:48.
Last edited by Janik; 25-09-2007 at 17:37.
WL500gP (1.9.2.7-10) + USB HDD Samsung 200gb
My home page - MyLan.Od.Ua
Можно, заместо стандартного /sbin/wshaper start ppp0 1000 512
надо запускать наш переделанный скрипт, но в нем надо поменять правила фильтров - match ip src <-> match ip dst. Также не нужно станет правило для локального трафика. Ну короче подумайте сами
Last edited by AlexeyA; 25-09-2007 at 20:53.
WL500gP (1.9.2.7-10) + USB HDD Samsung 200gb
My home page - MyLan.Od.Ua
задача. В сети три компьютера. все они ходят в интэрнет через локалку. подключение в WAN обычный TCP/IP. статический айпи. нужно динамически распределять скорость между этими компами. так же есть приоритеты. наивыший приоритет .8, средний .10, наименьший .55
Скорость инета внешнего 2М, скорость локальных ресурсов провайдера 100Мб.
Составил скрипт. но не уверен в правельности его составления. проверьте кто-то.#/bin/sh
# Wonder Shaper
# please read the README before filling out these values
#
# 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.
if [ "$1" = "status" ]
then
echo "[qdisc br0]"
/usr/sbin/tc -s qdisc show dev br0
echo "[qdisc vlan1]"
/usr/sbin/tc -s qdisc show dev vlan1
echo "[class br0]"
/usr/sbin/tc -s class show dev br0
echo "[class vlan1]"
/usr/sbin/tc -s class show dev vlan1
echo "[filter br0]"
/usr/sbin/tc -s filter show dev br0
echo "[filter vlan1]"
/usr/sbin/tc -s filter show dev vlan1
exit
fi
# clean existing down- and uplink qdiscs, hide errors
/usr/sbin/tc qdisc del dev br0 root 2> /dev/null > /dev/null
/usr/sbin/tc qdisc del dev br0 ingress 2> /dev/null > /dev/null
/usr/sbin/tc qdisc del dev vlan1 root 2> /dev/null > /dev/null
/usr/sbin/tc qdisc del dev vlan1 ingress 2> /dev/null > /dev/null
if [ "$1" = "stop" ]
then
exit
fi
if [ "$1" = "start" ]
then
# install root HTB, point default traffic to 1:99
/usr/sbin/tc qdisc add dev br0 root handle 1:0 htb default 99
# root class 1
/usr/sbin/tc class add dev br0 parent 1:0 classid 1:1 htb rate 100mbit
# router traffic subslass 2 (router IP=192.168.15.1)
/usr/sbin/tc class add dev br0 parent 1:1 classid 1:2 htb rate 100mbit ceil 100mbit
/usr/sbin/tc qdisc add dev br0 parent 1:2 handle 2: sfq perturb 2
/usr/sbin/tc filter add dev br0 parent 1: protocol ip prio 10 u32 match ip src 192.168.15.1 flowid 1:2
# internet traffic subclass 10
/usr/sbin/tc class add dev br0 parent 1:1 classid 1:10 htb rate 100mbit ceil 100mbit
# internet traffic subclasses 12, 13,... for each client IP
/usr/sbin/tc class add dev br0 parent 1:10 classid 1:12 htb rate 512kbit ceil 100mbit burst 6k prio 10
/usr/sbin/tc class add dev br0 parent 1:10 classid 1:13 htb rate 128kbit ceil 100mbit burst 6k prio 20
/usr/sbin/tc class add dev br0 parent 1:10 classid 1:14 htb rate 128kbit ceil 100mbit burst 6k prio 30
# creating quques for each class
/usr/sbin/tc qdisc add dev br0 parent 1:12 handle 12: sfq perturb 2
/usr/sbin/tc qdisc add dev br0 parent 1:13 handle 13: sfq perturb 2
/usr/sbin/tc qdisc add dev br0 parent 1:14 handle 14: sfq perturb 2
#sending traffic from clinet's IP's to classes
/usr/sbin/tc filter add dev br0 parent 1: protocol ip prio 10 u32 match ip dst 192.168.15.8 flowid 1:12
/usr/sbin/tc filter add dev br0 parent 1: protocol ip prio 10 u32 match ip dst 192.168.15.10 flowid 1:13
/usr/sbin/tc filter add dev br0 parent 1: protocol ip prio 10 u32 match ip dst 192.168.15.55 flowid 1:14
# install root HTB, point default traffic to 1:99
/usr/sbin/tc qdisc add dev vlan1 root handle 1:0 htb default 99
# root class 1
/usr/sbin/tc class add dev vlan1 parent 1:0 classid 1:1 htb rate 100mbit
# router traffic subslass 2 (router IP=192.168.15.1)
/usr/sbin/tc class add dev vlan1 parent 1:1 classid 1:2 htb rate 100mbit ceil 100mbit
/usr/sbin/tc qdisc add dev vlan1 parent 1:2 handle 2: sfq perturb 2
/usr/sbin/tc filter add dev vlan1 parent 1: protocol ip prio 10 u32 match ip dst 192.168.15.1 flowid 1:2
# internet traffic subclass 10
/usr/sbin/tc class add dev vlan1 parent 1:1 classid 1:10 htb rate 100mbit ceil 100mbit
# internet traffic subclasses 12, 13,... for each client IP
/usr/sbin/tc class add dev vlan1 parent 1:10 classid 1:12 htb rate 512kbit ceil 100mbit burst 6k prio 10
/usr/sbin/tc class add dev vlan1 parent 1:10 classid 1:13 htb rate 128kbit ceil 100mbit burst 6k prio 20
/usr/sbin/tc class add dev vlan1 parent 1:10 classid 1:14 htb rate 128kbit ceil 100mbit burst 6k prio 30
# creating quques for each class
/usr/sbin/tc qdisc add dev vlan1 parent 1:12 handle 12: sfq perturb 2
/usr/sbin/tc qdisc add dev vlan1 parent 1:13 handle 13: sfq perturb 2
/usr/sbin/tc qdisc add dev vlan1 parent 1:14 handle 14: sfq perturb 2
# sending traffic from clinet's IP's to classes
/usr/sbin/tc filter add dev vlan1 parent 1: protocol ip prio 10 u32 match ip src 192.168.15.8 flowid 1:12
/usr/sbin/tc filter add dev vlan1 parent 1: protocol ip prio 10 u32 match ip src 192.168.15.10 flowid 1:13
/usr/sbin/tc filter add dev vlan1 parent 1: protocol ip prio 10 u32 match ip src 192.168.15.55 flowid 1:14
fi