Squid imq i niceshaper 0.6rc4.1 – poprawne działanie - rozwiązanie
Wersja poprawiona.

. Poprzednia miała błąd w kolejności uruchamiania sekcji w pliku config – bardzo ważne ze względu na kolejność tworzonych reguł – wycinek pliku iptables.rules (te 2 poniższe wpisy dodaje po uruchomieniu sam niceshaper - nie wpisujemy ich do firewalla

):
-A POSTROUTING -d 10.10.0.0/255.255.255.224 -j ns_squid
-A POSTROUTING -d 10.10.0.0/255.255.255.224 -j ns_download
Poprzednio było odwrotnie.
Wielu uważa że niemożliwym jest pogodzenie niceshapera z imq działającego z squidem. Mają rację (ale nie do końca

). Jest tak kiedy chcemy utworzy klasę w tej samej sekcji w której następuje przekierowanie pakietów na wirtualny interfejs np. Download (chociaż tworzymy klasę na prawdziwym interfejsie) np.:
class download eth0 squid
match from localhost srcip 10.10.0.1 dstip 10.10.0.0/27 proto tcp tos 0x8
do-not-shape
#tutaj nawet jak ustawimy imq autoredirect false to i tak klasa zostaje ograniczona (szybkość klasy Kwiatek - sprawdzone i zmierzone

)
class download imq0 Kwiatek
match dstip 10.10.0.4
low 320kbit
ceil 768kbit
class upload imq1 Kwiatek
match srcip 10.10.0.4
low 40kbit
ceil 96kbit
Rozwiązaniem okazuje się utworzenie dodatkowej sekcji w pliku config (nazwałem ją squid) operującej na interfejsie rzeczywistym eth0 (dodałem też opcje default imq autoredirect false – profilaktycznie

) :
<global>
run download upload squid
#tutaj zmieniłem ważna jest kolejność uruchamiania kolejnych sekcji
support mark-on eth0
#tylko na interfejsie rzeczywistym w przypadku markowania na imq kolejne ip z klasy nie jest ograniczane
stats file /var/www/stats/nsstats.txt unit kb/s owner root group root mode 644
</global>
<squid>
iface eth0 match dstip 10.10.0.0/27
# iface eth0 match dstip 10.10.0.0/27
default imq autoredirect false
section speed 1024kB/s
section shape 1000kB/s
default low 125kB/s
default ceil 256kB/s
default htb prio 5
# default overtake 20kB/s
default hold 600s
default htb scheduler esfq
default esfq hash dst
# debug iptables iproute
iptables insert-hook POSTROUTING
# insert-hook - reguła zostaje wstawiona na początek wskazanego łańcucha. ,,cytat”
#wystarczyłoby tylko dać ją tutaj a w download i upload zostawić ustawienie standardowe czyli:
# iptables hook POSTROUTING
reload 1s
#czas odświeżania sekcji squid warto ustawić na dość niski
#ze względu na to że klasa może nie zdążyć utworzyć się a transfer www
#lokalny pójdzie klasą imq – potwierdzone pomiarami przy
#transferze z
www.wp.pl z włączonym adblockiem
</squid>
<download>
iface imq0 match dstip 10.10.0.0/27
# iface eth0 match dstip 10.10.0.0/27
default imq autoredirect true
section speed 230kB/s
section shape 200kB/s
default low 1kB/s
default ceil 2kB/s
default htb prio 5
# default overtake 20kB/s
default hold 600s
default htb scheduler esfq
default esfq hash dst
# debug iptables iproute
iptables insert-hook POSTROUTING
reload 3s
</download>
<upload>
iface imq1 match srcip 10.10.0.0/27
# iface eth0 match srcip 10.10.0.0/27
default imq autoredirect true
section speed 26kB/s
section shape 24kB/s
default low 1kB/s
default ceil 2kB/s
default htb prio 5
# default overtake 3kB/s
default hold 600s
default htb scheduler esfq
default esfq hash src
# debug iptables iproute
iptables insert-hook PREROUTING
reload 2s
</upload>
Jak widać sekcja squid jest ograniczana – mi się to przydaje ponieważ używam wi-fi.
A teraz zawartość pliku class (kolejność jest ważna):
class squid eth0 squid_Kwiatek
match from localhost srcip 10.10.0.1 dstip 10.10.0.16 proto tcp tos 0x8
class download imq0 Kwiatek
match dstip 10.10.0.16
low 40kB/s
ceil 96kB/s
class upload imq1 Kwiatek
match srcip 10.10.0.16
low 6kB/s
ceil 12kB/s
W taki oto sposób można pogodzić squida z niceshaperem pracującym na wirtualnych interfejsach imq. Squid w takim przypadku przesyła dane lokalnie z szybkością 2048kb (ograniczenie dla wi-fi i dysku serwera

- zmierzone i sprawdzone). Pozdrawiam wszystkich i życzę Wesołych Świąt i Szczęśliwego Nowego Roku.
Ps. Poniżej podaje link potwierdzający poprawne działanie powyższych ustawień.
Ps2. Przepraszam za pierwsza wersje która nie działała do końca
Aby wszystko działało jak należy musimy zastosować się do poniższych reguł:
Po pierwsze dajemy suport-mark tylko na eth0 - to w przypadku NEOSTRADY w przypadku DSL-a eth1 lub tak jak macie łącze skonfigurowane

.
Po drugie ważna jest kolejność uruchamiania sekcji (squid na końcu) i to żeby sekcja SQUID znalazła się na początku łańcucha do tego służy opcja iptables insert-hook POSTROUTING.
Dodatkowo w iptables trzeba przekierować ruch www na port 8080 lub 3128 w zależności jaki ustawiliśmy dla squida bez tego przekierowania żaden pakiet nie pójdzie nam lokalnie

Aha i najważniejsze w konfiguracji squida ustawiamy go jako transparentny i znaczymy pakiety lokalnie lecące tos 8.
Mały test za pomocą tc-viewera:
Plik ściągany z serwera dobreprogramy.pl – cache squida wyczyszczony. Plik idzie interfejsem wirtualnym imq0.
Ten sam plik ściągany po raz drugi (cache przeglądarki wyczyszczony) idzie klasą zadeklarowaną w sekcji squid (idzie lokalnie 2Mb na eth0).
Link do przykładowej konfiguracji niceshapera - gotowe pliki class i config:
http://file4u.pl/download/300241/niceshaper.tar.gz
I to by było na tyle
