Jump to content

Шейпър на 1 устройство за download+upload и контрол на скоростите по IP адрес


uBoTo

Recommended Posts

Здравейте! Преди години имах едно PC със Slackware Linux и го използвах като рутер (една лан карта за WAN и една за ЛАН), на който бях конфигурирал следния шейпър за ограничаване на download+upload скоростите (описвам всяко IP, като избирам скоростите му на upload/download):


# eth1 - WAN; eth2 - LAN

#

tc qdisc add dev eth1 root handle 1: htb default 2 r2q 1

tc class add dev eth1 parent 1: classid 1:1 htb rate 128kbps ceil 128kbps

tc class add dev eth1 parent 1:1 classid 1:2 htb rate 3kbps ceil 30kbps																																		

tc filter add dev eth1 parent 1:0 prio 0 protocol ip handle 2 fw flowid 1:2

iptables -A PREROUTING -t mangle -i eth2 -s 192.168.0.2 -j MARK --set-mark 2

#

tc qdisc add dev eth2 root handle 2: htb default 2 r2q 1

tc class add dev eth2 parent 2: classid 2:1 htb rate 1024kbps ceil 1024kbps

tc class add dev eth2 parent 2:1 classid 2:2 htb rate 28kbps ceil 256kbps

tc filter add dev eth2 parent 2:0 prio 0 protocol ip handle 102 fw flowid 2:2

iptables -A POSTROUTING -t mangle -o eth2 -d 192.168.0.2 -j MARK --set-mark 102

Вършеше чудесна работа, но в случая ми трябва нещо по-различно. Използвам Slackware, имам няколко мрежови устройства и искам да използвам този скрипт само за едно от тях. С други думи казано, искам да приложа правилата за входящия и изходящия трафик само на едното устройство, като не се използва никакъв допълнителен софтуер (ако е възможно). Търсих доста из интернет за нещо подобно, но не можах да намеря. Правих и някои опити, но за жалост не бяха успешни (успявах да огранича само скоростта на теглене). За съжаление не съм експерт в правилата, класовете и всичко, свързано с tc, htb, cbq. Ще се радвам ако споделите опита си, за да мога да се справя с проблема и коригирам скрипта.

П.П.: Друга идея за това устройство, освен шейпа, е да спра и свалянето на торенти/магнити (без да спирам достъпа до сайтовете за тях), но е като идея и не съм търсил решение. Ако някой има конкретно предложение за забрана за теглене на торенти/магнити, моля да го сподели. Предварително благодаря на отзовалите се.

Адрес на коментара
Сподели в други сайтове

Само на един интерфейс неможе да се шейпва ефективно двупосочно (освен ако не си пачнал ядрото и iptables-a с IMQ)

Ето вариант с приоритизация на ICMP трафика и ToS 0x10.

Тебе ти трябва долната част мисля , с ingress-a

"$1" си го заместваш с твоя интерфейс


	 /sbin/tc qdisc del dev $1 root > /dev/null

	 /sbin/tc qdisc del dev $1 ingress > /dev/null


##### speed server->client ### A.K.A. Download 

	 /sbin/tc qdisc add dev $1 root handle 1: htb default 20 r2q 1

	 /sbin/tc class add dev $1 parent 1: classid 1:1 htb rate ${UPSPEED}mbit quantum 3000

	 /sbin/tc class add dev $1 parent 1:1 classid 1:10 htb rate ${UPSPEED}mbit prio 1 quantum 3000

	 /sbin/tc class add dev $1 parent 1:1 classid 1:20 htb rate ${UPSPEED}mbit prio 2 quantum 3000

	 /sbin/tc qdisc add dev $1 parent 1:10 handle 10: sfq perturb 10 quantum 3000

	 /sbin/tc qdisc add dev $1 parent 1:20 handle 20: sfq perturb 10 quantum 3000

	 /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10

	 /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:10

	 /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10


##### speed client->server ### A.K.A. Upload 

	 /sbin/tc qdisc add dev $1 handle ffff: ingress

	 /sbin/tc filter add dev $1 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${DOWNSPEED}mbit burst 128k drop flowid :1


[/code]

Адрес на коментара
Сподели в други сайтове

Благодаря за отговора. Варианта с IMQ го срещнах, но трябва да прекомпилирам, а идеята е скрипта да може да се използва и без да има нужда от допълнителни програми и модификации. Изпробвах въпросният код (само ingress за upload-а) и имам следният основен проблем - как и има ли начин да маркирам пакетите така, че да мога да определям скоростта за всеки потребител, както това е възможно в посоченият от мен вариант по-горе? Като минус за дадения скрипт от Semoff мога да допълня, че "реже" скоростта на сваляне не много точно (да каже от зададени 5Мбит я държи на 4,8Мбит), а тази на качване от 1Мбит - в началото на теста е по-висока и след 3-4 секунди спада на зададената (1Мбит). Тестовете ги правя чрез http://speedtest.net/ на произволни сървъри в България, за които знам, че скоростта ми е много над тази, която искам да огранича. Та, приемам идеи как да подобря скрипта (да не допуска по-високи скорости от желаните и да се стреми да поддържа максимума на зададените) и да мога да определям скорости за всеки потребител, моля да помага.

П.П.: Идеята е, че на някои IP адреси искам да махна ограниченията или да сложа максимални стойности над ограниченията за всички останали (колкото позволяват условията на свързаност да кажем) и затова търся как да направя шейпъра така. Надявам се да съм достатъчно изчерпателен, а ако не съм - питайте и да дообеснявам ::)

Адрес на коментара
Сподели в други сайтове

  • 3 месеца по-късно ...

http://packages.slackware.com/ Изтегли iproute2-3.4.0 и инсталирай

cp /usr/doc/iproute2-3.4.0/examples/cbq.init-v0.7.3 /sbin/cbq

chmod +x /sbin/cbq

mkdir -p /etc/sysconfig/cbq

cd /etc/sysconfig/cbq

pico cbq-0003.ИмеНаПотребителяКойтоЩеОграничаваш


DEVICE=eth1,1000Mbit,100Mbit

RATE=60000Kbit

WEIGHT=30000Kbit

PRIO=5

BOUNDED=yes

ISOLATED=no

RULE=192.168.0.2/24

cbq compile

cbq start

Ако работи правилно си го описваш в rc.local

Всеки може да опикае стените. Ако си мъж осери тавана.

Адрес на коментара
Сподели в други сайтове

Създайте нов акаунт или се впишете, за да коментирате

За да коментирате, трябва да имате регистрация

Създайте акаунт

Присъединете се към нашата общност. Регистрацията става бързо!

Регистрация на нов акаунт

Вход

Имате акаунт? Впишете се оттук.

Вписване
  • Потребители разглеждащи страницата   0 потребители

    • No registered users viewing this page.
×
×
  • Създай нов...

Important Information

By using this site, you agree to our Terms of Use.