[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

HTB Skrypt



Ze względu na to, że dużo osób pyta mnie o skrypt HTB wysyłam go na grupę
jeszcze raz.
Tym razem wersja mocno przetestowana i już stabilna. Oczywiście nie jest to
wersja końcowa i będę ją rozwijał dalej.

W skrypcie wykorzystałem urządzenie IMQ, które nie jest patchem i jest mniej
zabałaganione jak standardowe IMQ, które wymaga patchowania.
(http://pupa.da.ru/imq/ - wykorzystane przeze mnie;
http://www.linuximq.net/ - wykorzystywane w poprzednich skryptach, w obecnym
zarzucone....)

Poniżej krótki opis konfiguracji skryptu i instalacji.

--
1. imq.tar.gz

urządzenie IMQ - wirtualny interfejs pomagający kolejkować pakiety na kilku
interfejsach, przydatny gdy sieć ma kilka podsieci.

instalacja jest bardzo prosta (przypadek dla jąder 2.4.x):
tar -zxf imq.tar.gz
cd imq
make
cp ./imq.o /lib/modules/<wersja kernela>/kernel/drivers/net
modprobe imq

I to wszystko... pakiety trafiają na interfejs gdy jest on podniesiony...
skrypt zajmuje się tym już automatycznie.

2. htb1.4ext

Napisanie tego zajęło mi sporo czasu... dużo się przy tym nauczyłem. Jest to
już wykończone i sprawdzone w dwóch sieciach w których dane mi jest
administrować... (LAN i WLAN Opatkowice i WLAN Zabierzów). No i obecnie tam
działa na stałe już... (planowane są lekkie modyfikacje oczywiście).

out - w tym miejscu podajesz interfejs wyjścia na swiat.... w moim przypadku
eth0, ale może to być np. ppp+.
Chwilowo nie ma wersji na więcej niż jedno urządzenie... (na razie moje
sieci oparte są o jednego providera).

lan - w tej zmiennej musza znaleść się adresy IP, którym zostaną założone
kolejki. Im mniej tym lepiej więc pustych numerów nie wrzucać... U mnie
skrypt pobiera sobie to z plików...

srv - zewnętrzny IP serwera
srv_l - IP serwera w podsieciach LAN.... wpisujemy tyle IPków ile mamy
podsieci.

ile - to sobie wylicza skrypt sam, nie trzeba tego ruszać

Później seria ścieżek do przydatnych programików....
firewall - tu trzeba podać skryptowi jaką komendą restartuje się firewall

#u_r2q - jeśli odkomentowane - ustawia r2q na podaną wartość... najlepiej
zostawić wyłączone
u_quantum - ta wartość zależy od wielkości klas
w przyszłości będzie można też wyłączyć...1500 to dobry wpis.

porty_tcp - lista uprzywilejowanych portów tcp...
porty_udp - lista uprzywilejowanych portów udp...
pping - jeśli 1 to pingi idą  kolejką uprzywilejowaną

wan_dwl - rzeczywisty download jaki osiąga sieć minus 10-15kbit/s (tak, żeby
nie tworzyły się kolejki na interfejsie wyjścia na świat). Trzeba odpiąć
userów i sprawdzić jaki jest transfer. Jeśli dalej będą sytuacje wysokich
pingów można systematycznie to opuszczać... ale bez przesady... powód może
leżeć gdzieś indziej, a to co jest poza tą wartością jest obcięte.
wan_upl - i tu to samo.... tylko tym razem upload
ratio_d - jeśli chcemy, żeby użytkownik miał niższe pasmo niż ma
przepustowość naszego łącza można zmienić tą wartość... max jest wyliczany
tak: max=$(echo "$wan_dwl*$ratio_d" | bc)
ratio_u - to samo dla uploadu

srv_dwl - download serwera - minimalny zagwarantowany gdy sieć jest
obciążona - do tej wartości doliczana jest też reszta z dzielenia prędkości
łącza przez liczbę użytkowników, dlatego może zdarzyć się, że skrypt poda
większą liczbę... trzeba samemu spróbować dobrać tu wartości.
srv_upl - upload...

lan_dwl i lan_upl - należy zdefiniować tyle zmiennych w tablicy ile było
podanych IPków w zmiennej srv_l
Są to prędkości rzeczywiste osiągane w sieci LAN minus łacze dla
internetu... ten fragment skryptu będzie jeszcze lekko poprawiany. Dla
każdej podsieci
można ustawić inny maksymalny LANowski transfer (między userami a serwerem).
Jeśli router nie pełni funkcji serwera można to pominąć wpisując jakieś
wartości na oko. Podajemy wartości w kolejności IPków w zmiennej srv_l
(czyli 0 - download i upload dla pierwszego IP, 1 - download i upload dla
drugiego i tak dalej...). Jeśli jest więcej to trzeba dopisać zmiennych
oczywiście :d

Uff... to już koniec... Nie pozostaje nic innego jak wykonać testy. Polecam
przetestować to na jakimś komputerze. U mnie się sprawdza i jestem z tego
zadowolony. Ping nigdy nie jest wyższy od  80ms. Nawet jak wszyscy zajmą się
ssaniem.
--
Skrypt za pierwszym razem uruchamia się tak - ./htb1.4ext start
Każdy następny - ./htb1.4ext restart - nawet gdy wcześniej był zrobiony
stop.
To jest ważne, gdyż tylko restart czyści regułki w iptables.

Podgląd kolejek dostępny jest w ten sposób:
./htb1.4ext stat 192.168.0.2
./htb1.4ext stat lan
./htb1.4ext stat server
--
Jeszcze dwa zdania o tym czym różni się kolejka uprzywilejowana od
nieuprzywilejowanej...

W poprzednich skryptach nieuprzywilejowane maiły mniejsze pasmo... w tym
mają równe.
Różnica polega na tym, że uprzywilejowana ma pierwszeństwo w pożyczaniu
pasma...

Gdy była jedna kolejka pojawiał się kłopot - kazaa zapychała cały ruch i
użytkownik skarżyl się , że mu strony nie chodzą. (niedoskonałości sfq :P)
Gdy są dwie kolejki z różnymi priorytetami w momencie otwarcia www ruch na
nieuprzywilejowanych portach jest przycinany w zależności od potrzeby
kolejki uprzywilejowanej. Tym samym problem kazyy jest rozwiązany. Natomiast
dla www i ftp sfq się sprawdza i nie pozwala zatkać się ruchowi w kolejce
uprzywilejowanej. (taka natura Kazyy... za dużo połączeń próbuje
nawiązać...)

Czekam na opinie i uwagi od odważnych, którzy zainstalują.

--
Konrad

Attachment: htb1.4ext
Description: Binary data

Attachment: imq.tar.gz
Description: Binary data


Reply to: