trinux 3 Опубликовано: 2009-03-15 08:45:15 Share Опубликовано: 2009-03-15 08:45:15 Шейпер работает, но (иногда) не удаляет правила, Господа подскажите что не так? Вот кусок связанный с шейпингом в 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 видно что юзер отключился, а правило осталось.... что убивает возможность сменить ему скорость. Ссылка на сообщение Поделиться на других сайтах
dummy 8 Опубліковано: 2009-03-17 12:50:53 Share Опубліковано: 2009-03-17 12:50:53 Шейпер работает, но (иногда) не удаляет правила, Господа подскажите что не так? Иногда при опросе htb.init stats видно что юзер отключился, а правило осталось.... что убивает возможность сменить ему скорость. Дело в том, что когда юзер не отключился от СТГ, а просто перегрузил комп, СТГ продолжает считать его активным и соответственно ОнДисконнект не срабатывает. Я лечил все это в скрипте ОнКоннект - перед настройкой шейпинга и файрвола сначала все вычищаю. Ссылка на сообщение Поделиться на других сайтах
trinux 3 Опубліковано: 2009-03-17 14:09:01 Автор Share Опубліковано: 2009-03-17 14:09:01 Ты предлагаешь ставить кусок дисконнекта , для отключения из скрипта дисконнекта, т.е. такой вариант. 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 Ссылка на сообщение Поделиться на других сайтах
trinux 3 Опубліковано: 2009-03-17 20:47:28 Автор Share Опубліковано: 2009-03-17 20:47:28 и неужели биллинг по истечению времени если авторизатор не ответил, он не выполняет OnDisconnect Ссылка на сообщение Поделиться на других сайтах
nallien 3 Опубліковано: 2009-03-19 16:04:55 Share Опубліковано: 2009-03-19 16:04:55 выполняет конечно может у вас ошибка в OnDisconnect ? Ссылка на сообщение Поделиться на других сайтах
trinux 3 Опубліковано: 2009-03-19 19:33:07 Автор Share Опубліковано: 2009-03-19 19:33:07 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 Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас