uite cum am eu:
$iptables -t mangle -A PREROUTING -j MARK --set-mark 0x3
$iptables -t mangle -I PREROUTING 2 -s $ip -i eth0 -j MARK --set-mark 0x1
$iptables -t mangle -I PREROUTING 2 -d $ip -i eth1 -j MARK --set-mark 0x1
asta ar fi marcarea traficului de "upload"
$iptables -t mangle -A POSTROUTING -j MARK --set-mark 0x2
$iptables -t mangle -I POSTROUTING 2 -d $ip -o eth0 -j MARK --set-mark 0x1
$iptables -t mangle -I POSTROUTING 2 -s $ip -o eth1 -j MARK --set-mark 0x1
marcarea traficului de "download"
asta ar fi marcarea traficului de upload
cu 2,3 ar fi pt international, cu 1 pt metro
am pus separat 2 si 3, ca traficul cu 3 sa-l bag si printr-un squid
$ip ar fi clasele metro
#!/bin/bash
DEVU=eth0
DEVD=eth1
CLASSD="tc class add dev $DEVD"
CLASSU="tc class add dev $DEVU"
FILTERD="tc filter add dev $DEVD protocol ip"
FILTERU="tc filter add dev $DEVU protocol ip"
QDISCD="tc qdisc add dev $DEVD"
QDISCU="tc qdisc add dev $DEVU"
tc qdisc del root dev $DEVD >/dev/null 2>&1
tc qdisc del root dev $DEVU >/dev/null 2>&1
$QDISCD root handle 1: htb default 12
$QDISCU root handle 1: htb default 12
$CLASSD parent 1: classid 1:1 htb rate 40mbit ceil 40mbit quantum 15000
$CLASSU parent 1: classid 1:1 htb rate 8192kbit ceil 16384kbit quantum 1500
$CLASSD parent 1:1 classid 1:100 htb rate 40mbit ceil 40mbit quantum 15000
$FILTERD parent 1:0 prio 2 handle 0x1 fw flowid 1:100
$CLASSU parent 1:1 classid 1:100 htb rate 8192kbit ceil 16384kbit quantum
1500
$FILTERU parent 1:0 prio 2 handle 0x1 fw flowid 1:100
$CLASSD parent 1:1 classid 1:200 htb rate 256kbit ceil 256kbit quantum 1500
$FILTERD parent 1: prio 1 handle 0x2 fw flowid 1:200
$CLASSU parent 1:1 classid 1:200 htb rate 256kbit ceil 256kbit quantum 1500
$FILTERU parent 1: prio 1 handle 0x3 fw flowid 1:200
$FILTERU parent 1: prio 1 handle 0x2 fw flowid 1:200
declare -a IP
IP[1]="xxx.xxx.xxx.130 32 160 32 160 3600 2048"
IP[2]="xxx.xxx.xxx.131 32 80 32 56 3600 102400"
#ip min_dl_rate_net max_dl_rate_net min_up_rate_net max_up_rate_net
min_rate_metro max_rate_metro
for index in $(seq 1 $((${#IP[*]})))
do
read ipu minnet maxnet upminnet upmaxnet minmetro maxmetro<<END
${IP[$index]}
END
$CLASSD parent 1:100 classid 1:$(expr 100 + $index) htb rate 1mbit ceil
8mbit quantum 15000
$FILTERD parent 1:100 prio 3 u32 match ip dst $ipu flowid 1:$(expr 100 +
$index)
$QDISCD parent 1:$(expr 100 + $index) handle $(expr 100 + $index): sfq
perturb 10
$CLASSD parent 1:200 classid 1:$(expr 200 + $index) htb rate ${minnet}kbit
ceil ${maxnet}kbit quantum 1500
$FILTERD parent 1:200 prio 3 u32 match ip dst $ipu flowid 1:$(expr 200 +
$index)
$QDISCD parent 1:$(expr 200 + $index) handle $(expr 200 + $index): sfq
perturb 10
$CLASSU parent 1:100 classid 1:$(expr 100 + $index) htb rate
${minmetro}kbit ceil ${maxmetro}kbit quantum 1500
$FILTERU parent 1:100 prio 3 u32 match ip src $ipu flowid 1:$(expr 100 +
$index)
$QDISCU parent 1:$(expr 100 + $index) handle $(expr 100 + $index): sfq
perturb 10
$CLASSU parent 1:200 classid 1:$(expr 200 + $index) htb rate
${upminnet}kbit ceil ${upmaxnet}kbit quantum 1500
$FILTERU parent 1:200 prio 3 u32 match ip src $ipu flowid 1:$(expr 200 +
$index)
$QDISCU parent 1:$(expr 200 + $index) handle $(expr 200 + $index): sfq
perturb 10
done
$CLASSD parent 1:1 classid 1:12 htb rate 8kbit ceil 32kbit quantum 1500
$QDISCD parent 1:12 handle 12: sfq perturb 10
$CLASSU parent 1:1 classid 1:12 htb rate 8kbit ceil 32kbit quantum 1500
$QDISCU parent 1:12 handle 12: sfq perturb 10
e oarecum simpla aceasta solutie
(cu aceasta ocazie, as dori sa vad si cat de "corecta" este, daca vedeti
vreo greseala in gandire va rog sa-mi spuneti)
---
Detalii despre listele noastre de mail: http://www.lug.ro/