от Todor Lazarov(18-02-2004)

рейтинг (-63)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

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