QOS + L7 + Squid cache hit [INACTIVE]

BrazilFW pomoc, dyskusje forum w jezyku Polskim

QOS + L7 + Squid cache hit

Mensagempor jurek » Sáb Out 06, 2007 11:32 am

Ostatnio zrobiłem sobie skrypt do brazilfw. Łącze to DSL 4Mbit/s (DW: 4096 UP:512)
Może komuś się przyda. Aby wszystko ładnie działało wymagane jest mieć zainstalowane dodatek QOS L7 (http://dolly.czi.cz/coyote/ )
Najlepiej do tego jeszcze squid (viewtopic.php?t=59855)
Squid powinien byc skonfigurowany jako transparentny.
Cały skrypt jest przeliczony dla łącza 4Mbit, jeśli dysponujemy innym to trzeba przeliczyć niektóre wartości i pozamieniać. Ważne aby zrobić to mniej więcej tak jak jest poniżej.
Skrypt wklejamy w QOS Configuration > Edit Custom QOS Script
nastepnie zaznaczmy QOS Configuration > [zaznaczyc]Custom QOS Script

U mnie taka konfiguracja spisuje sie jak na razie najlepiej. Fajnie by było coś jeszcze poprawić, jak się tylko da.
Wcześniej były problemy ze squidem. Nawet jak było coś w cache to i tak nie dało się tego pobrać szybciej niż może łącze. Wykorzystałem L7 do rozpoznawania trafien w cache, nie jest to super rozwiązanie, jednak inaczej sie nie da. Squid w brazilfw nie ma markowania pakietow, iptables nie obsluguje wyrazen string, wiec można było to zrobić tylko za pomocą L7.
Prędkość pobierania danych ze squida ograniczyłem do 16Mbit/s, spowodowane jest to tym że przy większych wartościach komputer nie wyrabiał i potrafiło lekko przyciąć. Każdy ustawi w zależności jaki ma sprzęt.
Na dole skryptu jest jeszcze mała namiastka filtru antyspamowego oraz blokowanie niektórych wirusów.

Skrypt można by rozbudować o automatyczne przeliczanie transferu dla klas, ale na razie nie mam czasu.


Código: Selecionar todos
#!/bin/sh

TC=/usr/sbin/tc
IPTABLES=/usr/sbin/iptables
#TC="echo tc"
#IPTABLES="echo iptables"

# Nazwa interfejsu LAN
LAN=eth0
# Nazwa interfejsu WAN
WAN=eth1
# adres sieci
NETWORK=192.168.0.0/24
# IP serwera
SERVER=192.168.0.1

echo "0. Kasowanie starych klas i filtrow dla LAN i WAN"
echo "- kasowanie root"
$TC qdisc del dev $LAN root 2>/dev/null
$TC qdisc del dev $WAN root 2>/dev/null
echo "- kasowanie 1: 1:1 1:10"
$TC filter del dev $LAN parent 1:1 pref 100 2>/dev/null
$TC filter del dev $LAN parent 1: pref 100 2>/dev/null
$TC filter del dev $WAN parent 1:1 pref 100 2>/dev/null
$TC filter del dev $WAN parent 1: pref 100 2>/dev/null
$TC filter del dev $LAN parent 1:10 pref 100 2>/dev/null
$TC filter del dev $WAN parent 1:10 pref 100 2>/dev/null
$TC filter del dev $LAN parent 1: pref 50 2>/dev/null
$TC filter del dev $WAN parent 1: pref 50 2>/dev/null
$TC filter del dev $LAN parent 1:2 pref 100 2>/dev/null

echo "1.Tworzenie nowych klas"
echo "- tworzenie root DW 4096, UP 512"
$TC qdisc add dev $LAN root handle 1: htb default 102 r2q 10
$TC class add dev $LAN parent 1: classid 1:1 htb rate 3900kbit burst 16k
$TC qdisc add dev $WAN root handle 1: htb default 102 r2q 1
$TC class add dev $WAN parent 1: classid 1:1 htb rate 460kbit burst 8
echo "- tworzenie klasy 16mbit dla Squid cache_hit"
# squid cache hit class
# jesli jest cos w cache to pobierane jest wlasnie z ta predkoscia
$TC class add dev $LAN parent 1: classid 1:2 htb rate 16mbit burst 16k

echo "- tworzenie klasy 1:10 DW 3900, UP 460"
$TC class add dev $LAN parent 1:1 classid 1:10 htb prio 1 rate 3705kbit ceil 3900kbit burst 16k
$TC class add dev $WAN parent 1:1 classid 1:10 htb prio 1 rate 414kbit ceil 460kbit burst 8k
echo "- tworzenie klas priorytetow dla download"
$TC class add dev $LAN parent 1:10 classid 1:100 htb prio 0 rate 1800kbit ceil 3900kbit burst 16k
$TC class add dev $LAN parent 1:10 classid 1:101 htb prio 1 rate 1200kbit ceil 3900kbit burst 8k
$TC class add dev $LAN parent 1:10 classid 1:102 htb prio 2 rate 600kbit ceil 3900kbit burst 4k
$TC class add dev $LAN parent 1:10 classid 1:103 htb prio 3 rate 300kbit ceil 3900kbit burst 2k
$TC qdisc add dev $LAN parent 1:100 handle 100: sfq perturb 10
$TC qdisc add dev $LAN parent 1:101 handle 101: sfq perturb 10
$TC qdisc add dev $LAN parent 1:102 handle 102: sfq perturb 10
$TC qdisc add dev $LAN parent 1:103 handle 103: sfq perturb 10
echo "- tworzenie klas priorytetow dla upload"
$TC class add dev $WAN parent 1:10 classid 1:100 htb prio 0 rate 160kbit ceil 460kbit burst 8k
$TC class add dev $WAN parent 1:10 classid 1:101 htb prio 1 rate 128kbit ceil 460kbit burst 4k
$TC class add dev $WAN parent 1:10 classid 1:102 htb prio 2 rate 112kbit ceil 460kbit burst 2k
$TC class add dev $WAN parent 1:10 classid 1:103 htb prio 3 rate 60kbit ceil 256kbit burst 2k
$TC qdisc add dev $WAN parent 1:100 handle 100: sfq perturb 10
$TC qdisc add dev $WAN parent 1:101 handle 101: sfq perturb 10
$TC qdisc add dev $WAN parent 1:102 handle 102: sfq perturb 10
$TC qdisc add dev $WAN parent 1:103 handle 103: sfq perturb 10

echo "2. Tworzenie filtrow przechwytujacych zaznaczone pakiety"
echo "- LAN (1100, 1101, 1102, 1103)"
$TC filter add dev $LAN parent 1: protocol ip handle 1100 pref 50 fw classid 1:100
$TC filter add dev $LAN parent 1: protocol ip handle 1101 pref 50 fw classid 1:101
$TC filter add dev $LAN parent 1: protocol ip handle 1102 pref 50 fw classid 1:102
$TC filter add dev $LAN parent 1: protocol ip handle 1103 pref 50 fw classid 1:103
#Squid HIT
$TC filter add dev $LAN parent 1: protocol ip handle 1000 pref 50 fw classid 1:2
echo "- WAN (2100, 2101, 2102, 2103)"
$TC filter add dev $WAN parent 1: protocol ip handle 2100 pref 50 fw classid 1:100
$TC filter add dev $WAN parent 1: protocol ip handle 2101 pref 50 fw classid 1:101
$TC filter add dev $WAN parent 1: protocol ip handle 2102 pref 50 fw classid 1:102
$TC filter add dev $WAN parent 1: protocol ip handle 2103 pref 50 fw classid 1:103

echo "3. Tworzenie filtrow ACK, ICMP, DNS, default"
#ACK
$TC filter add dev $LAN protocol ip parent 1: pref 100 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:100
$TC filter add dev $WAN protocol ip parent 1: pref 100 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:100
#ICMP
$TC filter add dev $LAN protocol ip parent 1:  prio 1 u32 match ip protocol 1 0xff flowid 1:100
$TC filter add dev $WAN protocol ip parent 1:  prio 1 u32 match ip protocol 1 0xff flowid 1:100
#DNS
$TC filter add dev $LAN protocol ip parent 1: pref 100 u32 match ip dport 53 0xffff flowid 1:100
$TC filter add dev $WAN protocol ip parent 1: pref 100 u32 match ip sport 53 0xffff flowid 1:100
#default
$TC filter add dev $LAN protocol ip parent 1: pref 100 u32 match ip dst 0.0.0.0/0 flowid 1:102
$TC filter add dev $WAN protocol ip parent 1: pref 100 u32 match ip src 0.0.0.0/0 flowid 1:102

echo "4. Markowanie pakietow L7"
$IPTABLES -F PREROUTING -t mangle
$IPTABLES -A PREROUTING -t mangle -s $NETWORK -j MARK --set-mark 10
$IPTABLES -F OUTPUT -t mangle
$IPTABLES -F l7-filter -t mangle
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -m layer7 --l7proto edonkey -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -m layer7 --l7proto edonkey -j MARK --set-mark 2103
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -m layer7 --l7proto bittorrent -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -m layer7 --l7proto bittorrent -j MARK --set-mark 2103
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -m layer7 --l7proto skypeout -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -m layer7 --l7proto skypeout -j MARK --set-mark 2101
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -m layer7 --l7proto skypetoskype -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -m layer7 --l7proto skypetoskype -j MARK --set-mark 2101

#squid cache hit
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -m layer7 --l7proto httpcachehit -j MARK --set-mark 1000
echo "4. Markowanie pakietow po portach"

echo "- LFS game(29339,63392)"
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p tcp  --sport 63392 -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p tcp --dport 63392 -j MARK --set-mark 2101
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p udp  --sport 63392 -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p udp --dport 63392 -j MARK --set-mark 2101
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p tcp  --sport 29339 -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p tcp --dport 29339 -j MARK --set-mark 2101
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p udp  --sport 29339 -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p udp --dport 29339 -j MARK --set-mark 2101
echo "- EMULE (4662,4672)"
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p tcp  --sport 4662 -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p tcp --dport 4662 -j MARK --set-mark 2103
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p udp  --sport 4672 -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p udp --dport 4672 -j MARK --set-mark 2103
echo "- TORRENT (6881:6889)"
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p tcp  --sport 6881:6889 -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p tcp --dport 6881:6889 -j MARK --set-mark 2103
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p udp  --sport 6881:6889 -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p udp --dport 6881:6889 -j MARK --set-mark 2103

echo "5. Blokowanie trojanow i wirusow"
$IPTABLES -A l7-filter -t mangle -p tcp -m multiport --dports 135,137,138,139,445  -j DROP
$IPTABLES -A l7-filter -t mangle -p udp -m multiport --dports 135,137,138,139,445  -j DROP

echo "6. Aktywacja antyspamu"
# troche niezbyt ladny sposob na pozbycie sie problemu wysylania spamu
# wystarczy tylko pogadac z userami jakiej poczty uzywaja
# proste i skuteczne, na razie dziala.
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.poczta.onet.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.poczta.gazeta.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.tlen.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst poczta.strefa.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst poczta.fm -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst poczta.vip.interia.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.wp.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.o2.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.gmail.com -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25  -j DROP

jurek
 

Mensagempor neo@ » Sáb Out 06, 2007 3:24 pm

Witam ze quidem roznie bywa ja go uzywam od roku i rozna jazda z nim bywa ale przewaznie element znajdujacy sie juz w cache lecial z max ustalona predkoscia w qos (domyslna konfiguracja) w manualnej nietrzymal klas.Skrypt wyproboje tylko mam maly problem ze zmiennymi
$ mogl bys mi pomoc na GG 5334811 jestem zawsze wieczorem z gory dzieki :D
neo@
 

Mensagempor jurek » Sáb Out 06, 2007 4:09 pm

Ze squidem miałem wcześniej różne problemy. Albo nie ograniczał transferu i wysyłaniem poczty przez www można było zawalić całe łącze. Albo transfer był limitowany wzorowo, po za tym że nawet jak coś było w cache to też przycinało transfer.
Moja konfiguracja, przynajmniej testy wskazują na to że rozwiązuje problem.
Co do GG to nie posiadam, wiec pisz na forum.
jurek
 

Mensagempor neo@ » Dom Out 07, 2007 12:36 pm

Zgadza sie :) dzis wrzucilem twoj kod i znacznie lepiej dobra robota, jescze tylko musze dodac linijke dotyczaca CS i paru innych gierek ale jak fajnie dziala teraz squid , co do GG to zawsze szybszy kontakt ;-)
neo@
 

Mensagempor jurek » Qua Out 10, 2007 1:30 pm

Znalazłem jeden problem.
Código: Selecionar todos
#squid cache hit
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -m layer7 --l7proto httpcachehit -j MARK --set-mark 1000

Okazuje się że pakiety z internetu zawierają nieraz już znacznik http cache hit, mimo że nie ma tego w cache squida leci taki pakiet bez ograniczeń.
Trzeba tą linijkę zamienić na:
Código: Selecionar todos
$IPTABLES -A l7-filter -t mangle -o $LAN -s $SERVER -d $NETWORK -m layer7 --l7proto httpcachehit -j MARK --set-mark 1000
jurek
 

Mensagempor neo@ » Qui Out 11, 2007 12:41 pm

zph tos patch by sie przydal do squida bylo by znacznie prosciej obecnie jestem na etapie edycji domyslnej qos (zawarte jest tam automatyczne przydzielanie traficu na poszczegolnych klasach) osobiscie udalo mi sie juz wyizolowac ACK ICMP i dac to poza kolejkami, z proxy moze z tym patch-em moze sie uda odizolowac to co leci z proxy.
neo@
 

Mensagempor jurek » Qui Out 11, 2007 3:20 pm

Aktualnie pracuje nad tiny gentoo, najnowszy kernel, najnowsze programy. Wydaje mi sie ze bedzie to najlepsze rozwiazanie. W brazilfw duzo brakuje nowosci.
jurek
 

Mensagempor madoxx » Qui Nov 29, 2007 1:56 pm

pracujesz nad tym to jakiś twoj projekt, czy pracujesz nad nim bo masz go u siebie jako serwer ?

cos wiecej info o tej dystrybucji ?
madoxx
 

Mensagempor jurek » Qui Nov 29, 2007 11:01 pm

Z powodu braku czasu musialem przerwac prace nad tinygentoo :(
Poczatkowo wygladalo wszystko bardzo obiecujaco, jednak w praniu  okazywalo sie ze jakas funkcja nie dziala tak jak powinna itp... BrazilFW jest lepiej przetestowany i puki co przy nim zostaje. Po za tym chyba lepiej sie przylaczyc do wiekszego projektu niz jak kazdy by sobie cos tam amatorsko robil.
jurek
 


Voltar para Polish Forum

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes