PPPOE SHAPER c интервалами без переподключения пользователей

Установка, настройка, поддержка
Ответить
kodr
Сообщения: 17
Зарегистрирован: Чт окт 22, 2009 5:11 pm

PPPOE SHAPER c интервалами без переподключения пользователей

Сообщение kodr »

Есть shaper для ppp клиентов работает без проблем
Создаёш в /etc/ppp/ip-up.d/ файл up-shaper
Содержимое:

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

#!/bin/bash

int=$1
period=day
now=`date +%H%M`
if [ "$now" -gt "0030" -a "$now" -lt "0700" ];then
        period=night
fi

echo "/etc/ppp/shaper/shaper.sh up $int $period" > /var/log/ppp-shaper.log
/etc/ppp/shaper/shaper.sh up $int $period > /var/log/ppp-shaper.log 2>&1

Делаем исполняемым
chmod +x /etc/ppp/ip-up.d/up-shaper
0030 и 0700 это период ночь а остальное день
В /etc/ip-down.d/down-shaper
Содержимое:

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

#!/bin/bash

int=$1

echo /etc/ppp/shaper/shaper.sh down $int 
Делаем исполняемым
chmod +x /etc/ppp/ip-up.d/down-shaper
Создаёте папку
mkdir /etc/ppp/shaper
В неё ложите сам shaper.sh

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

#!/bin/bash

TC="/sbin/tc"

action=$1
int=$2
ppp=`echo $int | sed 's/ppp//'`
period=$3

bw=`grep PPPD-Downstream-Speed-Limit\   /var/run/radattr.$int | cut -f2 -d\ `
bw_out=`grep PPPD-Upstream-Speed-Limit\   /var/run/radattr.$int | cut -f2 -d\ `
bw_night=`grep PPPD-Downstream-Speed-Limit-1 /var/run/radattr.$int | cut -f2 -d\ `
bw_night_out=`grep PPPD-Upstream-Speed-Limit-1 /var/run/radattr.$int | cut -f2 -d\ `
int_ip=`grep Framed-IP-Address /var/run/radattr.$int | cut -f2 -d\ `

if [[ -z $bw_out ]]; then
        bw_out=$bw
fi

if [[ -z $bw_night ]]; then
        bw_night=$bw
fi

if [[ -z $bw_night_out ]]; then
        bw_night_out=$bw_night
fi

echo "`date`: $bw $bw_out $bw_night $bw_night_out $int $int_ip $action $period" >> /var/log/ppp-shaper.log



function up {
        #Upstream shaping
        $TC qdisc add dev $int root handle 1: htb default 1 r2q 1
        $TC class add dev $int parent 1: classid 1:1 htb rate ${1}kbit ceil $(($1+$1 / 8))kbit
        $TC qdisc add dev $int parent 1:1 sfq perturb 10

        #Downstream shping
        $TC qdisc add dev $int handle ffff: ingress
        $TC filter add dev $int parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $((${2} / 2 + ${2}))kbit burst 16k drop flowid :1

}
function down {
        $TC qdisc del dev $int root handle 1: htb default 1 r2q 1
        $TC class del dev $int parent 1: classid 1:1 htb rate ${1}kbit burst 16k
        $TC qdisc del dev $int parent 1:1 sfq perturb 10
        $TC qdisc del dev $int handle ffff: ingress

}


case "$action" in
up)
        if [[ "$period" == day ]]; then
                up $bw $bw_out
        else
                up $bw_night $bw_night_out
        fi
;;
down)
        down
;;
*)
        echo "No action defined"
;;
esac


exit 0

И тоже делаем исполняемым

chmod +x /etc/ppp/shaper/shaper.sh

И файл speedswitch.pl
Содеожимое:

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

#!/usr/bin/perl

my $period = $ARGV[0];
print $period;

my @radattrs = `ls /var/run/radattr*`;

foreach(@radattrs){
        my $radattr = $_;
        $radattr =~ /(ppp\d+)$/;
        my $int = $1;
        print "$int\n";
        `/etc/ppp/shaper/shaper.sh down $int >> /var/log/speedswitch.log`;
        `/etc/ppp/shaper/shaper.sh up $int $period >> /var/log/speedswitch.log`;
}

И тоже делаем исполняемым

chmod +x /etc/ppp/shaper/speedswitch.pl
В crontab

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

30 0 * * *      root    /usr/bin/perl /etc/ppp/shaper/speedswitch.pl night
01 7 * * *      root    /usr/bin/perl /etc/ppp/shaper/speedswitch.pl day
В тарифных планах удаляете все интервалы и в радиус атрибуты пишете
PPPD-Downstream-Speed-Limit=2048, PPPD-Upstream-Speed-Limit=2048,
PPPD-Downstream-Speed-Limit-1=4096, PPPD-Upstream-Speed-Limit-1=4096


Таким образом у клиентов с 12:30 до 07:00 скорость 4096 а в остальное время 2048 и во время прохожднния временных интервалов соединение переподключается а скорость увеличивается.

Все работает четко за исключением извитого вопроса с исходящей скоростью исли кто-то предложит лучший вариант

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

        #Downstream shping
        $TC qdisc add dev $int handle ffff: ingress
        $TC filter add dev $int parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $((${2} / 2 + ${2}))kbit burst 16k drop flowid :1

Этого куска shapera я буду очень рад :)
Есть ёщё один вариант shapera с изменением скорости по направлениям могу выложить у меня под ubuntu работает
Последний раз редактировалось kodr Чт июн 30, 2011 7:14 pm, всего редактировалось 1 раз.

senya
Сообщения: 1
Зарегистрирован: Вс июн 26, 2011 1:39 pm

Re: PPPOE SHAPER c интервалами без переподключения пользоват

Сообщение senya »

Здравствуйте! Нужен совет. Тип соединения pptp. Поставил интервал, чтобы ночью скорость прибавлялась в два раза, но без переподключения vpn скорость не увеличивается. Никак не сделать, чтобы без разрыва она увеличивалась?

Спасибо!

kodr
Сообщения: 17
Зарегистрирован: Чт окт 22, 2009 5:11 pm

Re: PPPOE SHAPER c интервалами без переподключения пользоват

Сообщение kodr »

senya писал(а):Здравствуйте! Нужен совет. Тип соединения pptp. Поставил интервал, чтобы ночью скорость прибавлялась в два раза, но без переподключения vpn скорость не увеличивается. Никак не сделать, чтобы без разрыва она увеличивалась?

Спасибо!
Шейпер бодет работать для pppoe и pptp
Впрочем на любом ppp сервере

Grayzer
Сообщения: 1
Зарегистрирован: Сб мар 12, 2011 11:14 pm

Re: PPPOE SHAPER c интервалами без переподключения пользоват

Сообщение Grayzer »

kodr писал(а):
Есть ёщё один вариант shapera с изменением скорости по направлениям могу выложить у меня под ubuntu работает
Выложи буду оч благодарен!!!

Ответить