Problem z htb - duże pingi

Konfiguracja serwerów, usług, itp.
patryk83
Posty: 1
Rejestracja: 26 września 2007, 11:05

Problem z htb - duŻe pingi

Post autor: patryk83 »

Witam
Mój problem polega na tym, że mam dwa skrypty htb do upload i download są ustawione (myślę, że dobrze) pod moje łącze. Niby działają bo ucinają DL na komputerach ale niestety pingi są tak, duże, że nawet z tymi skryptami nie da się grać przy włączonym ściąganiu na którymś z komputerów.
£ącze które posiadam to 2mbit/256kbps. Linux na Debianie serwerem, a komputery w sieci na Windowsach :)
Oto skrypty z których korzystam:

Kod: Zaznacz cały

# Dane globalne skryptu:
#!/bin/sh
# download

# polecenie tc do manipulacji kolejkami...
TC="/sbin/tc"

# Interfejs wyjsciowy..np eth0 eth1 czy co tam... tutaj interfejs dla klientow sieci
IF="eth0"
#IF="bridge"

# pelna predkosc interfejsu
# tutaj mam 4190kbit (siec 802.11b - praktycznie uzyskiwane u mnie predkosci)
IFSPEED="100000kbit"

# predkosc sciagania z internetu, predkosc sieci lokalnej po odjeciu predkosci internetu
# ogolnie mamy (DSLSPEED + LANSPEED) ma sie rownac IFSPEED lub byc od niej mniejsze
DSLSPEED="1950kbit"
LANSPEED="98000kbit"

# Wyliczamy predkosc na uzytkownika
# USERPSEED=DSLSPEED/ilosc_uzytkownikow
USERSPEED="666kbit"

# ADRESY serwera i uzytkownikow:
SERVER="192.168.1.1"
USER1="192.168.1.2"
USER2="192.168.1.3"
USER3="192.168.1.4"
USER4="192.168.1.5"
USER5="192.168.1.6"

#################### koniec globalnych danych ######################
# sekcja skryptu

echo "$0 start"

# czyscimy pozostalosci
$TC qdisc del root dev $IF
$TC qdisc add dev $IF root handle 1:0 htb

# zakladamy glowna kolejke na interfejs
# rate = predkosc gwarantowana kolejki
# ceil = predkosc maksymalna kolejki (w przypadku dynamicznego przydzialu to granica predkosci dla kolejki)
# pelna predkosc interfejsu...
# classid = nazwa kolejki
$TC class add dev $IF parent 1:0 classid 1:1 htb rate $IFSPEED ceil $IFSPEED

# kolejka na internet - stala predkosc kolejki rate=ceil
# parent=ktora kolejke rozgaleziamy? w tym wypadku to podkolejki kolejki glownej, ktora wyzej zalozylismy..
$TC class add dev $IF parent 1:1 classid 1:2 htb rate $DSLSPEED ceil $DSLSPEED
#kolejka na lanowe polaczenia z serwera (klient sciaga po ftp z serwera etc..)
$TC class add dev $IF parent 1:1 classid 1:3 htb rate $LANSPEED ceil $LANSPEED

# kolejki uzytkownikow na internet
# wazne zauwazyc, ze rozgaleziaja kolejke internetu (1:2)
# kazdy user ma gwarantowane USERSPEED jednak jego maksymalna szybkosc jest limitowana do DSLSPEED
$TC class add dev $IF parent 1:2 classid 1:4 htb rate $USERSPEED ceil $DSLSPEED
$TC class add dev $IF parent 1:2 classid 1:5 htb rate $USERSPEED ceil $DSLSPEED
$TC class add dev $IF parent 1:2 classid 1:6 htb rate $USERSPEED ceil $DSLSPEED
$TC class add dev $IF parent 1:2 classid 1:7 htb rate $USERSPEED ceil $DSLSPEED
$TC class add dev $IF parent 1:2 classid 1:8 htb rate $USERSPEED ceil $DSLSPEED

### filtry - kieruja odpowiednie dane do kolejek ###

# wszystkie polaczenia, ktore nawiazano z serwerem (np z jego wlasnym FTP) powinny trafic do kolejki na lan
# priorytet = w htb ostatnia pasujaca regula wygrywa dlatego warto nadac wlasny priorytet regulom
# im mniejsza liczba tym lepszy priorytet i waznosc reguly
# wszystkie polaczenia, gdzie zrodlem jest adres IP serwera zostaja skierowane do kolejki o nazwie 1:3 <- kolejkna lan
$TC filter add dev $IF protocol ip prio 1 parent 1:0 u32 match ip src $SERVER flowid 1:3

# filtry uzytkownikow
# jesli nie serwer nawiazal polaczenie, to uznajemy, ze to polaczenie z internetu
# jesli adres docelowy to adres klienta1 to dane wrzucamy mu do jego wlasnej kolejki
# tutaj mozna grupowac ludzi, np kilka adresow IP wrzucic do jednej kolejki...
# w rozwiazaniu jest 1 IP jedna kolejka
$TC filter add dev $IF protocol ip prio 2 parent 1:0 u32 match ip dst $USER1 flowid 1:4
$TC filter add dev $IF protocol ip prio 2 parent 1:0 u32 match ip dst $USER2 flowid 1:5
$TC filter add dev $IF protocol ip prio 2 parent 1:0 u32 match ip dst $USER3 flowid 1:6
$TC filter add dev $IF protocol ip prio 2 parent 1:0 u32 match ip dst $USER4 flowid 1:7
$TC filter add dev $IF protocol ip prio 2 parent 1:0 u32 match ip dst $USER5 flowid 1:8

### sfq
# sfq zapewnia sprawiedliwe dzielenie kolejki przez wiele polaczen
# np gdy uzytkownik otworzy jedna sesje sciagania z netu to mialby max predkosc kolejki
# jesli uruchomi drugie to sfq sprawi, ze te pasmo zostanie rozdzielone na 2 sprawiedliwie
# takze uzytkownik ma sprawiedliwosc w tym co dostaje na wlasnych polaczeniach.

# na lan nalozona dyscyplina - przeciez kilka osob na raz moze sciagac - chcemy zeby mieli po rowno
$TC qdisc add dev $IF parent 1:3 handle 3:0 sfq perturb 10

# dyscypliny userow
$TC qdisc add dev $IF parent 1:4 handle 4:0 sfq perturb 10
$TC qdisc add dev $IF parent 1:5 handle 5:0 sfq perturb 10
$TC qdisc add dev $IF parent 1:6 handle 6:0 sfq perturb 10
$TC qdisc add dev $IF parent 1:7 handle 7:0 sfq perturb 10
$TC qdisc add dev $IF parent 1:8 handle 8:0 sfq perturb 10

#EOF#

Kod: Zaznacz cały

#!/bin/sh
# upload

TC="/sbin/tc"
#interfejs wyjsciowy serwera (ten od netu)
IF="ppp0"
IFSPEED="248kbit"

# kolejka glowna - predkosci i priorytet
MAINSPEED="60kbit"
MAINPRIO="prio 1"

# gry
GAMESSPEED="120kbit"
GAMESPRIO="prio 2"

# server
SERVSPEED="35kbit"
SERVMAX=${IFSPEED}
SERVPRIO="prio 3"

# pozostale UWAGA zmniejszona szybkosc dynamiczna kolejki - nie lubimy wysylac do innych, chcemy zapas lacza przynajmniej w dzien.
OTHERSPEED="40kbit"
OTHERMAX="220kbit"
OTHERPRIO="prio 4"

# porty zrodlowe i docelowe dla glownej kolejki
MAIN_DPORTS="22 25 53 80 110 443 1550 2796 8074 1911 4569 8000 5222 5223 5269 33434 11111 22222"
MAIN_SPORTS="22 53"
# dla gier...
GAMES_DPORTS="2796 3658 5003 27960 27961 27015 6112 6113 6114 6115 6116 6117 6118 6119 16567 17567 27015 27910 23400 28960 28961"
# i serwera
SERV_SPORTS="21 25 80 110 6667 49022"

#### skrypt #####
echo "$0 start"

$TC qdisc del root dev $IF
# r2q - rate to quantum - przelicznik dla htb, GDY MAMY MALY UPLOAD TRZEBA GO ZMNIEJSZYC do np 1. Standardowo jest 10 i pomija sie
# default 5 = wszystko co w filtrach nie zostanie skierowane do ktorejs kolejki zostanie automatycznie skierowane do kolejki 1:5
$TC qdisc add dev $IF root handle 1:0 htb r2q 1 default 5

$TC class add dev $IF parent 1:0 classid 1:1 htb rate $IFSPEED ceil $IFSPEED

# dodane tylko priorytety "sciagania nadmiarow niewykorzystanych przez inne kolejki"
$TC class add dev $IF parent 1:1 classid 1:2 htb rate $MAINSPEED ceil $IFSPEED $MAINPRIO
$TC class add dev $IF parent 1:1 classid 1:3 htb rate $SERVSPEED ceil $SERVMAX $SERVPRIO
$TC class add dev $IF parent 1:1 classid 1:4 htb rate $GAMESSPEED ceil $IFSPEED $GAMESPRIO
$TC class add dev $IF parent 1:1 classid 1:5 htb rate $OTHERSPEED ceil $OTHERMAX $OTHERPRIO

# kolejka glowna
# icmp chcemy takze tu wrzucac (male pingi=fajna rzecz)
$TC filter add dev $IF protocol ip parent 1:0 u32 match ip protocol 1 0xff flowid 1:2

# dport= destination port - port docelowy polaczenia
# 0xffff = nie patrzec na TOS pakietow...
for i in $MAIN_DPORTS; do
$TC filter add dev $IF protocol ip parent 1:0 u32 match ip dport $i 0xffff flowid 1:2
done

for i in $MAIN_SPORTS; do
$TC filter add dev $IF protocol ip parent 1:0 u32 match ip sport $i 0xffff flowid 1:2
done

# serwer
for i in $SERV_SPORTS; do
$TC filter add dev $IF protocol ip parent 1:0 u32 match ip sport $i 0xffff flowid 1:3
done

# gry
for i in $GAMES_DPORTS; do
$TC filter add dev $IF protocol ip parent 1:0 u32 match ip dport $i 0xffff flowid 1:4
done

# sfq dla kolejek
$TC qdisc add dev $IF parent 1:2 handle 2:0 sfq perturb 10
$TC qdisc add dev $IF parent 1:3 handle 3:0 sfq perturb 10
$TC qdisc add dev $IF parent 1:4 handle 4:0 sfq perturb 10
$TC qdisc add dev $IF parent 1:5 handle 5:0 sfq perturb 15

#EOF# 

Byłbym wdzięczny, za jakąś wskazówkę dot zlikwidowania wysokich pingów przy włączonym ściąganiu na któryms z komputerów.

[ Dodano: 2007-10-15, 07:24 ]
No dzięki za przeanalizowanie :)
Może jednak ktoś jakoś mi pomoże ;)
ODPOWIEDZ