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