Jump to content
Калькуляторы

шейпинг акцел пптп?

кто знает чем можно делать шейпинг акцел пптп?

 

Share this post


Link to post
Share on other sites

шейпером акцел пптп

 

PS. А чем шейпинг accel-pptp будет отличаться от шейпинга pptp ?

Share this post


Link to post
Share on other sites

я не очень вас понял.

ест линк?

 

мне нужно чтоб част юзеров получали скорость не выше 0.5мб, а другие работали в полную.

как это делается?

 

спасибо.

 

Share this post


Link to post
Share on other sites

курите линукс шейпинг...

tc

 

Вот так например....

/sbin/tc qdisc del dev $DEV root 2> /dev/null > /dev/null

/sbin/tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null

/sbin/tc qdisc add dev $DEV root tbf rate ${shape}kbit burst ${burst}kb latency 70ms minburst 1540 >/dev/null 2>&1

/sbin/tc qdisc add dev $DEV handle ffff: ingress

/sbin/tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${shape}kbit burst ${burst}k mtu 12k drop flowid :1

 

делается в ip-up скрипте....

Edited by sdy_moscow

Share this post


Link to post
Share on other sites

Спасибо!

 

А как можно в ip-up скрипте узнать имя пользователя?

 

 

 

Share this post


Link to post
Share on other sites
Спасибо!

 

А как можно в ip-up скрипте узнать имя пользователя?

имя пользователя никак.... приходится связывать по ип...

Вот например наш полный ип-ап скрипт от ланбилинга, немного допиленный...

 

#!/bin/bash
sleep 9
DEV=$1
AIP=$5
LOGMAC=/etc/ppp/log-mac
LOG=/var/log/shaper.log
MACLOG=/var/log/macshpnm.log
ERRLOG=/var/log/errshpnm.log
. /etc/billing.conf
MYSQL="/usr/bin/mysql -h${rdbhost} -u${rdbuser} -p${rdbpass} ${rdbname}"

################################################################################
############
## Getting IP MAC
##

ARP="/sbin/arp"
PID_DIR="/var/run"
ROUTE="/sbin/route"

PID=`cat ${PID_DIR}/${DEV}.pid 2>/dev/null`;

REAL_IP=$6
IP_MAC=`${ARP} ${REAL_IP} | grep ${REAL_IP} | awk '{print $3}'`

echo "$DEV ${AIP} start=`date` pid=${PID} r_ip=${REAL_IP} mac=${IP_MAC}" >> $LOG

################################################################################
############
## Check duplicate IP
##

#echo "route | grep -F ${AIP} -w | grep -F ${DEV} -v -w | awk '{print \$8}'"  >> $LOG
#           get routes | c ОБЫЙН йр | ВЕЪ ЫМАЪБ | ОЕ ОБЫ ppp | 8-БС ЛПМПОЛБ
DUP_INTF=`${ROUTE} -n | grep -F ${AIP} -w | grep G -v | grep -F ${DEV} -v -w | awk '{print $8}'`
if test -n "$DUP_INTF" 2>/dev/null
then
     echo "  !ERROR: $DEV $AIP DupIP duplicated IP detected" >> $LOG
     sleep 5
     echo "`date` ERROR: DupIP $DEV $AIP r_ip= ${REAL_IP} dupicated IP detected" >> $ERRLOG
     for cur_val in ${DUP_INTF}; { 
    DUP_PID=`cat ${PID_DIR}/${cur_val}.pid 2>/dev/null`;
    kill -s INT ${DUP_PID}
        echo "    !$DEV $AIP duplicated IP detected on $cur_val pid=$DUP_PID was killed" >> $LOG
        sleep 1
        #${fwcmd} -t nat -A POSTROUTING -s ${cur_val} -j SNAT -o ${intf_inet} --to-source ${my_ip_nat}; 
     };
     echo "    !$DEV $AIP session pid=$PID stoped at self" >> $LOG 
     kill -s INT ${PID}
     exit 0
fi

################################################################################
############
## Get vgroup info for shape and log
##
# nado dodelat ghjdthre sviazi s SQL....
res="no"
qt="select vgroups.tar_id,vgroups.shape,vgroups.login,tarifs.shape,vgroups.max_sessions \
   from vgroups,sessionsradius,tarifs where \
   inet_ntoa(sessionsradius.assigned_ip)=\"$AIP\" and sessionsradius.vg_id=vgroups.vg_id and tarifs.tar_id=vgroups.tar_id" 

for (( i=1; i<5; i++));
do
    q=`echo "$qt" | $MYSQL | tail -n1`
    if test -n "$q" 2>/dev/null
    then
           res="ok"
           break
    fi
    echo "  !WAIT: SQL $DEV $AIP wait for update active sessions" >> $LOG
    sleep 5 
done

if test $res = "no" 2>/dev/null
then
    echo "  !ERROR: SQL $DEV $AIP cannot find in active sessions" >> $LOG
    echo "`date` ERROR: SQL $DEV $AIP r_ip= ${REAL_IP} cannot find in active sessions" >> $ERRLOG
    sleep 5 
    kill -s INT ${PID}
    exit 0
fi

tarid=`echo "$q" | awk '{print $1}'`
shape=`echo "$q" | awk '{print $2}'`
vglogin=`echo "$q" | awk '{print $3}'`
shapet=`echo "$q" | awk '{print $4}'`
maxses=`echo "$q" | awk '{print $5}'`

################################################################################
#####
# calculate shape

echo "  !$DEV $AIP l=${vglogin} r_ip=${REAL_IP} mac=${IP_MAC} tr=${tarid} sh=${shape} sht=${shapet} mss=${maxses}" >> $LOG
echo "`date`;${PID};${DEV};${AIP};${vglogin};${REAL_IP};${IP_MAC};" >> $MACLOG

if test $shape -eq 0 2>/dev/null
then
    shape=$shapet
fi

      
if ! test $shape -ge 0 2>/dev/null
then
    echo "  !ERROR: Shp $DEV $AIP ${vglogin} cannot get proper shape rate" >> $LOG
        echo "`date` ERROR: Shp $DEV $AIP ${vglogin} r_ip=${REAL_IP} get proper shape rate" >> $ERRLOG
        shape=0
fi
       
#########################
# temporaly speed to 320 kbp/s
#shape=320

if test $shape -gt 0 2>/dev/null
then

burst=`echo $shape/100+2 | bc 2>/dev/null`
/sbin/tc qdisc del dev $DEV root    2> /dev/null > /dev/null
/sbin/tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null
/sbin/tc qdisc add dev $DEV root tbf rate ${shape}kbit burst ${burst}kb latency 70ms minburst 1540 >/dev/null 2>&1
/sbin/tc qdisc add dev $DEV handle ffff: ingress
/sbin/tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${shape}kbit burst ${burst}k mtu 12k drop flowid :1
echo "  !$DEV $AIP ${vglogin} setting shape rate $shape" >> $LOG

fi;

################################################################################
#####
# log on coolector 
$LOGMAC $vglogin $REAL_IP $IP_MAC

exit 0

 

в . /etc/billing.conf

что-то вроде

rdbhost=XXX.XXX.XXX.XXX
rdbuser=user
rdbpass=password
rdbname=dbname

 

Edited by sdy_moscow

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this