LINUX-BG   Адрес : http://www.linux-bg.org
Как да си направим по-лесно нашия трафик контрол
От: Todor Lazarov
Публикувана на: 18-02-2004
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=ideas&key=359010848
Днес като се рових из http://freshmeat.net/ открих един доста интересен util, с който всеки може лесно и бързо да си направи своя трафик контрол.

Разбира се, няма да може да ползва всичките възможности на iproute2+tc но затова пък ще се отървете от писане на сложен tc синтаксис.

Та ето и няколко думи за самото приложение Pol-IP. То има за цел лесно и бързо да се прави трафик контрол под Linux, като се използва HTB3. Препоръчително е да имате по-ново ядро - например 2.4.20 и нагоре или ако не, трябва да използвате patch дадени в тази страница.

Идеята е следната:
Чрез лесен за използване конфигуратор да се направи конфигурационен файл, който впоследствие да се прочете от сървърната част на приложението и да се изпълни.

Това програмче се състои от две части.
- сърверна част - polipd
- конфигуратор - polipconfig

polipd - е програмa, която се стратира като демон и има за задача да изгради трафик контрола и да дава информация на клиентите, поискали справка, каква скорост използват.
т.е. Програмата е клиент сървер.

polipconfig - е програмa, която прави конфигурационния файл (/etc/polip.conf), който се прочита от polipd. Между другото, прави го в доста четаем вид.

За да се направи трафик контрола, е нужно да имате инсталиран iproute2 + tc и подръжка от кернела на HTB3.
Демонът polipd чете конфигурациония файл /etc/polip.conf и го преобръща в tc синтаксис, който изпълнява.

Направих и следната проба.

Задачата е следната:
Имаме входяш интерфейс eth1 с капацитет 10Mbit и изходящ интерфейс eth0 с капацитет 1024Kbit.
Задачата е на трима клиенти да се даде по 16Кbit на всеки и общо те да не ползват по-вече от 128Kbit.
т.е.
min speed = 16Kbit
max speed = 128Kbit

Видът на конфигурациония файл, направен от polipconfig, стана такъв:
=================================================================
###Root Structure
#
[root]
netdevice=eth1
netspeed=100mbit
linkdevice=eth0
linkspeed=1024kbit
#
#
#Grupo
#
[grupo]
name=user16k
parent=root
rate=128kbit
borrow=no

#
#Cliente
#
[Cliente]
name=PC1
parent=user16k
rate=16kbit
borrow=yes
ip=192.168.0.2

#
#Cliente
#
[Cliente]
name=PC2
parent=user16k
rate=16kbit
borrow=yes
ip=192.168.0.3

#
#Cliente
#
[Cliente]
name=PC3
parent=user16k
rate=16kbit
borrow=yes
ip=192.168.0.4
=================================================================
А програмата polipd изпълни това:
=================================================================
tc qdisc del dev eth1 root 2>/dev/null

tc qdisc add dev eth1 root handle 1:0 htb default 1
tc class add dev eth1 parent 1:0 classid 1:2 htb rate 103809024
tc qdisc add dev eth1 parent 1:2 handle 2:0 sfq perturb 10
tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip src 192.168.1.1 flowid 1:2

tc class add dev eth1 parent 1:0 classid 1:3 htb rate 1024kbit
tc class add dev eth1 parent 1:3 classid 1:4 htb rate 128kbit ceil 0

tc class add dev eth1 parent 1:4 classid 1:5 htb rate 16kbit ceil 1024kbit
tc qdisc add dev eth1 parent 1:5 handle 5:0 sfq perturb 10
tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 192.168.0.2 flowid 1:5

tc class add dev eth1 parent 1:4 classid 1:6 htb rate 16kbit ceil 1024kbit
tc qdisc add dev eth1 parent 1:6 handle 6:0 sfq perturb 10
tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 192.168.0.3 flowid 1:6

tc class add dev eth1 parent 1:4 classid 1:7 htb rate 16kbit ceil 1024kbit
tc qdisc add dev eth1 parent 1:7 handle 7:0 sfq perturb 10
tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 192.168.0.4 flowid 1:7
=================================================================
Тестовете потвърдиха заданието.

Потребителите теглиха общо със скорост не повече от 128Kbit, а когато теглят едновремено то те си деляха тази скорост,
като минималната скорост ми бе 16Kbit

Вярно, че няма някои работи като задаване на prio, маркиране с fw (iptables MARK) или ограничаване по порт, но ако се пипне в server.c, може да смени вместо с uc32 да се работи с fw и iptables.

Другото което е хубаво, че има и клиентски софтуер под win, java, с който клиентите могат да виждат скороста си.
Ето и малко screenshost

Мисля, че този utils заслужава един поглед. Особено ако се ползва от хора, на които tc им е труден като синтаксис.

<< SCO - заплаха за свободния софтуер или блъф? | За качествения софтуер и интеграцията >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 0 wallclock secs ( 0.15 usr + 0.04 sys = 0.19 CPU)