ADVERTISEMENT

CBQ.doc

Jak zablokować Kazę, która obciąża sieć LAN?

Acula Ja ja mam Linuxa i jak cos mam pod niego to korzystam z Open Ofice. :D ale oki tu dodaje doc.


Download file - link to post

CBQ

Autor : Mariusz Adamowicz

Data aktualizacji : 9-12-2003

Od autora : Jeżeli masz coś pilnego do zrobienia to zrób to. Jeżeli
sądzisz że zajmie Ci to chwilę to się mylisz – i to bardzo !!!
Czas poświęcony na konfigurację jest wprost proporcjonalny do twoich
umiejętności i chęci.

Oczywiście nie ponoszę żadnej odpowiedzialności za ewentualne
komplikacje wynikłe w trakcie wykonywania opisywanych poniżej
czynności jak również nie odpowiadam za ewentualną utratę danych w
razie zakończenia działań niepowodzeniem. Robisz to na własne ryzyko
i własną odpowiedzialność.

Wszelkie uwagi odnośnie artykułu proszę kierować na adres:
up2daterh@op.pl

1. KILKA SŁÓW WSTĘPU

CBQ umożliwia jedynie ograniczenie ruchu wychodzącego. Czyli
kontrolujemy ruch z kierunku internetu do klienta i klienta do
internetu.

Przydatne mogą też być parametry dostępowe posiadanych urządzeń :

URZĄDZENIE

(MODEM) TRANSFER DO KLIENTA(Kbit/s) TRANSFER OD KLIENTA(Kbit/s)

SDI 128 64

ISDN 128 128

RADSL 384 128

DSL 512 128

ADSL 1500 348

HDSL 1500 1500

VDSL 13000 52000

Będzie to przydatne, gdyż w plikach konfiguracyjnych wskazane jest
używać jednej jednostki (można użyć Kbit w RATE, WEIGHT oraz Mbit w
DEVICE, natomiast nie wolno używać różnych jednostek w RATE, WEIGHT.

2. CO TO JEST I DO CZEGO ?

Class-Based Queueing – czyli mówiąc po polsku kolejkowanie na bazie
klas.

Prosty przykład SDI – 8 użytkowników. Dwóch z nich maniacy Kaazy
– reszta wykorzystują internet w bardziej cywilizowany sposób.
Załóżmy że te dwie osoby poprzez swoje działania zabierają
pozostałym ok 80% łącza. Niesprawiedliwe - ale prawdopodobne.
Chcielibyśmy im przyciąć tę samowolę - nic prostszego –
wykorzystajmy CBQ !

3. PRZYGOTOWANIA

Musisz mieć zainstalowany pakiet iproute. Sprawdzisz to w sposób :

# rpm -qa iproute

odpowiedź :

#iproute-2.4.7-11

Twoje jądro linuksa powinno obsługiwać kolejkowanie a fachowo
mówiąc tzw. algorytmy QoS pozwalające na ograniczanie transferów.
Jeżeli po wpisaniu poleceń

# tc qdisc show

# tc class show

# tc filter show

pojawi się informacja RTNETLINK answers: Invalid argument – to nie
dobrze – nie masz wkompilowanej obsługi QoS. Musisz skompilować
jądro. W moim przypadku Fedora Core 1 nie wymagała kompilacji więc
mogłem przystąpić do konfiguracji.

Składnia polecenia tc :

[root@localhost root]# tc -help

Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }

where OBJECT := { qdisc | class | filter }

OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] | -b[atch]
file }

4. KONFIGURACJA

Pierwszą rzeczą jako należy zrobić to pobrać plik cbqinit ze strony
: HYPERLINK " https://sourceforge.net/projects/cbqinit "
https://sourceforge.net/projects/cbqinit

i zapisać w katalogu /etc/rc.d/ . Należy zmienić jeszcze
właściciela na root i nadać mu prawa wykonywania:

#chown root.root cbqinit

#chmod 0755 cbqinit

Daje on możliwość poprzez przełączniki
{start|compile|stop|restart|timecheck|list|stats} łatwego zarządzania
pracą CBQ.

To co powodowało jedynie chwilowe zakłócenia w jego pracy to to że
nie miał dopisanej ścieżki do poleceń ip, tc, iproute. Można łatwo
to obejść tworząc dowiązania symboliczne do ww. plików bądź
dopisać ścieżkę dostępu do katalogu /sbin w cbqinit:

# ln -s /sbin/ip /bin/ip

# ln -s /sbin/iproute /bin/iproute

# ln -s /sbin/tc /bin/tc

Mając już działający skrypt cbqinit można przystąpić do
określania reguł dostępu.

Domyślnym katalogiem dla CBQ jest /etc/sysconfig/cbq. Jeżeli w twoim
komputerze go nie ma to po prostu go załóż :

#mkdir /etc/sysconfig/cbq

W naszym przypadku interfejsem zewnętrznym do którego podłączony
jest internet jest ppp0 (SDI). Interfejsem wewnętrznym do którego
podłączona jest cała sieć lokalna jest eth1.

Jak już wcześniej wspomniałem kontrolujemy ruch wychodzący a więc
ruch wychodzący przez ppp0 i eth1. Pamiętać należy że nasze łącze
wysyła dane z prędkością 64Kbps a nasza karta sieciowa –
przyjmijmy że z prędkością 10Mbps. Jak łatwo zauważyć prędkość
wysyłania danych z karty sieciowej przewyższa prędkość naszego
łącza ponad 156x co zablokowałoby jego działanie. W tym celu należy
nałożyć ograniczenia na naszych użytkowników.

W katalogu /etc/sysconfig/cbq tworzymy odpowiednie skrypty, oznaczone
powiedzmy jako cbq-xxxx.cbq-1002.SERWER-LAN i cbq-2002.SERWER_NET, gdzie
xxxx to szesnastkowo numer klasy kolejkowania (numer ip klienta z sieci
lokalnej, jeśli każdy ma mieć ustawione oddzielnie). xxxx nie może
wynosić 0001, ponieważ klasa 1 jest zarezerwowana dla samego systemu
kolejkowania. Realny transfer SDI to ok. 110Kbit/sek.

Jak łatwo można wyliczyć, każdy z hostów w domowej sieci otrzyma 11
Kbit/sek maksymalnego transferu. Zwróć uwagę na przecinek znajdujący
się za numerem IP – oznacza on zastosowanie poniższych zasad dla
transferu wychodzącego od użytkownika.

Plik konfiguracyjny dla użytkownika o adresach IP 192.168.1.2 powinien
wyglądać następująco:

#cat cbq-1002.SERWER-LAN

DEVICE=eth1,10000Kbit,1000Kbit

PRIO=5

LEAF=sfq

RULE=192.168.1.2

RATE=100Kbit

WEIGHT=10Kbit



#cat cbq-2002.SERWER_NET

DEVICE=ppp0,110Kbit,11Kbit

PRIO=5

LEAF=sfq

RULE=192.168.1.2,

RATE=11Kbit

WEIGHT=1Kbit



Pamiętać należy że jeżeli chcemy każdemu uzytkownikówi
przydzielić określona część pasma dla każdego z nich należy
stworzć odzielną parę plików.

Jeżeli wszyscy użytkownicy mają użytkować sieć na identycznych
zasadach to parametr RULE należy zdefiniować dla całej sieci:

RULE=192.168.1.0/24,

A teraz tłumaczę co i jak wraz z możliwymi opcjami:

DEVICE=ppp0,110Kbit,11Kbit – ogranicza transfer interfejsu do

poziomu naszego łącza czyli z 110Kbit do 11Kbit;

PRIO=1|2|3|4|5|6|7|8|9|10 – priorytet, im wyższa liczba tym mniejszy
priorytet dostepu dla użytkownika;

LEAF=none|sfq|tbf - Narzuca metodę pracy (dyscyplinę klasy). Przy
braku wpisu domyślnie używane jest tbf

RULE=192.168.1.2, - Te parametry tworzą zasady filtrów “u32”
które wybierają komunikację dla każdej z klas. Możesz używać
wielokrotnych RULE do konfiguracji. Np: RULE=192.168.1.2:80, - wskazuje
że ustawione zasady dla numeru ip=192.168.1.2 mają zastosowanie tylko
do portu 80 (www). Zwróć uwagę na przecinek – oznacza transfer
wychodzący

RATE=11Kbit – wynik podzielenia zasobów łącza przez ilość
uzytkowników w sieci. Zasada jest taka że wartość musi być liczbą
całkowitą więc ewentualne wynik dzielenia nalezy zaokrąglić.

WEIGHT=1Kbit – Wynik RATE/10

PARENT=3001 - ustawiony numer komputera-rodzica (czyli identyfikator
rodzicielskiej klasy - parent class). My używamy LEAF= sfq, więc
możliwe jest stworzenie prostych hierarchicznych struktur klas CBQ.

ISOLATED=no - klasa (czyli plik konfiguracyjny) pożycza “dzieciom”
swojej nieużywanej nadwyżki pasma.

BOUNDED=no - przy braku wpisu widziane jest jako “yes”. Jeśli
ustawione na „yes”, klasa nie może pożyczać transferu od swojej
rodzicielskiej klasy. Jeśli ustawione jest na „no”, klasa będzie
mogła pożyczać transfer od swojego rodzica.

Teraz jedyne co należy wykonać to polecenia :

#/etc/rc.d/cbqinit compile

#/etc/rc.d/cbqinit start

Inne dostępne parametry :

# /etc/rc.d/cbq.init

Usage: cbq.init {start|compile|stop|restart|timecheck|list|stats}