QoS pro Vasek Stodulka
Vasek Stodulka
xvasek na gmail.com
Pondělí Leden 30 14:10:37 CET 2006
On Sat, 28 Jan 2006 17:01:17 GMT, Oqak <node.ch na centrum.cz> wrote:
> No to ne, mam dobrou linku, zadne shit wifi, latence minimalni (ping 15ms),
> akorat je problem ze kdyz se zacpe uplink anebo downlink, tak ping vzroste.
>
> Proste resme ucpani na strane LAN a mejme WAN idealni (tj. udavane parametry
> od ISP jsou 100%).
>
> Pak uz to ma reseni, ne? Jenze Supershaper resi jen UPLINK, dokazal bys to
> vysperkovat i o Downlink + moznost pridat IP/port (pro zarizeni, co neumi
> TOS)? Pripadne to vydat nekde, kde za to redakce dobre zaplati.
OK, tady je můj pracně ukrývaný super - truper script, se kterým teď
slavnostně vycházím na světlo. Bude to fungovat, pokud splníš podnímku, že
celková rychlost linky v daném směru bude reálně o něco vyšší, než
daný strop. Pokud to nedodržíš, nebude to dělat vůbec nic.
Toto je příklad pouze pro jeden směr a řeší download za předpokladu, že
síťovka _dovnitř_ do LAN je eth0. Pokud chceš oba směry, můžeš si udělat
ještě jeden ten samý script a vyměnit interface. Základním přepokladem je
to, že packet můžeš zdržet jenom ve směru, kterým z routeru odchází, takže
download je pro LAN interface a upload se řeší na WAN, teda na bezdrátu,
pokud dobře chápu situaci.
Je to init script pro Fedoru nebo Debian, testováno na lidech.
#!/bin/sh
#
# chkconfig: - 11 89
# description: Single -- purpose settings of tc to server
# changes 19/08/2004 by Peter
# Tady se stanuvuje interface, na ktery se to bude aplikovat
DEV=eth0
start () {
echo -n "Starting QoS tc.init: "
# Uklid
tc qdisc del dev $DEV root
# Vytvorit hlavni disciplinu
tc qdisc add dev $DEV root handle 1: htb default 2
# Napred stanovujeme pouze rychlosti a budujeme strom trid, nic dalsiho
# nas nezajima.
# Internetovy provoz (linka je 512kbit, strop stanovime na 465)
tc class add dev $DEV parent 1: classid 1:1 htb rate 465kbit ceil 465kbit
# Intranetovy traffic (aby jelo rychle vybirani posty z routeru a tak,
# pokud by to mel byt ciste router, tak neni potreba. Pokud je parent
# qdisc, tak si tridy v ramci qdiscu nepujcuji pasmo
tc class add dev $DEV parent 1: classid 1:2 htb rate 10Mbit ceil 10Mbit
# Ted navesim na tu hlavni internetovou tridu (1:1) ruzne dalsi tridy
# tak, aby si mezi sebou mohly pujcovat. Trida muze mit podtridy, ale
# tuto moznost nevyuzijeme a rozdelime jenom tech 465kbit
# Pro prodejce:
tc class add dev $DEV parent 1:1 classid 1:10 htb rate 128kbit ceil 465kbit
# Do Zlina:
tc class add dev $DEV parent 1:1 classid 1:11 htb rate 160kbit ceil 465kbit
# Zbytek:
tc class add dev $DEV parent 1:1 classid 1:12 htb rate 112kbit ceil 465kbit
# SSH a Terminal Services:
tc class add dev $DEV parent 1:1 classid 1:13 htb rate 64kbit ceil 256kbit
# V teto chvili mame definovany strom pro tridy a prichazi krok 2, kdy
# si oznacime packety pro jednotlive tridy. To se da delat i pres u32
# klasifikator, ale ten je hodne omezeny. Daleko vetsi moznosti nam
# davaji iptables.
# Jeste jeden hint: V mangle tabulce neplati, ze prvni pravidlo, ktere
# na packet sedne, je zaroven i poslednim. Vzdy se pouziji vsechna
# pravidla v chainu.
# !!! Pozor, vicekrat oznaceny packet si pamatuje posledni cislo !!!
# Vytvorim si chain
iptables -t mangle -N internet
# A ted to cisluju jak na bezicim pasu. Mam 4 tridy, do kterych to
# chci rozhodit, coz je parametr MARK.
# Terminal services a ssh, ktere nejde z lokani site
iptables -t mangle -A internet -s ! 192.168.2.0/24 -p tcp --sport 22 -j MARK --set-mark 4
iptables -t mangle -A internet -s ! 192.168.2.0/24 -p tcp --sport 3389 -j MARK --set-mark 4
# Zbytek
iptables -t mangle -A internet -s ! 192.168.2.0/24 -j MARK --set-mark 3
# VPN
iptables -t mangle -A internet -d 192.168.2.0/24 -s 192.168.1.1 -j MARK --set-mark 2
iptables -t mangle -A internet -s 192.168.20.0/24 -d 192.168.2.88 -j MARK --set-mark 2
# Prodejci
iptables -t mangle -A internet -s ! 192.168.2.0/24 -d 192.168.2.101 -j MARK --set-mark 1
iptables -t mangle -A internet -s ! 192.168.2.0/24 -d 192.168.2.112 -j MARK --set-mark 1
iptables -t mangle -A internet -s ! 192.168.2.0/24 -d 192.168.2.115 -j MARK --set-mark 1
# Tady rikam, ze pakety se maji prohnat jeste pres muj skvely chain
iptables -t mangle -A POSTROUTING -o eth0 -j internet
# Tak a ted mam na jedne strane strom HTB a na druhe strane krasne
# oznacene pakety a potrebuju to nejak spojit dohromady. Jeste je tady
# priorita, ale uz si presne nevzpominam jak funguje.
tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 2 fw classid 1:11
tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 3 fw classid 1:12
tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 4 fw classid 1:13
echo Ok.
}
stop () {
echo -n "Stopping QoS tc: "
# Smazat vse (nejlepe podle priority):
tc filter del dev $DEV prio 3
tc filter del dev $DEV prio 1
tc qdisc del dev $DEV root
iptables -t mangle -F
iptables -t mangle -X internet
echo Ok.
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo "Usage: tc.init {start|stop}"
RETVAL=1
esac
exit $RETVAL
> Jinak SPA2100 cenove klesla a jde koupit za 2200,- bez DPH, za router s
> QoS + spickovou VoIP pro 2 linky super cena, ne?
To jo. Vždycky se dá vybrat mezi jednoúčelovým zařízením a
počítačem, SPA2100 bude asi tichá a bude málo žrát a telefon bez problémů a
PC zase asi bude mít lepší možnosti nastavení QoS a firewallu a tak. Já
nejsem žádný jenom-linux-a-nic-jiného fanatik, takže si myslím, že se
Sipurou můžeš být spoustu let šťastný a spokojený a ta cena je fakt dobrá.
:) Já zase potřebuju trochu chytřejší router, takže mám RouterBoard a SIP
budu řešit až uvnitř sítě.
PS: Doufám, že to ten script nepozalamuje.
--
Vašek Stodůlka
tel.: +420 608 200 860
Další informace o konferenci Linux