wyslalem ci na @ , ale nie dajesz odpowiedzi , wiec tu ci wrzuce, wyprobuj to (podzial dynamiczny), musisz miec wrra , esfq sobie zmien na sfq jesli wariowac bedzie, generalnie musisz miec iproute spaczowane najnowszymi latkami na esfq i w jajku wrr obsluge, dziala b.dobrze przy max wysyc. lacza. i co wazne przy wrr nie trzeba priorytetowac i bawic sie w niepotrzebne mark-i portow interakt. przy tym rozwiazaniu.
no i postrouting z mangla skierowac do imq1!
#!/bin/bash
BC="/usr/bin/bc"
TC="/sbin/tc"
#tu wpisz, ustawienia łacza
NET_WAN_A="83.xx.xx.xx/29"
IMQ_WAN_A="imq1"
IF_WAN_A="eth0"
BW_IN_A="7700" #prędkosć łacza w kilobitach/sekundę (w dół) [max 95% !!]
BW_OUT_A="600" #prędkosć łacza w kilobitach/sekundę (w górę) [max 95% !!]
#ustawienia LANu
NET_LAN="192.168.3.0/16"
IFS_LAN="eth1"
# ograniczenie do NMAC sieciówek w lanie - moze byc w 3dupy :-)
NMAC=200
#tego lepiej nie zmieniaj
RISE_TIME_IN_A="600"
FALL_TIME_IN_A="300"
MIN_IN_A="0.3"
RISE_TIME_OUT_A="600"
FALL_TIME_OUT_A="300"
MIN_OUT_A="0.3"
####################################################################
#PONIŻEJ TEJ LINII NIE ZMIENIAJ, CHYBA, ŻE DOBRZE WIESZ, CO ROBISZ #
####################################################################
# min = min
# incr = (1.0-min) / RISE
# speed = 128 * Bandwidth[kbit]
# decr1 = (1.0-min)*(1+FALL/RISE)/(FALL*SPEED)
########################################
INCR_IN_WAN_A=`echo "scale=15; (1.0 - ${MIN_IN_A}) / ${RISE_TIME_IN_A}" | ${BC}`
DECR_IN_WAN_A=`echo "scale=15; (1.0 - ${MIN_IN_A}) * ( 1 + ${FALL_TIME_IN_A} / ${RISE_TIME_IN_A}) / (${FALL_TIME_IN_A} * ${BW_IN_A} * 128)" | $BC`
INCR_OUT_WAN_A=`echo "scale=15; (1.0 - ${MIN_OUT_A}) / ${RISE_TIME_OUT_A}" | ${BC}`
DECR_OUT_WAN_A=`echo "scale=15; (1.0 - ${MIN_OUT_A}) * ( 1 + ${FALL_TIME_OUT_A} / ${RISE_TIME_OUT_A}) / (${FALL_TIME_OUT_A} * ${BW_OUT_A} * 128)" | $BC`
REMAP=0
BW_TOTAL=10000
BW_LAN=$[ ${BW_TOTAL} - ${BW_IN_A}]
#Wyczysc wszystkie interfejsy
echo "Czyszczenie ustawien interfejsow"
tc qdisc del root dev ${IMQ_WAN_A} > /dev/null 2>&1
tc qdisc del root dev ${IF_WAN_A} > /dev/null 2>&1
for i in $IFS_LAN; do
tc qdisc del root dev $i > /dev/null 2>&1
done
##################################################################
#Ruch wychodzacy #
echo "${IF_WAN_A} - ruch wychodzacy przez ${NET_WAN_A}"
tc qdisc add dev ${IF_WAN_A} root handle 3000:0 htb default 1001 r2q 5
#Glowna klasa
tc class add dev ${IF_WAN_A} parent 3000:0 classid 3000:1001 htb rate ${BW_OUT_A}Kbit ceil ${BW_OUT_A}Kbit burst 10k quantum 1492
# WRR
echo "tworzenie WRR..."
# utworz $NMAC klas (max tyle sieciowek moze byc max w lanie)
tc qdisc add dev ${IF_WAN_A} parent 3000:1001 handle 8001: wrr sour masq $NMAC $REMAP
#pod wszystkie $NMAC WRR podepnij SFQ
declare -i NUM=$NMAC;
while [ $NUM -ge 1 ]; do
HNUM=$(printf %X $NUM)
tc qdisc add dev ${IF_WAN_A} parent 8001:$HNUM handle $HNUM: esfq hash src
NUM=$NUM-1
done
echo "konfiguracja..."
# Ustaw parametry penalty
tc qdisc change handle 8001 dev ${IF_WAN_A} wrr qdisc wmode1=3 wmode2=3
declare -i NUM=$NMAC;
while [ $NUM -ge 1 ]; do
HNUM=$(printf %X $NUM)
tc class change classid 8001:$HNUM dev ${IF_WAN_A} \
wrr min1=${MIN_OUT_A} max1=1 \
decr1=${DECR_OUT_WAN_A} incr1=${INCR_OUT_WAN_A} \
weight1=1.0 \
min2=${MIN_OUT_A} max2=1.0 \
decr2=${DECR_OUT_WAN_A} incr2=${INCR_OUT_WAN_A} \
weight2=0.1
NUM=$NUM-1
done
#############################################################
#Ruch wchodzacy #
echo "${IMQ_WAN_A} - ruch wchodzacy przez ${NET_WAN_A}"
##############################################################
#kolejka glowna
tc qdisc add dev ${IMQ_WAN_A} root handle 1000:0 htb default 1002 r2q 5
#Glowna klasa
tc class add dev ${IMQ_WAN_A} parent 1000:0 classid 1000:1001 htb rate ${BW_TOTAL}kbit ceil ${BW_TOTAL}kbit prio 1 burst 25k quantum 1492
#Ruch wchodzacy
tc class add dev ${IMQ_WAN_A} parent 1000:0 classid 1000:1002 htb rate ${BW_IN_A}kbit ceil ${BW_IN_A}kbit prio 2
#Ruch lokalny
tc class add dev ${IMQ_WAN_A} parent 1000:1001 classid 1000:1003 htb rate ${BW_LAN}kbit ceil ${BW_LAN}kbit prio 6
#Ustawienia ruchu lokalnego:
tc qdisc add dev ${IMQ_WAN_A} parent 1000:1003 handle 1010: esfq hash dst perturb 10 # dodaj sfq
# Co jest ruchem lokalnym? Filtry:
tc filter add dev ${IMQ_WAN_A} protocol ip preference 1 parent 1000:0 u32 match ip src \
${NET_WAN_A} flowid 1000:1003 #
tc filter add dev ${IMQ_WAN_A} protocol ip preference 2 parent 1000:0 u32 match ip src \
${NET_LAN} flowid 1000:1003 # ruch po wewn. interfejsach
echo "tworzenie WRRa"
# utworz $NMAC klas (max tyle sieciowek moze byc max w lanie)
tc qdisc add dev ${IMQ_WAN_A} parent 1000:1002 handle 8001: wrr dest ip $NMAC $REMAP
#pod wszystkie $NMAC WRR podepnij SFQ
declare -i NUM=$NMAC;
while [ $NUM -ge 1 ]; do
HNUM=$(printf %X $NUM)
tc qdisc add dev ${IMQ_WAN_A} parent 8001:$HNUM handle $HNUM: esfq hash dst perturb 15
NUM=$NUM-1
done
echo "konfiguracja..."
# Ustaw parametry penalty
tc qdisc change handle 8001 dev ${IMQ_WAN_A} wrr qdisc wmode1=3 wmode2=3
declare -i NUM=$NMAC;
while [ $NUM -ge 1 ]; do
HNUM=$(printf %X $NUM)
tc class change classid 8001:$HNUM dev ${IMQ_WAN_A} \
wrr min1=${MIN_IN_A} max1=1 \
decr1=${DECR_IN_WAN_A} incr1=${INCR_IN_WAN_A} \
weight1=1.0 \
min2=${MIN_IN_A} max2=1.0 \
decr2=${DECR_IN_WAN_A} incr2=${INCR_IN_WAN_A} \
weight2=0.1
NUM=$NUM-1
done
######
echo "no i to wszystko"