(e-book - PL pdf) Linux - HTB – strażnik trafficu - Henryk Liniowski.pdf

(133 KB) Pobierz
HTB - straznik trafficu
HTB – strażnik trafficu
wersja 0.7
1. Ale o co chodzi ?
Angielskie „traffic control” przetłumaczyć można jako kontrolowanie ruchu. W tym
przypadku ruch tworzą pakiety przesyłane po sieci natomiast kontrolowanie dotyczy
ograniczenia jego szybkości. Z grubsza i w teorii tyle.
W praktyce chodzi o to, aby:
- ograniczyć buractwo korzystające z programów typu Kazaa
- zapewnić sprawiedliwy (przeważnie) dostęp do Internetu
- nie dopuścić do sytuacji w której jeden z użytkowników blokuje innym dostęp do
czegokolwiek poprzez jednoczesne ściąganie 3 filmów i 10 mpTrójek
- zapewnienie gwarantowanej szybkości połączenia z Siecią serwera(ów)
Nie będę się dalej rozwodził nad pierdołami, ponieważ Ty – administrator – i tak
wiesz co chcesz osiągnąć.
2. HTB
HTB jest stosunkowo nowym algorytmem kolejkowania. Mówiąc wprost, to od niego
zależy zapewnienie dokładnie takiego podziału pasma, jakiego sobie zażyczyłeś. Podobne
możliwości jak opisywany tutaj HTB posiada CBQ. Dlaczego więc wybrałem HTB i
polecam go Tobie ? Ponieważ HTB:
jest szybszy (szybsze wysłanie pakietów, mniejsze obciążenie serwerka)
jest bardziej dokładny (można powiedzieć dużo bardziej dokładny)
łatwiej zrozumieć jego składnię i sam sposób działania
Tyle plusów wystarczy, teraz z drugiej beczki. Zagadnienie zarządzania
przepustowością sieci jest złożone. Dlatego podaje dodatkowe źródła informacji, po
które powinieneś sięgnąć:
http://echelon.pl/kravietz/ – dokument pt. „Sterowanie przepływem danych w
Linuxie”. Praca raczej teoretyczna ale niezbędna. Nie wczuwaj się za bardzo
w opis CBQ. Język: polski, przeczytaj przynajmniej 5 razy.
http://luxik.cdi.cz/~devik/qos/htb/ - strona domowa HTB. Ściągaj i czytaj
wszystko, bez ograniczeń ilościowych. Język: angielski.
http://docum.org/ - dużo dodatkowych informacji i przykłady. Czytaj ! Język:
angielski.
1
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com
Powyżej podałem najciekawsze (moim zdaniem) źródła informacji na temat
kształtowania ruchu w kontekście HTB. Jeśli będziesz miał pytania bez
odpowiedzi, poszukiwania zacznij od ww. adresów.
3. Wyzwanie: instalacja HTB i odpowiednich narzędzi
Instalacja HTB nie jest normalna. Już wyjaśniam: obecnie HTB obsługują
wyłącznie jądra serii 2.4.x. Zdziwiony ? Ja też, i jeśli mam być szczery HTB to jedyny
powód, dla którego zmieniłem jajko 2.2 na 2.4. Kolejna wiadomość: dopiero jajko
2.4.20 ma włączoną obsługę HTB, dla poprzednich należy je patchować. Zalecam
instalację przynajmniej 2.4.20. Myślę, że to dobry moment abyś siadł do kompa i
zaczął ściąganie najnowszego jajka ( http://www.kernel.org) .
Jajkiem zajmiemy się za chwilę, teraz kolej na resztę potrzebnego softu. Mowa
tu o pakiecie iproute2 . Pocieraj więc pod ftp://sunsite.icm.edu.pl/pub/linux/iproute/ .
Lecimy dalej: sedno sprawy. Ze strony domowej HTB pobierz... htb
Kolejne, ostatnie już narzędzie, jest opcjonalne ale zalecane. Mowa tu o
programie ttcp . Świetnie się sprawdza jako tester szybkości sieci a jego obsługa jest
banalnie prosta. Adres: ftp://ftp.arl.mil/pub/ttcp/ . Jak go tam nie znajdziesz, wejdź do
jakiejś wyszukiwarki plików (np. www.internauci.pl ) i wpisz ttcp .
Cyrk dopiero się zaczyna. Zaczniemy od końca:
- rozpakuj ttcp.tar.gz i wydaj polecenie: gcc ttcp.c –o ttcp
- zobaczysz kilka ostrzeżeń a następnie binarkę
- skopiuj ją w jakieś sensowne miejsce (np. /usr/local/bin/ )
ttcp mamy z głowy. Teraz htb i iproute2 .
- rozpakuj htb a ujrzysz dwa pliki .diff . To może oznaczać tylko patchowanie.
- jeśli masz jajko => 2.4.20 pozostanie Ci tylko iproute2 do spaczowania.
- tu pojawia się drobny problem. Gdy powstawała ta praca, iproute2 należało
spaczować. Być może od tego czasu dorzucono w końcu obsługę HTB. Zobacz do
pliku Relnotes . Jeśli ujrzysz gdzieś tam HTB, szafa gra. Jeśli nie, wejdź do
katalogu iproute2/ i wydaj polecenie: patch –p1 < ../ ścieżka / do /htb..._tc.diff .
- pozostało uruchomić make i make install. W razie problemów możesz pogrzebać w
pliku Makefile – jest tam kilka rzeczy do zmiany. U mnie (Slack 8.0) nie trzeba
było nigdzie grzebać.
Teraz zakładam, że masz jajko i iproute2 (dokładnie programik tc ) które
obsługują HTB. Czas na kompilację jajka. Ogólne zalecenie jest takie: w
Networking Options włącz QoS i zaznaczaj ile wlezie. Na początek wszystko wrzuć
na stałe do jajka (nie rób modułów, dopóki nie sprawdzisz, że działa). Z tego, co
się orientuję należy mieć tam także włączone ...netlink socket . I jeśli mam być
szczery - Bóg jeden wie co jeszcze. Jeśli nie jesteś pewien, bierz wszystko co w
opisie ( Help ) posiada „traffic control”, „traffic shaping”, „HTB” itp.
2
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com
Potem SZZ (Skompiluj, Zainstaluj, Zrebootuj). Uruchom system na nowym
jajku i wykonaj polecenia:
tc qdisc show
tc filter show
tc class show
Jeśli któreś z nich zwróci komunikat w stylu „....LINK: no such device”
pominąłeś coś w jajku. Dodaj parę sensownych rzeczy, potem SZZ i jeszcze raz.
Jeśli ktoś posiada listę obowiązkowych opcji dla jajka potrzebnych do
uruchomienia HTB, proszę o mejla . To był przyspieszony kurs konfiguracji Linuxa
tak, aby mógł on pełnić funkcje rozdzielacza (sic!) pasma z wykorzystaniem HTB.
Poprawna instalacja tego wszystkiego potrafi być naprawdę upierdliwa. Tak
czy siak, w końcu się uda. Przejdźmy do konkretów...
4. Zaczynamy
A teraz kilka ważnych informacji, które powinny zmienić Twój sposób
myślenia na omawiany temat. HTB (podobnie jak CBQ) umożliwia jedynie
ograniczenie wychodzącego ruchu.
Chyba jesteś trochę skołowany, ale powoli... Załóżmy taką sytuację:
( Internet ) --------------- eth1 SERWER eth0 --------------- LAN
W przypadku modemów (np. SDI od największego legalnego złodzieja w kraju
– TPsa) miejsce eth1 zastępuje ppp0 .
Skoro możesz jedynie ograniczać ruch wychodzący, to operacje na eth1/ppp0
dotyczyć będą ograniczenia ruchu z serwera do Internetu... Przeważnie nie o to
chodzi...
Ale spójrz na to z drugiej strony: ograniczenia nakładane na eth0 dotyczyć będą
ruchu z serwera do sieci lokalnej. A ponieważ serwer jest bramką do Inetu i cały ruch
z Netu do LANu przechodzi właśnie przez serwer, dlatego też chcąc ograniczać
Internet, działasz na interfejsie, przez który Internet „wychodzi” z serwka do LANu.
Innymi słowy: działając na interfejsie po stronie LAN ograniczasz Internet dla
sieci LAN (wszystko, co jest ściągane przez sieć lokalną podlega ograniczeniu).
Działając na interfejsie po stronie Internetu, ograniczasz wszystko, co do niego
wychodzi, np. z serwera.
Prawdopodobnie od początku czaisz o co chodzi, ale chcę uniknąć
nieporozumień. Pewnie masz w tej chwili 128 pytań na temat tego wszystkiego, ale
spokojnie...
3
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com
Przyspieszony kurs obsługi ttcp .
Nie jest to program wymagany, ale bardzo przydatny. Oprócz niego będziesz
potrzebował dwóch Linuxów połączonych siecią. Na jednym i drugim instalujesz
programik ttcp .
- po stronie odbiorcy piszesz:
ttcp –r –s
- po stronie nadawcy:
ttcp –t –s <nazwa_kompa_odbiorcy>
Najlepiej to sprawdzić w sieci lokalnej ze względu na stosunkowo dużą ilość
domyślnie przesyłanych pakietów. Inne przydatne parametry programu (pamiętaj, że
większość z nich należy zmienić zarówno po stronie nadawcy i odbiorcy):
-p <numer>
:zmiana numeru portu (domyślnie 5001)
-l <długość>
:długość buforów, wysyłanych do / pobieranych z, sieci (8192)
-n <ilość>
: ilość buforów wysyłanych do / pobranych z sieci (2048)
-f <format>
: jednostki danych wyjściowych (domyślnie kilobajty)
Myślę, że jest to dobry moment, aby poruszyć temat bitów, bajtów oraz
przepustowości sieci. O ile podstawową jednostką w przypadku pamięci RAM czy
dysków twardych jest bajt, o tyle w przypadku sieci korzysta się z bitów. Dla
przypomnienia: 1 bajt = 8 bitów :)
Najczęściej spotykane sieci lokalne mają szybkość 10 lub 100 megabitów. Z
Internetem łączymy się najczęściej z szybkością 56 kilobitów (modem rulez), 112
kilobitów (SDI rulez) lub np. 1 megabita (Polpak-T rulez). A wszystko to najczęściej
poprzez Tpsa („to ludzka rzecz – okradać”).
Powinieneś wiedzieć, z jaką szybkością działa Twoja sieć lokalna oraz jaka jest
maksymalna szybkość Twojego połączenia z Netem (w tym przypadku ważne jest
także czy i jak rozkłada się ta szybkość – np. 12 kbit na wychodzące a 100 kbit na
przychodzące - choć prawdopodobnie nie masz ograniczeń w tym stylu).
Moja sieć lokalna zbudowana jest na kablu koncentrycznym (kto go jeszcze
pamięta, kto go jeszcze używa ?) o teoretycznej szybkości 10 mbit / sek. Za chwilę to
sprawdzę z wykorzystaniem ttcp i dwóch Linuxów.
Odbiorca:
ttcp –r –s –f mbit
Nadawca:
ttcp –t –s <nazwa_odbiorcy>
Oto weryfikacja szybkości działania mojego LANu (komunikaty odbiorcy):
ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp
ttrp-r: socket
ttcp-r: accept from 192.168.2.2
ttcp-r: 16777216 bytes in 14.85 real seconds = 8.62 Mbit/sec +++
[ i tu różne pierdoły ]
Chyba wystarczająco dokładny pomiar...
4
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com
Posunę się do stwierdzenia, że aby uruchomić HTB należy wykonać
dwa kroki. Ale za to jakie... Pierwszym z nich jest podział „szybkości
wychodzącej” na mniejsze, odpowiadające konkretnym usługom, odbiorcom
itp. Drugim ruchem jest założenie odpowiednich filtrów. Filtry odpowiadają za
to, aby odpowiednie pakiety wpadały do odpowiednich „podszybkości”,
zdefiniowanych w pierwszym kroku.
Podsumowując: w pierwszym kroku konfigurujemy dostępne pasmo dla
konkretnych użytkowników czy usług (czyli „dzielimy” łącze). W drugim
kroku dbamy o to, żeby odpowiednie pakiety trafiły do właściwego
„podłącza”.
Kurwa, język polski jest piękny, ale jak czytam „podłącza” czy
„podszybkości” to chce mi się rzygać. Jak się znajdzie ktoś mądry, niech mi
podeśle polskie odpowiedniki tych cholernych wynalazków... Dobra, chyba
znalazłem: „podszybkości” i te drugie to kolejki i klasy . Czyli dzielimy całe
pasmo, np. 56 kbitów na kolejkę i klasy.
5. Najtrudniejszy pierwszy krok
Jak wspomniałem wcześniej, najpierw musimy podzielić całą przepustowość łącza na
kolejkę a ją na klasy. Potem, za pomocą filtrów skierujemy do nich pakiety.
Sytuacja A – prosty przykład, dużo konkretów
Serwer (192.168.2.1) podłączony jest do LAN z szybkością 10 mbit/sek. Klientami są
dwa komputery: kompA (192.168.2.2) i kompB (192.168.2.3). Chcemy im dać po 50%
łącza (5mbit/sek) ale w ten sposób, że jeśli kompA nie robi nic, kompB dostaje całe łącze.
Gdy kompA zaczyna coś robić, szybkość połączenia kompB spada do wyjściowych 50%.
I na odwrót.
Schemacik:
serwer
10 mbit (eth0)
kompA kompB
min. 5 mbit min. 5 mbit
5
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com
5069498.001.png
Zgłoś jeśli naruszono regulamin