Правильный шейпер. Исходящая скорость и интервалы

Установка, настройка, поддержка
dnk2009
Сообщения: 121
Зарегистрирован: Сб окт 04, 2008 6:10 pm
Контактная информация:

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение dnk2009 »

у меня Lenny родной поптоп всё показываеться

Dendj
Сообщения: 12
Зарегистрирован: Ср дек 05, 2007 8:43 pm
Контактная информация:

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение Dendj »

поставил accel-pptp 0.8.4 с git, на 2.6.31 версия 0.8.3 не компилируется..

Код: Выделить всё

modinfo pptp
filename:       /lib/modules/2.6.31/extra/pptp.ko
license:        GPL
author:         Kozlov D. (xeb@mail.ru)
description:    Point-to-Point Tunneling Protocol for Linux
depends:        pppox,ppp_generic
vermagic:       2.6.31 SMP mod_unload modversions 686
parm:           log_packets:int
parm:           log_level:Logging level (default=0) (int)
супер vpn лётает, при сжатии mppc не чё не глючит)

а вот логирование так и не заработало, погуглил..
и вот
в конфиге /etc/pptpd.conf
нужно включить :P

Abram
Сообщения: 157
Зарегистрирован: Чт мар 26, 2009 11:31 am
Контактная информация:

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение Abram »

Dendj писал(а):поставил accel-pptp 0.8.4 с git, на 2.6.31 версия 0.8.3 не компилируется..
На forum.nag.ru автор об этом рассказывал. Я даже собирал под Lenny пакеты последнего current.
То, что оно не скомпилилось - это полбеды, в 2.6.26 0.8.3 наглухо вешает ядро :).
Dendj писал(а):а вот логирование так и не заработало, погуглил..
и вот
в конфиге /etc/pptpd.conf
нужно включить :P
Шейпер заработал?

Dendj
Сообщения: 12
Зарегистрирован: Ср дек 05, 2007 8:43 pm
Контактная информация:

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение Dendj »

да,
но я его толком не тестил, вчера собирал гремучую смесь ppp-2.4.4-mppe-mppc-gigawords

Dendj
Сообщения: 12
Зарегистрирован: Ср дек 05, 2007 8:43 pm
Контактная информация:

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение Dendj »

вот мой вариант, с фильтрами сетей :)

ip-up

Код: Выделить всё

#!/bin/sh
#ABillS %DATE% %TIME%
#
# When the ppp link comes up, this script is called with the following
# parameters
#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd

##DEBUG 0=ОТКЛ. 1=ВКЛ.
DEBUG_OK=0

if [ "$DEBUG_OK" == "1" ]; then
	set -x
	# Uncoment the line below to enable logging
	LOGFILE=/tmp/pppd_up_log
	# This one is for replacing the log
	LOGREPLACE=1
fi

###########
FILENET="/etc/ppp/ip-up.d/ip"
FILENETOK=1
SPEEDNET="4084kbit" #Скорость ресурсов

SH_FILE="/etc/ppp/ip-up.d/shaper" #адрес этого скрипта

MYSQLHOST="127.0.0.1"
MYSQLUSER="abills"
MYSQLPASSW="Пароль"
DOWNK="100mbit" #Вся Полоса канала
############

INPUT=ifb0;
UBURST="burst 512k"
DBURST="burst 512k"
TCFR="/sbin/tc filter replace"
TCCR="/sbin/tc class replace"
TCQR="/sbin/tc qdisc replace"
TCQD="/sbin/tc qdisc del"
A_W="/usr/bin/awk"
#__________________________________

if [ "$LOGFILE" == "" ]; then LOGFILE='/dev/null'; fi
if [ "$LOGREPLACE" == "1" ]; then exec 1> "$LOGFILE"; else exec 1>> "$LOGFILE"; fi

USER=`who|grep "$1\ "| $A_W '{print $1}'`

# Everything below is fucking scary
QUERY="SELECT s.in_speed, s.out_speed, TIME_FORMAT(i.end,'%H:%i')
FROM \`trafic_tarifs\` AS s, \`intervals\` AS i, \`dv_main\` AS dv, \`users\` AS u
WHERE u.id = '$USER' 
AND dv.uid = u.uid
AND dv.tp_id = i.tp_id
AND s.interval_id = i.id
AND i.begin <= NOW()
AND i.end > NOW();"
Q_RESULT=`/bin/echo $QUERY |  /usr/bin/mysql -u shaper -p -h $MYSQLHOST -D $MYSQLUSER --password=$MYSQLPASSW --silent`
UPSPEED=`/bin/echo $Q_RESULT | $A_W '{print $1}'` 
DOWNSPEED=`/bin/echo $Q_RESULT | $A_W '{print $2}'` 
NEXTINT=`/bin/echo $Q_RESULT | $A_W '{print $3}'`

echo "UPSPEED:" $UPSPEED " DOWNSPEED:"$DOWNSPEED" NEXTINT:"$NEXTINT

TASKS=`at -l | $A_W '{print $1}'`
for i in $TASKS
do
   TASK_TEXT=`at -c $i`

   if echo $TASK_TEXT | grep $1 > /dev/null;
   then
      atrm $i
   fi
done

/bin/echo "$SH_FILE $1" | at $NEXTINT

if [ -f /var/run/radattr.$1 ]
then
   PPPNUM=`echo $1|sed 's/ppp//'|$A_W '{printf "%03d",$1}'`
   IP=$5
   QDISC_ETH=`tc qdisc show dev $INPUT|grep -v sfq|$A_W '{print $2}'`
   DOWNSPEED=$(($DOWNSPEED*110/100))
   UPSPEED=$(($UPSPEED*105/100))


   if [ "$QDISC_ETH" != "htb" ];
   then
     ip l s $INPUT up
     $TCQD dev $INPUT root &>/dev/null
     $TCQR dev $INPUT root handle 1: htb default 2 r2q 100
     $TCCR dev $INPUT parent 1: classid 1:1 htb rate ${DOWNK} ceil ${DOWNK} burst 1024k cburst 64k prio 2
     $TCCR dev $INPUT parent 1: classid 1:2 htb rate ${DOWNK} ceil ${DOWNK} burst 1024k cburst 64k prio 1
     $TCQR dev $INPUT parent 1:2 handle 2: sfq perturb 10 quantum 1514
  fi


    $TCQD dev $1 root &>/dev/null
    $TCQD dev $1 ingress &>/dev/null

##### speed server->client
   if [ "$UPSPEED" != "0" ] ;
   then

     URATE=$[$UPSPEED/2]
     $TCQR dev $1 root handle 1: htb default 20 r2q 100
     $TCCR dev $1 parent 1: classid 1:1 htb rate ${UPSPEED}kbit $UBURST quantum 1514
     $TCCR dev $1 parent 1:1 classid 1:10 htb rate ${URATE}kbit ceil ${UPSPEED}kbit $UBURST prio 1 quantum 1514
     $TCCR dev $1 parent 1:1 classid 1:20 htb rate ${URATE}kbit ceil ${UPSPEED}kbit $UBURST prio 2 quantum 1514
     $TCQR dev $1 parent 1:10 handle 10: sfq perturb 10 quantum 1514
     $TCQR dev $1 parent 1:20 handle 20: sfq perturb 10 quantum 1514

     if [ "$FILENETOK" == "1" ]; then
     		$TCCR dev $1 parent 1: classid 1:2 htb rate ${SPEEDNET}
     fi

     # PRIO1
     # ICMP (ip protocol 1) in the interactive class
     $TCFR dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10
     # all UDP traffic are interractive
     $TCFR dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 0x11 0xff flowid 1:10
     # to make downloads fast while an upload is going on, speed up ACK packets
     $TCFR dev $1 parent 1:0 protocol ip prio 10 u32 \
     match ip protocol 6 0xff \
     match u8 0x05 0x0f at 0 \
     match u16 0x0000 0xffc0 at 2 \
     match u8 0x10 0xff at 33 \
     flowid 1:10
     # TOS Minimum Delay (ssh, NOT scp)
     $TCFR dev $1 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10

     if [ "$FILENETOK" == "1" ]; then
     	COUNT=0
     	exec 3<&0
    	exec 0<$FILENET
     	while read line
     		 do
        	 #echo "Line $COUNT is " $line
         	##echo "ADD filter " $line
        	 $TCFR dev $1 parent 1:0 protocol ip prio 1 u32 match ip src $line flowid 1:2
         	COUNT=$((COUNT+1))
     	done
     	exec 0<&3
     fi

   fi

##### speed client->server
   if [ "$DOWNSPEED" != "0" ] ;
   then

     DRATE=$[$DOWNSPEED/2]

     $TCQR dev $1 handle ffff: ingress
     $TCFR dev $1 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev $INPUT

     $TCCR dev $INPUT parent 1:1 classid 1:1$PPPNUM htb rate ${DOWNSPEED}kbit $DBURST quantum 1514
     $TCCR dev $INPUT parent 1:1$PPPNUM classid 1:2$PPPNUM htb rate ${DRATE}kbit ceil ${DOWNSPEED}kbit $DBURST prio 10 quantum 1514
     $TCCR dev $INPUT parent 1:1$PPPNUM classid 1:3$PPPNUM htb rate ${DRATE}kbit ceil ${DOWNSPEED}kbit $DBURST prio 1 quantum 1514
     $TCQR dev $INPUT parent 1:2$PPPNUM handle 2$PPPNUM: sfq perturb 10 quantum 1514
     $TCQR dev $INPUT parent 1:3$PPPNUM handle 3$PPPNUM: sfq perturb 10 quantum 1514

     $TCFR dev $INPUT parent 1: protocol ip prio 1$PPPNUM handle 0x1$PPPNUM u32 match ip src $IP/32 flowid 1:2$PPPNUM
     $TCFR dev $INPUT parent 1:2$PPPNUM protocol ip prio 2$PPPNUM handle 0x2$PPPNUM u32 match ip src $IP/32 match ip tos 0x10 0xff flowid 1:3$PPPNUM
     $TCFR dev $INPUT parent 1:2$PPPNUM protocol ip prio 3$PPPNUM handle 0x3$PPPNUM u32 match ip src $IP/32 match ip protocol 6 0xff \
             match u8 0x05 0x0f at 0 match u16 0x0000 0xfc0 at 2 match u8 0x10 0xff at 33 flowid 1:3$PPPNUM
     $TCFR dev $INPUT parent 1:2$PPPNUM protocol ip prio 4$PPPNUM handle 0x4$PPPNUM u32 match ip src $IP/32 match ip protocol 1 0xff flowid 1:3$PPPNUM
   fi

fi
ip

Код: Выделить всё

10.0.192.0/20
10.0.10.0/21
ip-down

Код: Выделить всё

#!/bin/sh
#ABillS %DATE% %TIME%
#
# When the ppp link comes up, this script is called with the following
# parameters
#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd
#

##DEBUG 0=ОТКЛ. 1=ВКЛ.
DEBUG_OK=0

if [ "$DEBUG_OK" == "1" ]; then
	set -x
	# Uncoment the line below to enable logging
	LOGFILE=/tmp/pppd_up_log
	# This one is for replacing the log
	LOGREPLACE=1
fi

if [ "$LOGFILE" == "" ]; then LOGFILE='/dev/null'; fi
if [ "$LOGREPLACE" == "1" ]; then exec 1> "$LOGFILE"; else exec 1>> "$LOGFILE"; fi

INPUT=ifb0;
UBURST="burst 512k"
DBURST="burst 64k"
TCFD="/sbin/tc filter del"
TCFR="/sbin/tc filter replace"
TCCR="/sbin/tc class replace"
TCCD="/sbin/tc class del"
TCQR="/sbin/tc qdisc replace"
TCQD="/sbin/tc qdisc del"
A_W="/usr/bin/awk"

TASKS=`at -l | $A_W '{print $1}'`
for i in $TASKS
do
   TASK_TEXT=`at -c $i`
   #echo $TASK_TEXT
   if echo $TASK_TEXT | grep $1 > /dev/null;
   then
      atrm $i
   fi
done

if [ -f /var/run/radattr.$1 ]
then
   PPPNUM=`echo $1|sed 's/ppp//'|$A_W '{printf "%03d",$1}'`
   DOWNSPEED=`$A_W  '/PPPD-Downstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`

    $TCQD dev $1 root    &>/dev/null
    $TCQD dev $1 ingress &>/dev/null

##### speed client->server
   if [ "$DOWNSPEED" != "0" ] ;
   then

     $TCFD dev $INPUT parent 1:2$PPPNUM protocol ip prio 4$PPPNUM
     $TCFD dev $INPUT parent 1:2$PPPNUM protocol ip prio 3$PPPNUM
     $TCFD dev $INPUT parent 1:2$PPPNUM protocol ip prio 2$PPPNUM
     $TCFD dev $INPUT parent 1: protocol ip prio 1$PPPNUM
     $TCQD dev $INPUT parent 1:2$PPPNUM
     $TCQD dev $INPUT parent 1:3$PPPNUM
     $TCCD dev $INPUT parent 1:1$PPPNUM classid 1:2$PPPNUM
     $TCCD dev $INPUT parent 1:1$PPPNUM classid 1:3$PPPNUM
     $TCCD dev $INPUT parent 1:1 classid 1:1$PPPNUM

   fi


fi

Abram
Сообщения: 157
Зарегистрирован: Чт мар 26, 2009 11:31 am
Контактная информация:

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение Abram »

Какие-то у тебя фильтры непонятные. Они вообще-то должны из базы браться.

smarthdd
Сообщения: 14
Зарегистрирован: Чт мар 11, 2010 8:24 pm

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение smarthdd »

А тестировал ли кто нибудь данный шейпер на Ubuntu?

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение NiTr0 »

А убунта что, особо одаренная? Или девелоперы в ней кастрировали все, что для десктопов не нужно?

smarthdd
Сообщения: 14
Зарегистрирован: Чт мар 11, 2010 8:24 pm

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение smarthdd »

2 NiTr0
Может и не особо одарреная :)
Я пытался запустить данный шейпери на убунту но в результате получил полный хаос. Скорость не резалась вообще.

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение NiTr0 »

А запустить вручную, посмотреть где ошибки, и подумать над ними - не судьба? :)
Хотя конечно заводить на десктопной сборке сервер - чревато...

smarthdd
Сообщения: 14
Зарегистрирован: Чт мар 11, 2010 8:24 pm

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение smarthdd »

Буду так и делать :)
А сборка чисто серверная. И ставилась сразу в варианте установки сервер.

smarthdd
Сообщения: 14
Зарегистрирован: Чт мар 11, 2010 8:24 pm

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение smarthdd »

Поставил. Но скорость не меняется автоматически. Только при пере подключении :(

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение NiTr0 »

А кто будет шейпер дергать-то при имене интервала? Пушкин? :)

smarthdd
Сообщения: 14
Зарегистрирован: Чт мар 11, 2010 8:24 pm

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение smarthdd »

2 NiTr0
Объясните как для не далеких, то есть меня :)
И как же его дергать? :roll:

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: Правильный шейпер. Исходящая скорость и интервалы

Сообщение NiTr0 »

Скрипт очевидно :) Куда его крутить и как - зависит от вашей фантазии :) Можно по крону для всех поднятых туннелей в момент возможной смены интервалов, можно - разбираться billd или обработкой акаунтинг-пакетов.

Ответить