Trinux
15-03-2009, 20:53
Все привет! такая проблемка. Есть значит биллинг stargazer при авторизации срабатывает скрипт OnConnect который пишет правила для фаяра, которые пускают юзера в инет, там же есть строки для шейпинга канала. так вот когда юзер отключается срабатывает скрипт OnDiscconect он убирает правила для фаяра и собственно для шейпера.
Так вот суть в том что при отключении клиента правила tc не всегда отрабатываются и остаются висеть, что делает невозможным смену скорости клиенту.
вот кусок скрипта для скорости при коннекте
#Cut speed
tarif=`/etc/stargazer/tarif.php $2`
$IPTABLES -t filter -A FORWARD -s $IP -j QUEUE
$IPTABLES -t filter -A FORWARD -d $IP -j QUEUE
prioid="${ID}0"
if [ "$tarif" = "64" ]; then
speed=64
elif [ "$tarif" = "128" ]; then
speed=128
elif [ "$tarif" = "256" ]; then
speed=256
elif [ "$tarif" = "1024" ]; then
speed=1024
elif [ "$tarif" = "512" ]; then
speed=512
else
speed=0
fi
if [ $speed != 0 ]; then
echo $1 $2 $prioid $speed $tarif `date +"%Y/%m/%d-%T"` >> /var/log/speed
/sbin/tc class add dev $eth_local parent 1:1 classid 1:${prioid} htb rate $speed'kbit' burst 20k
/sbin/tc filter add dev $eth_local parent 1: protocol ip prio ${prioid} u32 match ip dst $IP flowid 1:${prioid}
fi
echo $1 `date +"%Y/%m/%d-%T"` >> /var/log/connect.log
Он отрабатывает все красиво.... а вот при отключении что-то не так...
вот кусок из скрипта OnDisconnect.
#disable cut spped
$IPTABLES -t filter -D FORWARD -s $IP -j QUEUE > /dev/null
while [ $? -eq 0 ]
do
$IPTABLES -t filter -D FORWARD -s $IP -j QUEUE > /dev/null
done
$IPTABLES -t filter -D FORWARD -d $IP -j QUEUE > /dev/null
while [ $? -eq 0 ]
do
$IPTABLES -t filter -D FORWARD -d $IP -j QUEUE > /dev/null
done
tc filter del dev eth3 pref ${prioid}
while [ $? -eq 0 ]
do
tc filter del dev eth3 pref ${prioid}
done
tc class del dev eth3 classid 1:${prioid}
while [ $? -eq 0 ]
do
tc class del dev eth3 classid 1:${prioid}
done
echo $1 `date +"%Y/%m/%d-%T"` >> /var/log/disconnect.log
Буду признателен за помощь.
в чем может быть неполадка? может что-то в порядке его отрабатывания не так.... может что-то напутал я...
Так вот суть в том что при отключении клиента правила tc не всегда отрабатываются и остаются висеть, что делает невозможным смену скорости клиенту.
вот кусок скрипта для скорости при коннекте
#Cut speed
tarif=`/etc/stargazer/tarif.php $2`
$IPTABLES -t filter -A FORWARD -s $IP -j QUEUE
$IPTABLES -t filter -A FORWARD -d $IP -j QUEUE
prioid="${ID}0"
if [ "$tarif" = "64" ]; then
speed=64
elif [ "$tarif" = "128" ]; then
speed=128
elif [ "$tarif" = "256" ]; then
speed=256
elif [ "$tarif" = "1024" ]; then
speed=1024
elif [ "$tarif" = "512" ]; then
speed=512
else
speed=0
fi
if [ $speed != 0 ]; then
echo $1 $2 $prioid $speed $tarif `date +"%Y/%m/%d-%T"` >> /var/log/speed
/sbin/tc class add dev $eth_local parent 1:1 classid 1:${prioid} htb rate $speed'kbit' burst 20k
/sbin/tc filter add dev $eth_local parent 1: protocol ip prio ${prioid} u32 match ip dst $IP flowid 1:${prioid}
fi
echo $1 `date +"%Y/%m/%d-%T"` >> /var/log/connect.log
Он отрабатывает все красиво.... а вот при отключении что-то не так...
вот кусок из скрипта OnDisconnect.
#disable cut spped
$IPTABLES -t filter -D FORWARD -s $IP -j QUEUE > /dev/null
while [ $? -eq 0 ]
do
$IPTABLES -t filter -D FORWARD -s $IP -j QUEUE > /dev/null
done
$IPTABLES -t filter -D FORWARD -d $IP -j QUEUE > /dev/null
while [ $? -eq 0 ]
do
$IPTABLES -t filter -D FORWARD -d $IP -j QUEUE > /dev/null
done
tc filter del dev eth3 pref ${prioid}
while [ $? -eq 0 ]
do
tc filter del dev eth3 pref ${prioid}
done
tc class del dev eth3 classid 1:${prioid}
while [ $? -eq 0 ]
do
tc class del dev eth3 classid 1:${prioid}
done
echo $1 `date +"%Y/%m/%d-%T"` >> /var/log/disconnect.log
Буду признателен за помощь.
в чем может быть неполадка? может что-то в порядке его отрабатывания не так.... может что-то напутал я...