Wymagania względem systemu
- htb + sfq + filtr u32 ( U32 classifier )
- iptables
- iproute2
- dla method MARK: filtr fw ( Firewall based classifier ), obsługa MARKowania pakietów w iptables.
- dla method IMQ: IMQ w kernelu, obsługa celu IMQ w iptables.
Instalacja
1.# mkdir niceshaper
2.# cd niceshaper
3.Pobieramy
niceshaper-0.5.1.tar.bz2 do własnie utworzonego katalogu.
4.# bunzip2 niceshaper-_wersja_.tar.bz2
5.# tar xf niceshaper-_wersja_.tar
6.# g++ niceshaper.cpp -o niceshaper
7.# chmod u+x niceshaper
8.# mv niceshaper /usr/local/bin
9.# cp -R etc/niceshaper /etc
Konfiguracja
Plik konfiguracyjny, na przykładzie łącza DLS 1Mbit/256Kbit z TPSA.
- konfiguracja w pliku /etc/niceshaper/config, dzieli się na 3 sekcje, 2 specyficzne dla pasm odpowiednio wychodzącego oraz wchodzącego,
i sekcja globalna mająca wpływ na ogólny sposób działania.
- konfiguracja składa się z
"dyrektyw głownych",
"dyrektyw pomocniczych" oraz
"parametrów".
- każda linia konfiguracji musi rozpoczynać sie od dyrektywy głównej.
- jeśli w ramach danej dyrektywy głównej istnieje kilka różnych dyrektyw pomocniczych mogą one zostać zapisane w jednej linii lub rozbite.
- nie wolno rozbijać dyrektywy iface.
- jednostki przepustowości to bps, kbps, mbps ( bajty na sekundę ) lub bit, kbit, mbit ( bity na sekundę ).
- jednostki domyślnie to kbit ( kilobit na sekunde ).
- dozwolone jest hashowanie dyrektyw, za pomocą znaku '#'.
- poniższa konfiguracja i dostarczona z pakietem są tylko przykładem i nie są optymalne.
<global>
iface inet eth0 80.53.211.226/29
iface local eth1 192.168.0.1/24
do not shape local 80.53.211.226 with 192.168.0.0/24
do not shape local 192.168.0.1 with 192.168.0.0/24
shape router true low 8kbps ceil 14kbps prio 2
stats unit kbps dump 5c file /var/www/stats/nsstats.txt
resolve hostname true
method mark
reload 4s
</global>
<download>
link speed 125kbps shape 110kbps
user low 0kbps ceil 100kbps strict 70%
interactive rate 10kbps ceil 10kbps
interactive srcport 22,27960 dstport 22,27960
interactive srcip 208.231.90.235
interactive u32 match ip tos 0x10 0xff
policy dynamic
</download>
<upload>
link speed 32kbps shape 25kbps
user low 0kbps ceil 12kbps strict 70%
interactive rate 0kbps ceil 0kbps
interactive srcport 22,27960 dstport 22,27960
interactive dstip 208.231.90.235
policy dynamic
</upload>
iface {inet|local} dev ip/maska - interfejs sieciowy, oraz IP mu przypisane wraz z maską sieci.
{inet} - interfejs zewnętrzny ( internetowy ).
{local} - interfejs wewnętrzny.
- dla dynamicznie przyznawanego adresu interfejsu internetowego ( np. Neostrada ) wyrażenie ip/maska zastępujemy słowem auto
- konfigurując alias interfejsu podajemy jedynie nazwę interfejsu fizycznego, iptables oraz iproute nie rozróżnia aliasów.
do not shape local ip/maska with ip/maska - dzięki tej dyrektywnie nie ograniczamy transferów lokalnych.
- transfery między serwerem a siecią lokalną definiujemy jak w przykładzie.
- IP zewnętrzne występuje tu jeśli nie chcemy także
ograniczać lokalnie dostępu do usług nasłuchujących na zewnętrznym interfejsie.
- jeśli posiadamy 2 lub więcej interfejsów lokalnych, musimy wszystkie interesujące nas kombinacje zdefiniować w kolejnych liniach.
- oczywiście bez użycia IMQ, ruch przychodzący z sieci lokalnej do servera nie jest ograniczany.
- adres servera możemy zastąpić nazwą interfejsu, np. jeśli mamy automatycznie pobierany IP.
shape router {true|false} low 8kbps ceil 14kbps prio 2
- definiuje czy chcemy kontrolować pasmo własne naszego serwera/routera.
- z przyczyn technicznych możliwe jest jedynie kolejkowanie do internetu, nie mamy wpływu na tempo pobierania, nawet przy użyciu IMQ.
- raczej bardzo zalecane jeśli poza udostępnianiem łącza, uruchamiamy jednocześnie dostępny z internetu serwer www czy poczty,
by jego popularność nie utrudniała korzystania z internetu naszym własnym użytkownikom.
- drugą bardzo ważną cechą jest zliczanie całego ruchu do/z internetu z transferami serwera włącznie,
którego brak odbijać się będzie na złym skalowaniu przydziałów, nieadekwatnym do aktualnego całkowitego obciążenia łącza.
stats - wyświetlanie statystyk pracy.
{unit} - jednostki przepustowości.
{dump} - samodzielne zrzucanie statystyk co Xc cykli. Cykl to jedno przeliczenie definiowane przez reload.
{file} - zrzut będzie wykonywany do wskazanego pliku.
method {none|mark|imq}- definiuje sposób obsługi pasma. Ważne dla ruchu wychodzącego ( upload ).
- none- nie stosuje żadnych dodatkowych zabiegów do kontroli pasma. Nie poradzi sobie z maskaradą. Idealne dla sieci z publiczną adresacją IP.
- mark - opiera się na markowaniu pakietów przez iptables.
- imq - używa interfejsów wirtualnych IMQ. Idealnie obsługuje kilka interfejsów lokalych, i pasmo wychodzące przy maskaradzie.
reload 4s- taktowanie, w sekundach.
- wartość domyślna 4s jest bezpieczna i w miarę efektywna dla każdej maszyny klasy pentium I.
- na maszynach z szybszym procesorem warto zwiększyć częstotliwość wykonywania nawet do 2s, co wyraźnie zwiększa interaktywność.
resolve hostname {true|false} - stats wyświetla nazwy hostów, nie IP.
link - parametry pracy naszego łącza.
{speed} - wydajność pasma.
{shape} - poziom na jakim chcemy utrzymać obciążenie naszego łącza.
- ważne by dobrać wartość przynajmniej o kilkanaście procent mniejszą od faktycznej wydajności naszego łącza.
Jeśli zbyt wysoko ustawimy ten parametr, pojawią się "lagi", możemy je zlikwidować przez wydzielenie części pasma dla ruchu priorytetowego,
lecz osobiście wole rezygnować z pasma priorytetowego na rzecz dokładnego wyskalowania tego parametru,
co jest uniwersalniejsze i nie marnujemy części pasma jeśli priorytety nie są wykorzystywane. Niestety by pograć trzeba wyłączyć kaaza:)
- jeśli realnie obciążenie nie będzie sięgać tej wartości, NiceShaper nie będzie spełniał swojej roli, użytkownicy dostaną
maksymalne przydziały. Dla NiceShapera jednym z sygnałów do "obcinania", jest właśnie wykrycie przekroczenia tej wartości.
user - sposób traktowania użytkowników.
{low} - minimalny przydział
{ceil} - maksymalny przydział.
{strict} - wartość w procentach { 0% - 100% },
definiujemy jak bardzo nie lubimy przeginających.
- wartości niskie będą skutkowały bardziej restrykcyjnym traktowaniem delikwentów.
- wartości bliskie 100% przy przeciążeniu łącza, "współodpowiedzialnością ogółu".
interactive - wydzielone, niezależne i mające priorytet nad pasmem ogólnym pasmo priorytetowe.
{rate} - pasmo jakie przeznaczamy dla ruchu priorytetowego.
{ceil} - ceil przekazywane bezpośrednio do HTB, nie testowałem dokładnie celowości tego parametru,
HTB bardzo nieprzychylnie traktuje pasmo priorytetowe po przekroczeniu swojej przepustowości nawet gdy ceil jest ciągle wyższe.
{srcport} - port żródłowy pakietu priorytetowego, większą liczbę portów oddzielamy przecinkami.
{dstport} - port docelowy.
{srcip} - adres źródłowy.
{dstip} - adres docelowy.
{u32} - dowolny selektor filtru u32.
policy{off|dynamic} - polityka pasma.
- off - wyłącza sterowanie pasmem w danym kierunku.
- dynamic - standardowy tryb pracy, dynamicznie dzielący pasmo.
W pliku /etc/niceshaper/users muszą zostać umieszczone adresy IP wszystkich hostów w sieci,
oraz oddzielona spacją, nazwa interfejsu je obsługującego.
192.168.0.101 eth1
192.168.0.102 eth1
192.168.0.103 eth1
192.168.0.104 eth1 dl_ceil 50kbps
192.168.0.105 eth1 dl_rate 20kbps dl_prio 1
192.168.0.106 eth2 ul_low 3kbps ul_ceil 6kbps
192.168.0.107 eth2
- dodatkowe parametry pozwalają traktować poszczególne hosty nie zależnie, od ustawień globalnych.
- zapewnić żądane minimalne pasmo, lub utrudnić życie niereformowalnemu właścicielowi ftp.
- dl_low, ul_low - minimalny przydział
- dl_ceil, ul_ceil - maksymalny przydział
- dl_rate, ul_rate - stały przydział
- dl_prio, ul_prio - priorytet klasy w HTB, przyjmuje wartości między 0 a 7, czym niższa wartość tym wyższy priorytet. Domyślnie ma wartość 5.
HTB, IMQ i reszta
IMQ jest znów aktywnie rozwijane przez nowe grono developerów, strona domowa projektu:
http://www.linuximq.net/
Osobiście patch po zaaplikowaniu na kernel 2.4.25 nie sprawia mi problemów.
Orginalną wersje IMQ, mimo że skierowaną na kernel 2.4.21 można ciagle z powodzeniem używać z kernelami w wersji do 2.4.23.
W tym przypadku, bezpośrednio po spatchowaniu źródeł kernela należy w pliku:
/usr/src/linux/drivers/net/Makefile
najlepiej w okolicach linii 171 umieścić dyrektywę:
obj-$(CONFIG_IMQ) += imq.o
dalej postępujemy jak w przypadku starszych jąder.
Oto adres strony poprzedniego developera IMQ:
The intermediate queueing device
Z kernelem 2.4.24 nie testowałem żadnej z wersji IMQ.
Jeśli używasz Debiana Woody, twoje iproute nie będzie obsługiwać HTB!!
Odpowiednim pakietem w tej sytuacji wydaje się iproute z dystrybucji testowej sarge.
Kilka informacji na koniec
- NiceShaper nie obsługuje już i nie będzie obsługiwał CBQ.
Doszedłem do wniosku że jądra >= 2.4.20 są na tyle popularne,
że CBQ na którym opierałem się kiedyś, zostało bezpowrotnie zastąpione przez HTB.
Naprawdę nie mam ochoty do tego wracać, CBQ jest zbyt niedokładne,
i potrafi dzięki temu doprowadzić do bólu głowy.
- o ipchains nawet nie powinienem wspominać.... jeśli ktoś używa w miarę nowego kernela z HTB
to prawie na pewno używa też iptables. Jeśli nie... to najlepszy moment na przesiadkę.
|