ONLINE GAME+WEB=WONDERSHAPER?

Fórumok

ONLINE GAME+WEB=WONDERSHAPER?

Hozzászólások

Szisztok.

Régóta nem bírok megbirkózni evvel a kérdéssel, hogy-hogy lehet tökéletesen megoszani 2 gép között a netet, hogy egyszerre lehessen az egyiken on-line játszani (pl. CS) a másikon pedig internetezni, úgyhogy a játékot ne zavarja. Jelenleg Wondersapert használok, de nem tökéletes. Letölés közben nincs gond, de ha valaki csak össze-vissza kattintgat a web oladalakon, akkor a 40 alap ping helyett nem 70-80 ig szalad meg a ping (mint pl. letöltéskor), hanem 200-1000 -ig. 384/64 -es ADSL-t használok. A shapert már szanaszét konfiguráltam, próbáltam már 1000 féle fel-, és letölésti korlátot is, és ugyanaz a hiba. Lehet, hogy én nem tudom csak beállítani rendesen?

Kérdések:
- Wondershaper-el meg lehet tökéletesen oldani a szabályozást?
- Ha igen, hogyan? Kit, hogyan, mennyivel korlátozzak?

Köszi előre is.

Hali.

2.4.25-ös kernelt használok. A megosztás működik, és a sávszélesség szabályozás is, de egy valami apró dolog nem műxik, ami viszont nagyon fontos lenne. Amikor valakinek be van állítva a letöltési korlát pl. 10 kb/s-re abban a pillanatban, amikor hozzányúl a nethez, hirtelen (szerintem) több mint 10kb-t fog le, és pár másodperc alatt áll ba csak a 10kb-s limit, ami játék közben nagyon zavaró, mert iszonyat laggol akkor a játék.

Bevágom ide a Wondershapert, hátha ott is rosszul állítok be valamit.

Köszi a segítséget.

Hát erről lenne szó:

#!/bin/bash

# Wonder Shaper
# please read the README before filling out these values
#
# Set the following values to somewhat less than your actual download
# and uplink speed. In kilobits. Also set the device that is to be shaped.
# letöltési limit
DOWNLINKL=120
DOWNLINK=384
UPLINKL=8
UPLINK=64
DEV=ppp0

# low priority OUTGOING traffic - you can leave this blank if you want
# low priority source netmasks
NOPRIOHOSTSRC="192.168.0.110 192.168.0.111 192.168.0.112 192.168.0.113 192.168.0.114"

# low priority destination netmasks
NOPRIOHOSTDST="192.168.0.110 192.168.0.111 192.168.0.112 192.168.0.113 192.168.0.114"

# low priority source ports
# ftp=20,21 Web=80,443 mail=143Imap,110pop3,25smtp
NOPRIOPORTSRC="20 21 80 8080 443 143 110 25"

# low priority destination ports
NOPRIOPORTDST="20 21 80 8080 443 143 110 25"

# Now remove the following two lines :-)

#echo Please read the documentation in 'README' first :-\)
#exit

#########################################################

if [ "$1" = "status" ]
then
tc -s qdisc ls dev $DEV
tc -s class ls dev $DEV
exit
fi

# clean existing down- and uplink qdiscs, hide errors
tc qdisc del dev $DEV root 2> /dev/null > /dev/null
tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null

if [ "$1" = "stop" ]
then
exit
fi

###### uplink

# install root CBQ

tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 10mbit

# shape everything at $UPLINK speed - this prevents huge queues in your
# DSL modem which destroy latency:
# main class

tc class add dev $DEV parent 1: classid 1:1 cbq rate ${UPLINK}kbit \
allot 1500 prio 5 bounded isolated

# high prio class 1:10:

tc class add dev $DEV parent 1:1 classid 1:10 cbq rate ${UPLINK}kbit \
allot 1600 prio 1 avpkt 1000

# 'traffic we hate'

tc class add dev $DEV parent 1:1 classid 1:30 cbq rate $[1*$UPLINK/10]kbit \
allot 1600 prio 2 avpkt 1000

# all get Stochastic Fairness:
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10

# start filters
# TOS Minimum Delay (ssh, NOT scp) in 1:10:
tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
match ip tos 0x10 0xff flowid 1:10

# ICMP (ip protocol 1) in the interactive class 1:10 so we
# can do measurements & impress our friends:
tc filter add dev $DEV parent 1:0 protocol ip prio 11 u32 \
match ip protocol 1 0xff flowid 1:10

# prioritize small packets (<64 bytes)

tc filter add dev $DEV parent 1: protocol ip prio 12 u32 \
match ip protocol 6 0xff \
match u8 0x05 0x0f at 0 \
match u16 0x0000 0xffc0 at 2 \
flowid 1:30

# mindennel szemben elsőbbséget élvez.
# !!! games forever !!!

for a in $NOPRIOPORTDST
do
# Call of Duty
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 28960 0xffff flowid 1:10
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 28961 0xffff flowid 1:10
# Battlefield Vietnam
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 15567 0xffff flowid 1:1
# Counter-Strike
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 27015 0xffff flowid 1:10
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 27016 0xffff flowid 1:10
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 27017 0xffff flowid 1:10
# Battlefield 1942 plus Mods
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 14567 0xffff flowid 1:10
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 14568 0xffff flowid 1:10
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 14577 0xffff flowid 1:10
done

for a in $NOPRIOPORTSRC
do
# Call of Duty
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 28960 0xffff flowid 1:10
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 28961 0xffff flowid 1:10
# Battlefield Vietnam
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 15567 0xffff flowid 1:10
# Counter-Strike
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 27015 0xffff flowid 1:10
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 27016 0xffff flowid 1:10
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 27017 0xffff flowid 1:10
# Battlefield 1942 + Mods
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 14567 0xffff flowid 1:10
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 14568 0xffff flowid 1:10
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 14577 0xffff flowid 1:10
done

# some traffic however suffers a worse fate
for a in $NOPRIOPORTDST
do
# Web 20 21 80 8080 443 143 110 25
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 20 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 21 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 80 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 8080 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 443 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 143 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 110 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip dport 25 0xffff flowid 1:30
done

for a in $NOPRIOPORTSRC
do
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 20 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 21 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 80 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 8080 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 443 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 143 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 110 0xffff flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \
match ip sport 25 0xffff flowid 1:30
done

for a in $NOPRIOHOSTSRC
do
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip src $a flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip src 192.168.0.110 flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip src 192.168.0.111 flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip src 192.168.0.112 flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip src 192.168.0.113 flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip src 192.168.0.114 flowid 1:30
done

for a in $NOPRIOHOSTDST
do
tc filter add dev $DEV parent 1: protocol ip prio 17 u32 \
match ip dst $a flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip dst 192.168.0.110 flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip dst 192.168.0.111 flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip dst 192.168.0.112 flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip dst 192.168.0.113 flowid 1:30
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
match ip dst 192.168.0.114 flowid 1:30
done

########## downlink #############
# slow downloads down to somewhat less than the real speed to prevent
# queuing at our ISP. Tune to see how high you can set it.
# ISPs tend to have *huge* queues to make sure big downloads are fast
#
# attach ingress policer:

tc qdisc add dev $DEV handle ffff: ingress

# filter *everything* to it (0.0.0.0/0), drop everything that's
# coming in too fast:

#low download
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 match ip dst 192.168.0.110 police rate ${DOWNLINKL}kbit burst 10k drop flowid :1
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 match ip dst 192.168.0.111 police rate ${DOWNLINKL}kbit burst 10k drop flowid :1
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 match ip dst 192.168.0.112 police rate ${DOWNLINKL}kbit burst 10k drop flowid :1
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 match ip dst 192.168.0.113 police rate ${DOWNLINKL}kbit burst 10k drop flowid :1
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 match ip dst 192.168.0.114 police rate ${DOWNLINKL}kbit burst 10k drop flowid :1

#low upload
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 match ip dst 192.168.0.110 police rate ${UPLINKL}kbit burst 10k drop flowid :1
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 match ip dst 192.168.0.111 police rate ${UPLINKL}kbit burst 10k drop flowid :1
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 match ip dst 192.168.0.112 police rate ${UPLINKL}kbit burst 10k drop flowid :1
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 match ip dst 192.168.0.113 police rate ${UPLINKL}kbit burst 10k drop flowid :1
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 match ip dst 192.168.0.114 police rate ${UPLINKL}kbit burst 10k drop flowid :1

Húha! Hát ez nem hasonlit az enyémre! Ez nem használ IMQ-t és nem is mangling-el állitja be a csomagtipust. Én egy újabb változatot használok, ami másképp működik. Az ADSL bandwidth management HOWTO-ban talalható és myshaper a neve.
Felraktam az új patch-et a 2.4.26-os kernelhez, az iptables 1.2.9 pedig a régi patch-el most jól működik. Most látom először működni az enyémet, úgyhogy sok érdemi segítséget nem tudok nyújtani.

Alapból 256kbit/s (=32kB/s)-re limitáltam a 384-es kapcsolatot és a maximum csúcsok amiket látok az 35kB/s, tehát alig haladja meg a beállítottat. Ennek ellenére nálam is fellép a jelenség, ráadásul azt tapasztalom, hogy minél alacsonyabbra korlátozom a sebességet annál rosszabb lesz a latency.

Namost nálad azt látom, hogy a bejövő forgalmat egyáltalán nem osztályozza csomagtípus szerint. (ha jól értelmezem a szöveget, akkor ez a netfilter problémája, bejövő csomagra nem lehet prioritást beállítani) Így most annyi a különbség, hogy nem az ISP-nél várakoznak a csomagok, hanem a helyi gép bejövő sorában, de a sort nem tudják kikerülni a prioritásos csomagok. Na elvileg erre való az Intermediate Queuing Device, vagyis az IMQ. Átirányítjuk a bejövő csomagokat ebbe, és ennek a kimenő során már tudunk osztályozni. A gáz az, hogy nálam most ez van, és mégsem működik vele...
Ettől függetlenül szerintem próbáld meg ezt a másikat, hátha te többre mész vele.

Lehet, hogy én tudom rosszul, de sebességszabályzást csak 'kimenő' interface-re lehet beállítani. Tehát a megosztó gépen a feltöltési korlátot a ppp0-ra kell beállítani, a letöltési korlátot meg arra a hálókártyára, amire a belső gépek csatlakoznak. Legalábbis nekem két helyen is így működik.

Az IMQ pont ezt csinalja, csak az egy "virtualis halokartya", amin a lokalis gep forgalma is atmegy. Legalabbis elvileg...

Hoppáhoppá! Lokális forgalomra működik is! Akkor itt a NAT-tal lesz valami zűr meg a routing táblával!

Nálam elég jól megy a shape, bár én nem a wondershaper-t használom, hanem a Jim Digriz-féle scriptet (http://www.digriz.org.uk/jdg-qos-script/). Ez mangle-el csinálja a szabályokat, imq-val szépen shape-el, nekem eddig ez jött be legjobban. A teljes sávszél 80%-a körülre szoktam belőni a limitet, vagy egy kicsit feljebb, és elég jó pingeket produkál így.
Amúgy azt nem nagyon lehet kiküszöbölni, hogy letöltés indítása után pár sec kell míg beáll a sebességére, a tcp kapcsolat ilyen, idő kell mire beszabályozza a sebességet, ez a felépítéséből adódik. De még mindig jobb pár másodperces lag, mint az állandó... :wink:

Hali.

Köszi mindenkinek a segítséget. Amit vidagabor a forum elején adott linket, azon egy nagyon komoly, és jónak tűnő shaper van, de azt Redhat alá tesztelték, és ebben a formában nekem nem megy Debian alatt, de az az igazság, hogy nem igazán értek a Debianhoz, úgyhogy csak én nem tudtam működésre bírni.

Ha valakinek létezik olyan shapere, ami szintén on-line játékra van kihegyezve, és olyan formán műxik, hogy legfeljebb kis ping ugrálás van (ésszerű határokon belül), akkor azt nagyon megköszöném, ha ide bevágná nekem, egy kis magyarázattal, hogy "ez, és ez" kell még hozzá, meg "itt, és itt kell" beállítani a Debianban valamit, hogy működjön.

Köszi előre is.

Az előző hozzászólás is én voltam, csak elfelejtettem bejelentkezni. :)))))

Milyen kernelt hasznalsz? Ha jol ertem, akkor a letoltes korlatozas nem mukodik egyaltalan. Szerintem nem a te hibad. Ahhoz ugyanis ket dolgot kell megpatchelni, a kernelt es az iptables-t. Az IMQ patch, sajnos 2.4.26-os kernellel nem mukodott (mikor legutobb kb egy honapja neztem). A patch hibatlanul felmegy a kernelre, le is fordul, csak eppen a funkciojat nem latja el. Az iptables IMQ patch-el pedig alapbol le sem fordul, csak komoly kezi babralas aran. (Regebbi verziobol kell egy csomo .h filet atvenni, mert hianyoznak a patchbol)

DE JO HIR VAN!
Most nezem az www.linuximq.net oldalt es majus 6-an azt irjak, hogy vegre van 2.4.26-oshoz mukodo patch. Ha lesz egy kis idom majd frissitek en is.