QoS na firewallu se tremi sitovkami

Zdenek Pizl z.p na linux-cd.cz
Úterý Únor 3 21:37:33 CET 2004


Dobry vecer,

 zacal sem si po delsi dobe zase hrat s HTB disciplinou pro omezovani provozu. 
To jak jsem to nastavil jakztakz funguje, ale zda se mi to cely nejaky divny 
(jako ten vycepni :)

Topologie:

firewall ma tri sitovky:
- eth0 pripojenou do internetu (kabelovka) 512 in/ 384 out (kb/sec)
- eth1 vede do vnitrni site 10.10.10.0/24, oznacme ji jako SITA
- eth2 vede do vnitrni site 10.10.20.0/24, oznacme ji jako SITB

Zadani - ukolem je:

Omezit provoz tak, aby 
- odchozi provoz do internetu ze SITA mel nejmene 320 kbit a mohl vyuzit celou 
kapacitu, kdyz nic jineho nejede
- odchozi provoz do internetu ze SITB mel garantovanych 64 kbit, mohl vyuzit 
plny prenos pokud nic nejede

- prichozi provoz do SITA mel garantovanych 384 kbit, je-li volno, tak az 512 
kbit
- prichozi provoz do SITB mel garantovanych 128, kdyz je volno tak si NESMI 
vzit vic


Nezda se mi skutecnost, ze mam na eth1 a eth2 vlastne jen jednu aktivni tridu, 
hloda ve mne pochybnost, jestli se to neda udelat nejak elegantneji (treba ty 
pravidla nejak spojit ...). Mate nekdo nejaky napad, kdyz tak mi ukazte  
nesmysly, ktere jsem tam nasekal.

Diky z.p.


QOS skript:
##add a queueing discipline
echo -n "adding shaping for eth0"
$TC qdisc add dev eth0 root handle 1: htb default 100
$TC class add dev eth0 parent 1:   classid 1:0  htb rate 384kbit ceil 384kbit 
$TC class add dev eth0 parent 1:0  classid 1:1  htb rate 320kbit ceil 384kbit 
$TC class add dev eth0 parent 1:0  classid 1:2  htb rate 64kbit  ceil 384kbit 
# default class pro vsechen ostatni provoz
$TC class add dev eth0 parent 1:0 classid 1:100 htb rate 64kbit ceil 512kbit
$TC qdisc add dev eth0 parent 1:100 handle 100: sfq perturb 10
# leaf tridam dame kratkou frontu, aby mely kratkou odezvu
$TC qdisc add dev eth0 parent 1:1 handle 10: pfifo limit 5
$TC qdisc add dev eth0 parent 1:2 handle 20: pfifo limit 5

echo -n ", iptables marking rules"
## marking packets for filtering
$IPTABLES -A FORWARD -i eth1 -o eth0 -t mangle -j MARK --set-mark 1
$IPTABLES -A FORWARD -i eth2 -o eth0 -t mangle -j MARK --set-mark 2
## add filters
echo -n ", filters ..."
$TC filter add dev eth0 protocol ip prio 1 handle 1 fw classid 1:1 
$TC filter add dev eth0 protocol ip prio 1 handle 2 fw classid 1:2 
echo " done."

####################
#### OUTGOING through internal interfaces
####################

## add a queueing discipline
echo -n "adding shaping for eth1"
$TC qdisc add dev eth1 root handle 1: htb default 100
$TC class add dev eth1 parent 1:   classid 1:0  htb rate 512kbit ceil 512kbit 
$TC class add dev eth1 parent 1:0  classid 1:1  htb rate 384kbit ceil 512kbit 
# leaf tridam dame kratkou frontu, aby mely kratkou odezvu
$TC qdisc add dev eth1 parent 1:1 handle 10: pfifo limit 5
# default class pro vsechen ostatni provoz
$TC class add dev eth1 parent 1:0 classid 1:100 htb rate 64kbit ceil 512kbit
$TC qdisc add dev eth1 parent 1:100 handle 100: sfq perturb 10
echo " ... done."

echo -n "adding shaping for eth2"
$TC qdisc add dev eth2 root handle 1: htb default 100
$TC class add dev eth2 parent 1:   classid 1:0  htb rate 128kbit ceil 128kbit 
#ROOT
$TC class add dev eth2 parent 1:0  classid 1:2  htb rate 128kbit ceil 128kbit 
# default class pro vsechen ostatni provoz
$TC class add dev eth2 parent 1:0 classid 1:100 htb rate 64kbit ceil 64kbit
echo " ... done."

## marking packets for filtering
$IPTABLES -A FORWARD -i eth0 -o eth1 -t mangle -j MARK --set-mark 10
$IPTABLES -A FORWARD -i eth1 -o eth2 -t mangle -j MARK --set-mark 20

## add filters
$TC filter add dev eth1 protocol ip prio 1 handle 10 fw classid 1:1 
$TC filter add dev eth2 protocol ip prio 1 handle 20 fw classid 1:2 

-- 
Zdenek Pizl
Internetovy obchod s aktualizovanymi distribucemi GNU/Linuxu
http://www.Linux-CD.cz



Další informace o konferenci Linux