Перейти до

И Опять ШЕЙПЕР !


Рекомендованные сообщения

Шейпер работает, но (иногда) не удаляет правила, Господа подскажите что не так?

 

Вот кусок связанный с шейпингом в OnCOnnect

 

#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}

#individual shaper

#tc class add dev eth3 parent 1: classid 1:$ID cbq rate "$speed"Kbit allot 1500 prio 3 bounded isolated

#tc filter add dev eth3 parent 1: protocol ip prio 4 handle 800::$ID u32 match ip dst $IP flowid 1:$ID

#tc filter add dev eth3 parent ffff: protocol ip prio 50 u32 match ip src $IP police rate "$speed"kbit burst 12k drop flowid :1

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

 

 

Иногда при опросе htb.init stats видно что юзер отключился, а правило осталось.... что убивает возможность сменить ему скорость.

Ссылка на сообщение
Поделиться на других сайтах
Шейпер работает, но (иногда) не удаляет правила, Господа подскажите что не так?

 

Иногда при опросе htb.init stats видно что юзер отключился, а правило осталось.... что убивает возможность сменить ему скорость.

 

Дело в том, что когда юзер не отключился от СТГ, а просто перегрузил комп, СТГ продолжает считать его активным и соответственно ОнДисконнект не срабатывает.

Я лечил все это в скрипте ОнКоннект - перед настройкой шейпинга и файрвола сначала все вычищаю.

Ссылка на сообщение
Поделиться на других сайтах

Ты предлагаешь ставить кусок дисконнекта , для отключения из скрипта дисконнекта, т.е. такой вариант.

 

OnConnect

 

#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

 

#затем режем обратно

#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}

#individual shaper

#tc class add dev eth3 parent 1: classid 1:$ID cbq rate "$speed"Kbit allot 1500 prio 3 bounded isolated

#tc filter add dev eth3 parent 1: protocol ip prio 4 handle 800::$ID u32 match ip dst $IP flowid 1:$ID

#tc filter add dev eth3 parent ffff: protocol ip prio 50 u32 match ip src $IP police rate "$speed"kbit burst 12k drop flowid :1

fi

echo $1 `date +"%Y/%m/%d-%T"` >> /var/log/connect.log

Ссылка на сообщение
Поделиться на других сайтах

OnConnect

 

#!/bin/bash

# Login

LOGIN=$1

#user IP

IP=$2

#cash

CASH=$3

#user ID

ID=$4

#Selected dirs to connect

DIRS=$5

IPTABLES="/usr/sbin/iptables"

verh="10.1.1.0/24"

eth_local="eth3"

eth_local2="eth0"

##Forward

$IPTABLES -D INPUT -p tcp --dport 3128 -j REJECT

while [ $? -eq 0 ]

do

$IPTABLES -D INPUT -p tcp --dport 3128 -j REJECT

done

 

$IPTABLES -A INPUT -p tcp -s $IP -d 10.1.1.1 --dport 3128 -j ACCEPT

$IPTABLES -A INPUT -p tcp --dport 3128 -j REJECT

$IPTABLES -t nat -A POSTROUTING -s $IP -j MASQUERADE

$IPTABLES -t nat -A POSTROUTING -d $IP -j MASQUERADE

$IPTABLES -t filter -A FORWARD -s $IP -j ACCEPT

$IPTABLES -t filter -A FORWARD -d $IP -j ACCEPT

#$IPTABLES -A FORWARD -s $IP -d 0/0 -j ACCEPT

##Open acces to squid port

$IPTABLES -A INPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

$IPTABLES -A OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

$IPTABLES -A FORWARD -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

$IPTABLES -D INPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D INPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

done

 

$IPTABLES -D OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

done

 

$IPTABLES -D FORWARD -s $IP -p tcp -m multiport --dport 3128 -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -s $IP -p tcp -m multiport --dport 3128 -j DROP

done

 

$IPTABLES -D FORWARD -i $eth_local -s $IP -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -i $eth_local -s $IP -j DROP

done

 

$IPTABLES -D FORWARD -o $eth_local -d $IP -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -o $eth_local -d $IP -j DROP

done

 

$IPTABLES -D FORWARD -i $eth_local2 -s $IP -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -i $eth_local2 -s $IP -j DROP

done

 

$IPTABLES -D FORWARD -o $eth_local2 -d $IP -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -o $eth_local2 -d $IP -j DROP

done

#$IPTABLES -A INPUT -p tcp -s $IP -d 10.1.1.1 --dport 3128 -j ACCEPT

#$IPTABLES -A OUTPUT -p tcp -s $IP -d 10.1.1.1 --dport 3128 -j ACCEPT

###Redirect too squid

echo $IP >> /var/stargazer/squid/squid

/usr/local/squid/sbin/squid -k reconfigure

$IPTABLES -t nat -A PREROUTING -p tcp -s $IP -d 0/0 --dport 80 -j DNAT --to-destination 10.1.1.1:3128

#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

 

#!/bin/bash

#On_USER_Disconnect

# Login

LOGIN=$1

#user IP

IP=$2

#cash

CASH=$3

#user ID

ID=$4

IPTABLES="/usr/sbin/iptables"

#Selected dirs to disconnect

DIRS=$4

eth_local="eth3"

eth_local2="eth0"

prioid="${ID}0"

#$IPTABLES -D INPUT -p tcp --dport 3128 -j REJECT

$IPTABLES -D INPUT -p tcp -s $IP -d 10.1.1.1 --dport 3128 -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -D INPUT -p tcp -s $IP -d 10.1.1.1 --dport 3128 -j ACCEPT

done

#$IPTABLES -A INPUT -p tcp --dport 3128 -j REJECT

$IPTABLES -A INPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

$IPTABLES -A OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

$IPTABLES -A FORWARD -s $IP -p tcp -m multiport --dport 3128 -j DROP

$IPTABLES -D INPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -D INPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

done

 

$IPTABLES -D OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -D OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

done

 

$IPTABLES -D FORWARD -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

done

 

$IPTABLES -t nat -D POSTROUTING -s $IP -j MASQUERADE

while [ $? -eq 0 ]

do

$IPTABLES -t nat -D POSTROUTING -s $IP -j MASQUERADE

done

 

$IPTABLES -t nat -D POSTROUTING -d $IP -j MASQUERADE

while [ $? -eq 0 ]

do

$IPTABLES -t nat -D POSTROUTING -d $IP -j MASQUERADE

done

 

 

$IPTABLES -t filter -D FORWARD -s $IP -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -t filter -D FORWARD -s $IP -j ACCEPT

done

 

 

$IPTABLES -t filter -D FORWARD -d $IP -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -t filter -D FORWARD -d $IP -j ACCEPT

done

###disable redirect too squid

ON=`cat /var/stargazer/squid/squid | grep -v "$IP"`

echo "$ON" > /var/stargazer/squid/squid

/usr/local/squid/sbin/squid -k reconfigure

$IPTABLES -t nat -D PREROUTING -p tcp -s $IP -d 0/0 --dport 80 -j DNAT --to-destination 10.1.1.1:3128

###

$IPTABLES -I FORWARD -i $eth_local -s $IP -j DROP > /dev/null

$IPTABLES -I FORWARD -o $eth_local -d $IP -j DROP > /dev/null

$IPTABLES -I FORWARD -i $eth_local2 -s $IP -j DROP > /dev/null

$IPTABLES -I FORWARD -o $eth_local2 -d $IP -j DROP > /dev/null

#$IPTABLES -D FORWARD -i $eth_local -s $IP -j DROP > /dev/null

#$IPTABLES -D FORWARD -o $eth_local -d $IP -j DROP > /dev/null

#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

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...