Materiał o CBQ jest na tyle obszerny, ze podzieliłem
dotychczasową stronę na cztery pliki. W każdym opisałem inny aspekt
konfiguracji CBQ:
Jak można zauważyć, tak naprawdę opiszę tutaj konfigurację CBQ
na serwerze opartym na dwóch kartach sieciowych, pracującym wg
schematu:
[192.168.10.1]-
WSTĘP.
Aby zapanować nad komunikacją w sieci należy
wykonać:
-
narzucić klientom w domowej sieci stałe nr IP i
zablokować im możliwość logowania pod innym nr IP poprzez
powiązanie IP z MAC. Jeżeli masz Mandrake 9.x
to opisy instalacji tego systemu są na moich stronach razem z
konfiguracją udostępnienia Internetu na łączu SDI i powiązaniem
IP + MAC klientów. W przeciwnym wypadku polecam stronkę o dhcpd.
-
ustalić IP klientów, którzy zostaną objęci kontrolą
transferu i wyizolować pozostałe hosty od usług związanych z netem
za pomocą firewalla. W przypadku Mandrake 9.x firewall na
iptables jest nadzorowany za pomocą shorewalla.
Utworzyłem stronki o tym projekcie, ale w tym miejscu potrzebne są
jedynie przykłady wpisów blokujących - zapraszam tutaj
(zwróć uwagę na czerwony tekst).
Nie znam w tej chwili narzędzia, którym by można
było przeprowadzić test szybkości połączeń na kartach sieciowych,
ale poszukam go i podam link umożliwiający jego ściągniecie.
Chwilowo przyjmijmy, że wewnętrzna sieć (eth0, eth1) działa na
jednej z dwóch teoretycznie możliwychwartości: 100 Mbit/sek lub 10
Mbit/sek. Na potrzeby tego opisu wybieram 10 Mbit/sek transferu
na interfejsie eth0. (czyli po odjęciu zapasu tolerancji ok
9500Kbit)
Usługa SDI-HIS póki co, nie narzuca
rygorystycznie wielkości komunikacji przychodzącej i wychodzacej,
więc na szczęście (na dzień dzisiejszy) proporcje te mogą być
płynne. Teoretyczna, maksymalna wartość 112 Kbit/sek
(praktycznie ok. 100Kbit) jest sumą transferu w tę i z
powrotem. Ponieważ w naszym przykładzie zajmujemy się siecią na
łączu SDI-HIS, w której pracuje 4 klientów dzielimy 100 Kbit/sek
na 4. Jak łatwo można wyliczyć, każdy z hostów w domowej sieci
otrzyma 25Kbit/sek maksymalnego transferu. Zauważyłeś
pewnie, że nie dzielimy wartości 112 Kbit/sek , a 100 Kbit/sek.
Różnica, czyli 12 Kbit/sek, jest rezerwą związaną z wahaniami
jakości usługi SDI oraz ewentualnymi skromnymi potrzebami serwera.
Oczywiście jest to podział szkoleniowy i nie należy go bezmyślnie
naśladować. Sumując wnioski: za chwilę nadamy następujące
parametry:
- z netu (a tak naprawdę z serwera
linuksowego_2) do klienta - górna granica transferu to
25Kbit/sek
- oraz 10 Kbit/sek od klienta do netu (a tak naprawdę do
serwera linuksowego_1).
Oczywiście w skrajnych okolicznościach, jeżeli każdy z naszych
klientów zaprze się i jednocześnie zacznie wysyłać i ściągać pliki
to zabraknie komuś transferu, ale jeżeli wszyscy jednocześnie będą
na maksa tylko ściągać z netu - powinno starczyć ;) Oczywiście da
się zabezpieczyć przed pierwszą możliwością i ustalić bardziej
restrykcyjne parametry, ale moim zdaniem będzie to zbędna
nadgorliwość administratora. Mając podzieloną teoretycznie sieć,
możemy umieścić scrypt CBQ w systemie i skonfigurować go.
Pobieramy plik ze strony http://sourceforge.net/projects/cbqinit lub http://freshmeat.net/projects/cbq.init . Na dzień
dzisiejszy (luty 2003) ma numer cbq.init-v0.7.2 . Zmiamy
prawa do tego pliku poleceniem: chown root.root
cbq.init* oraz chmod 755 cbq.init* . Dla
swojej wygody możemy mu zmienić nazwę na cbq.init poleceniem
mv cbq.init-v* cbq.init . Umieszczamy go w katalogu
/etc/rc.d
W katalogu /etc/sysconfig utwórz katalog
cbq i nadaj mu prawa: root.root 755 (poleceniami chmod 755 cbq oraz chown root.root
cbq) . Utwórz w nich pary plików dla poszczególnych hostów. W
nazwie_pliku można dla swojej wygody umieścić nazwę interfejsu i
kierunek transferu (skąd_dokąd). Przypominam fragment schematu
naszej sieci. Będzie to potrzebne do lepszego zrozumienia logiki
nadawanych nazw plikom konfiguracyjnym.
INTERNET --------- eth0 - [Linux ] - eth1 --------------[clienty]
Para plików dla pierwszego hosta bedzie miała nazwy:
cbq-0002.eth1_serwer_klient
cbq-0003.eth0_klient_net
dla drugiego hosta będą numery:
cbq-0004.eth1_serwer_klient
cbq-0005.eth0_klient_net
dla trzeciego hosta:
cbq-0006.eth1_serwer_klient
cbq-0007.eth0_klient_net
dla czwartego hosta:
cbq-0008.eth1_serwer_klient
cbq-0009.eth0_klient_net
Pliki tworzy się poleceniem touch
nazwapliku . Nadaj im prawa 750 root.root . Uwaga: w
nazwach plików nie ma spacji. Nazwa składa się z [cbq] [myślnika]
[numeru (nie zmieniaj formatu(!)] [kropki] [dowolnej treści]
Przypominam, iż przyjęliśmy, że transfer z netu do
klietów ograniczają parametry usługi SDI. Wypełnij utworzone przed
chwilą pliki następującą treścią. Uwaga: w poszczególnych wierszach
nie ma spacji.
cbq-0002.eth1_serwer_klient
treść:
DEVICE=eth1,9500Kbit,950Kbit
RATE=25Kbit
WEIGHT=2Kbit
PRIO=5
RULE=192.168.0.2
cbq-0003.eth0_klient_net
treść (zwróć uwagę na przecinek (,) w polu RULE):
DEVICE=eth0,9500Kbit,950Kbit
RATE=10Kbit
WEIGHT=1Kbit
PRIO=5
RULE=192.168.0.2,
cbq-0004.eth1_serwer_klient
treść:
DEVICE=eth1,9500Kbit,950Kbit
RATE=25Kbit
WEIGHT=2Kbit
PRIO=5
RULE=192.168.0.3
cbq-0005.eth0_klient_net
treść (zwróć uwagę na przecinek (,) w polu RULE):
DEVICE=eth0,9500Kbit,950Kbit
RATE=10Kbit
WEIGHT=1Kbit
PRIO=5
RULE=192.168.0.3,
cbq-0006.eth1_serwer_klient
treść:
DEVICE=eth1,9500Kbit,950Kbit
RATE=25Kbit
WEIGHT=2Kbit
PRIO=5
RULE=192.168.0.4
cbq-0007.eth0_klient_net
treść (zwróć uwagę na przecinek (,) w polu RULE):
DEVICE=eth0,9500Kbit,950Kbit
RATE=10Kbit
WEIGHT=1Kbit
PRIO=5
RULE=192.168.0.4,
cbq-0008.eth1_serwer_klient
treść:
DEVICE=eth1,9500Kbit,950Kbit
RATE=25Kbit
WEIGHT=2Kbit
PRIO=5
RULE=192.168.0.5
cbq-0009.eth0_klient_net
treść (zwróć uwagę na przecinek (,) w polu RULE):
DEVICE=eth0,9500Kbit,950Kbit
RATE=10Kbit
WEIGHT=1Kbit
PRIO=5
RULE=192.168.0.5,
Startujesz skrypt komendą /etc/rc.d/cbq.init start nocache , a sprawdzasz
jak działa poleceniem tc -s qdisc (wyświetlą
się wtedy Twoje parametry z plików cbq-0002 itd.).
Autostart skryptu /etc/rc.d/cbq.init możesz
umieścić w /etc/rc.d/rc.local dopisując na
końcu linię
/etc/rc.d/cbq.init start nocache
*
To wszystko. Testowałem na Mandrake 9.0.
Jedynym problemem, było nietrzymanie zadanych wartości transferu -
bład wynosił ok 10% (o tyle klient w sieci miał więcej transferu,
niż mu przydzieliłem).
Czytając pytania od internautów (w mailach i na GG)
odnoszę wrażenie, że nikt nie czyta do końca i uważnie porad
umieszczonych na tej stronie. Na szybkiego robi się pliki
konfiguracyjne i... ze zdziwieniem zauważa, że nie działają.
Podstawowe błędy jakie robią pospieszni admini:
- w nazwę pliku wpisują nr kolejny wg systemu dziesiątkowego, a
ma być liczba hexagonalna
- łączą w plikach konfiguracyjnych kilka jednostek np. Mbit oraz
Kbit. Nie umieją przeliczać jednostek (1Mbit to nie jest 1000 razy Kbit)
- wprowadzają wartości ułamkowe (bo tak im pasuje po podzieleniu
przez 10), a wolno wprowadzać wyłącznie wartości całkowite (nawet
jeżeli dzielnikiem będzie np. 6, a nie 10)
- wprowadzają spację do nazwy pliku lub jego zawartości
- zapominają, że przecinek w pliku konfiguracyjnym transferu
wychodzącego jest konieczny
- mając interfejsy np. eth0 oraz eth1 konfigurują komputer
kliencki na IP zewnętrzne, a trzeba w obu plikach na IP wewnętrzne
(np. 192.168.0.5)
- mając ppp0 (modem) oraz eth0 (do domowej sieci), trzeba
zbiorczo ustawić transfer wychodzący na IP zewnętrznym (np.
217.96.171.101), a indywidualnie (dla kazdego klienta-komputera
osobno) na IP wewnętrznym (np. 192.168.0.5). Na marginesie podaję,
że otrzymałem mailem umieszczony na sąsiedniej stronie wpis skrtyptu
iptables regulującego niezbiorczo transfer, ale jest to rozwiązanie
dla zaawansowanych Linuksiarzy
- nie znają rzeczywistych możliwości transferu w sieci
Przykład plików konfiguracyjnych CBQ pod Neostradę: cbq_neo.rar