Efektywny podział łacza ...

Michał Cyganik merfik w megapolis.pl
Pią, 11 Mar 2005, 10:22:09 CET


Witaj pld-users-pl!

Wiem ze temat juz obstukany nba setne strony... ale mimo wszystko
proszę o pomoc ;-) szukam jakiego skryptu ktory by pobierał dane z
/etc/hosts/ ubzdurałem, sobie cos takie:

#zmienne
TC="tc"
DEV="eth0"
DEV1="eth1"
DEV2="eth2"
MIN="8kbit"
MAX="400kbit"
UPMIN="2kbit"
UPMAX="64kbit"
INET1_IP="10.0.0.3"
INET2_IP="83.16.120.66"
SFQCOUNT=11
USER="cat /etc/hosts"
IPTABLES="iptables"

$TC qdisc del root dev $DEV
$TC qdisc add dev $DEV root handle 1:0 htb default 5

#MAX przepustowosc DEV
$TC class add dev $DEV parent 1:0 classid 1:1 htb rate 4000kbit ceil 4000kbit

#pasmo DSL nr 1
$TC class add dev $DEV parent 1:1 classid 1:2 htb rate 1000kbit ceil 1000kbit

#pasmo DSL nr 2
$TC class add dev $DEV parent 1:1 classid 1:3 htb rate 1000kbit ceil 1000kbit

#Reszta (0.5 Mbita rezerwy)
$TC class add dev $DEV parent 1:1 classid 1:5 htb rate 1500kbit ceil 1500kbit

#znakowanie pakietow przychodzących z określonego łącza
$IPTABLES -t mangle -I PREROUTING -m mark ! --mark 0x0 -j RETURN
$IPTABLES -t mangle -I PREROUTING -i eth1 -j MARK --set-mark 3
$IPTABLES -t mangle -I PREROUTING -i eth2 -j MARK --set-mark 4

#Znakowanie pakiety do odpwiednich klas
$TC filter add dev $DEV protocol ip parent 1:0 handle 3 fw flowid 1:2
$TC filter add dev $DEV protocol ip parent 1:0 handle 4 fw flowid 1:3

LICZNIK=8

#Klasy dla userow
for i in `$USER`; do
if [ `echo $i | grep 192.168.1 | wc -l` -eq 1 ]; then
TMP=`echo $LICZNIK`
TMP2=`expr $LICZNIK + 1`
SFQ=`expr $SFQCOUNT + 1`
$TC class add dev $DEV parent 1:2 classid 1:$TMP htb rate $MIN ceil $MAX
$TC class add dev $DEV parent 1:3 classid 1:$TMP2 htb rate $MIN ceil $MAX
$TC filter add dev $DEV protocol ip parent 1:2 u32 match ip dst $i flowid 1:$TMP
$TC filter add dev $DEV protocol ip parent 1:3 u32 match ip dst $i flowid 1:$TMP2
$TC qdisc add dev $DEV parent 1:$TMP handle "$SFQCOUNT":0 sfq perturb 10
$TC qdisc add dev $DEV parent 1:$TMP2 handle "$SFQ":0 sfq perturb 10
LICZNIK=`expr $LICZNIK + 2`
SFQCOUNT=`expr $SFQCOUNT + 2`
fi
done

#Lacza wychodzace DSL nr 1 i nr 2
$TC qdisc del root dev $DEV1
$TC qdisc add root dev $DEV1 handle 2:0 htb
$TC class add dev $DEV1 parent 2:0 classid 2:1 htb rate 250kbit ceil 250kbit
$TC qdisc add dev $DEV1 parent 2:1 handle 9:0 sfq perturb 10
$TC qdisc del root dev $DEV2
$TC qdisc add root dev $DEV2 handle 3:0 htb
$TC class add dev $DEV2 parent 3:0 classid 3:1 htb rate 200kbit ceil 200kbit
$TC qdisc add dev $DEV2 parent 3:1 handle 10:0 sfq perturb 10
$IPTABLES -t mangle -N MARKING
$IPTABLES -t mangle -F MARKING
$IPTABLES -t mangle -I FORWARD -j MARKING

LICZNIK=8

for i in `$USER`; do
if [ `echo $i | grep 192.168.1 | wc -l` -eq 1 ]; then
SFQ=`expr $SFQCOUNT + 1`
$TC class add dev $DEV1 parent 2:1 classid 2:$LICZNIK htb rate $UPMIN ceil $UPMAX
$IPTABLES -t mangle -A MARKING -s $i -d 0/0 -j MARK --set-mark 0x$LICZNIK
$TC filter add dev $DEV1 protocol ip parent 2:0 handle 0x$LICZNIK fw flowid 2:$LICZNIK" >> $PLIK
$TC qdisc add dev $DEV1 parent 2:$LICZNIK handle "$SFQCOUNT":0 sfq perturb 10
$TC class add dev $DEV2 parent 3:1 classid 3:$LICZNIK htb rate $UPMIN ceil $UPMAX
$TC filter add dev $DEV2 protocol ip parent 3:0 handle 0x$LICZNIK fw flowid 3:$LICZNIK
$TC qdisc add dev $DEV2 parent 3:$LICZNIK handle "$SFQ":0 sfq perturb 10
LICZNIK=`expr $LICZNIK + 1`
SFQCOUNT=`expr $SFQCOUNT + 2`
fi
done

No ale niedziała to najlepiej, jka by ktops mogl w to zajrzec i ew.
podopwiedziec co zmienic ;-) lub ew. jestem otwarty nba inne
propozycje....

-- 
Pozdrowienia,
 Michał Cyganik





Więcej informacji o liście dyskusyjnej pld-users-pl