Markowanie ruchu

W sieciach komputerowych bardzo waŜnym elementem zapewniającym komfort pracy jest bandwidth-manager. Urządzenie to ogranicza ruch jednego typu, najczęsciej by zrobić miejsce dla ruchu innego typu. JeŜeli nie zastosujemy kontroli pasma w najlepszym przypadku dojdzie do sytuacji, kiedy to jeden rodzaj ruchu będzie musiał na siłe wymusić swój przydział pasma z głównego łącza. W systemie MikroTik jest moŜliwość łatwego ograniczania przepustowości z uŜyciem kolejek prostych (simple queues). Niekiedy jednak istnieje konieczność zrobienia bardziej zaawansowanego podziału przepustowości - kształotwania ruchu z wykoŜystaniem drzewa kolejek (queue tree). Potrzeba ta, wystepuje przedewszystkim wtedy, kiedy chcemy mieć większą kontrole nad ruchem, chcemy róŜnie podchodzić do róŜnego rodzaju ruchu lub teŜ dawać priorytety i gwarantowac pasmo w/g naszych własnych załoŜeń.

Pierwszą czynnością jaką musimy wykonać jest markowanie ruchu. Markowanie jest to proces polegający na wirtualnym "oznaczeniu" (z ang. mark) danych które mają jakieś cechy charakterystyczny (np. adres ip źródła lub port docelowy) Chcąc kształotwać ruch dynamicznie dla grupy userów moŜemy to zrobić: • Po adresie IP - skuteczne w wypadku routingu i NAT'a • Po adresie MAC - skuteczne w wypadku przezroczystego bridge'a Dzisiaj zajmiemy się tym pierwszym - a mianowicie markowaniem po adresie IP uŜytkownika. Dla wygody w generowaniu duŜej ilości wpisów polecam stosowanie do tego skryptów. Aby korzystać ze skryptów naleŜy (winbox) wybrać z lewego menu: System -> Scrtipts W dalszej części raportu skrypty wykonwane przez wew. interpretator skryptów w systemie będziemy oznaczać "(skrypt)"

Później w nowym oknie kliknąć na symbol „+”

I zawartość skryptu wpisać do pola „Source”

Po zatwierdzeniu, zaznaczamy wybrany skrypt i klikamy na przycisk „Run Script”

Pierwszym skryptem który musimy wykonać jest : (skrypt)

:for x from 2 to 254 do={ /ip firewall mangle add chain=prerouting src-address=(192.168.0. . $x ) action=mark-packet new-packet-mark=( $x . upload ) passthrough=no }
to jest ruch, który wychodzi od usera (jego upload). Jak nie trudno się domyśleć Ŝeby zmienić klase adresową ze 192.168.0 naleŜy edytować wpis "src-address=(192.168.0. " waŜne jest zachowanie umiejscowienia kropek jak w przykładzie powyŜej. Podobnie rzecz się ma z zakresem od 2 do 254 - moŜemy to łatwo edytować wpisując satysfakcjonujące nas wartości (skrypt)

:for x from 2 to 254 do={ /ip firewall mangle add chain=postrouting dst-address=(192.168.0. . $x ) action=mark-packet new-packet-mark=( $x . download ) passthrough=no }
a to z kolei mark w kierunku internet -> user czyli jego download Przygotowania do ograniczania pasma 2. Utworzenie nowego typu kolejki (do stochastycznego podziału): wpisy poprzedzone (terminal) z kolei wykonujemy wprowadzając je z terminala:

(terminal)

/queue type add name="sfq" kind=sfq sfq-perturb=5 sfq-allot=1514
To ten element decyduje o algorytmie, dzięki któremu, będą się odbywały procesy “współdzielenia” pasma w obrębie jednej grupy/hierarchii

3. Utworzenie kolejki głownej W kolejce głównej dzieją się procesy czystego kształtowania ruchu zgodne z htb na zasadzie algorytmu określonego poprzez „typ kolejki”. Naszym celem jest ograniczanie pasma w systemie “Wejscie” <-> „Wyjście” zatem musimy utworzyć Kolejke główną (parent), która zajmie się oprócz kontroli swoich „dzieci” (children) odpowiednio na: • Interfejsie Zewnętrznym (Internet) – Kolejka kształtująca UPLOAD • Interfejsie Lokalnym (Lan) – Kolejka kształtująca DOWNLOAD Przy okazji skorzystamy z moŜliwości kontroli maksymalnego pasma dostępnego dla danego kierunku transmisji – w celu kontroli ew. naduŜyć globalnych.

(terminal)

/queue tree add name="Download" parent=Lan queue=sfq max-limit=1730k
Powstanie nowa kolejka, przyczepiona do interfejsu wewnętrznego Lan (terminal)

/queue tree add name="Upload" parent=Internet queue=sfq max-limit=1730k
Powstanie kolejka, przyczepiona do interfejsu zewnętrznego Internet Przykład zakłada uŜycie łącza symetrycznego POLPAK 2Mbps, jak widzimy wartość 2048Kbps została pomniejszona o około 10% - Ŝeby zapewnić poziom usług przy maksymalnym wysyceniu kolejki. Dla łączy DSL waŜne jest dodatkowe chronienie cennego uploadu – sugeruje zmniejszenie wartości maksymalnej (realnej) nawet o 30% Kolejki Mając kolejki główne (parent) jedyne co wystarczy zrobić to przykleić do nich poszczególnych abonentów – by ci w ramach odpowiednich priorytetów dzielili swoje pasmo. Odpowiednie skrypciki załatwiają sprawę szybko i skutecznie dla całego zakresu od 2 do 254.

(skrypt)

:for z from 2 to 254 do={ /queue tree add parent=Download packet-mark=( $z . download ) limit-at=32000 queue=sfq priority=7 max-limit=256000 }
Skrypt wygeneruje 254 kolejki, kaŜda z nich ograniczy download dla pojedynczego marka (czyli de-fakto adresu IP) gwarantując mu pasmo 32Kbps i ograniczając do 256Kbps, gwarancja będzie w tym układzie polegała na zliczeniu dwóch wirtualnych kolejek – jedna licząca limit-at (prędkość gwarantowana), druga licząca max-limit (prędkość maksymalna), z załoŜeniem Ŝe kolejka limit-at będzie szła osobnym wyŜej priorytetyzowanym torem – do momentu przekroczenia wartości limit-at. Po przekroczeniu limit-at wartość priorytetu jest ignorowana (równa najniŜszej, czyli 8) zatem uŜytkownicy zapychający łącze w momencie będą niemalŜe ignorowani jeŜeli nowy uŜytkownik będzie miał ochotę wykorzystać do 32Kbps pasma – zapewniając w miarę równe rozłoŜenie łącza i przede wszystkim odpowiedni poziom dostępu do usług. Wartość limit-at powinna odpowiadać wartości rzeczywistej łącza podzielonej przez liczbę uŜytkowników razy współczynnik jednoczesności (ok. 3) (skrypt)

:for b from 2 to 254 do={ /queue tree add parent=Upload packet-mark=( $b . upload ) limit-at=32000 queue=sfq priority=7 max-limit=220000 }
Jeszcze tylko Upload, zalecam oszczędzanie uploadu, nawet dla łączy symetrycznych – nowe programy p2p potrafią korzystając z wad algorytmów htb i innych, impulsowo wymuszać większą ilość ruchu aniŜeli pozwala na to kolejka – takie zjawisko łatwo opanowac zmniejszając maksymalną wartość uploadu. Po zakończeniu nasze kolejki powinny wyglądać mniejwięcej tak: (jest to przykład z działającego routera, skonfigurowanego analogicznie z niewielkimi róŜnica mi)

Modyfikacje, ulepszanie, usprawnianie

MoŜemy wyrzucić z marku ruch ICMP – przydatne jeŜeli chcemy zapewnić dobre “pingi” niezaleŜnie od wysycenia łącza i indywidualnych kolejek userów. W tym celu musimy dodać na samym początku (przed innymi regułkami w /ip firewall mangle) (terminal)

/ip firewall mangle add chain=prerouting protocol=icmp action=accept
Regułka ta “wybije” ruch ICMP z reszty zamanglowanych regułek MoŜemy teŜ stosując kilka róŜnych marków dla kaŜdego usera, ustawić indywidualnie ilość ruchu danego typu jaką uŜytkownik moŜe operować. Niemniej jednak naleŜy pamiętać, Ŝe duŜa liczba wpisów niekoniecznie jest dobra. Wszystko zaleŜy od generowanego ruchu i mocy obliczeniowej maszyny. Testowa maszyna oparta o procesor Pentium III 1000MHz bezproblemu radziła sobie z ruchem 1000 uŜytkowników, aczkolwiek zrezygnowalismy wtedy z wielu dodatkowych funkcji takich jak connection tracking i rozbudowany firewall - tworząc praktycznie przezroczysty bandwidtch-manager. PoniewaŜ w wersji systemu RouterOS 3.0 jest moŜliwośc koŜystania z wielowątkowości, teoretycznie dodatkowy procesor powinien zwiększyć wydajność dwukrotnie - ale nie liczył bym na to tak bardzo. Do kształtowania ruchu za pomocą Mikrotika najlepiej sprawują się mocne maszyny jednojądrowe ze stajni Intel'a.

Sign up to vote on this title
UsefulNot useful