POPTOP ограничение скорости
имхо выставляется без единиц измерений, т.к. по мотивам топика viewtopic.php?t=5396&highlight=poptop
уже заложена в pptpd
Код: Выделить всё
Vendor:0;Attr:230;Val:{Скорость UpStream в Кбитах/с} тип String
Vendor:0;Attr:230;Val:{Скрость DownStream в Кбитах/с} тип String
-
- Сообщения: 1
- Зарегистрирован: Чт дек 23, 2010 12:04
Я сделал, сейчас доберусь до второго компьютера, выложу скрипты с комментариями и правила фаерволла. Заморочка с аттрибутами радиуса не прокатила, как не бился, сделал так:
Конфигурация - Slackware Linux 12, pptpd v1.3.4, pppd version 2.4.5, UTM5
Скрипт /netup/utm5/scripts/pptp_up
В правилах фаерволла:
При открытии сессии, для указанного тарифного плана:
И по такому правилу на каждый тарифный план.
При эвенте: закрытие сессии скрипт /netup/utm5/scripts/pptp_down
Правило фаерволла для всех клиентов:
Политика FORWARD в iptables - DROP
Идеи по оптимизации и доработке приветствуются =)
Конфигурация - Slackware Linux 12, pptpd v1.3.4, pppd version 2.4.5, UTM5
Скрипт /netup/utm5/scripts/pptp_up
Код: Выделить всё
#!/bin/sh
AWK=/bin/awk
CAT=/bin/cat
GREP=/bin/grep
KILL=/bin/kill
MYSQL="mysql -N --host=DBHOST --user=DBUSER --password=DBPASSWORD DBNAME"; #Задаем параметры базы данных
IP=${1} #Получаем ip подключившегося клиента
LIMIT=${3} #Получаем лимит входящей скорости
ACC_ID=${2} #Получаем ID аккаунта
PPP_ID=`/sbin/route -n|grep "$IP "|awk {'print $8'}` #Определяем имя интерфейса который создался для клиента
BLOCK=`echo "select is_blocked from accounts where id=$ACC_ID;"|${MYSQL}`; #Проверяем, не заблокирован ли аккаунт.
if [ "$BLOCK" -eq "0" ]; #Если не заблокирован, то
then
/sbin/tc qdisc add dev $PPP_ID root tbf rate ${LIMIT}Kbit latency 50ms burst $[${LIMIT}*1024]; #Ограничиваем пропускную способность на интерфейс
iptables -A FORWARD -d $IP/32 -s 0/0 -j ACCEPT; #Разрешаем форвард к клиенту
iptables -A FORWARD -d 0/0 -s $IP/32 -j ACCEPT; #Разрешаем форвард от клиента
else #Если заблокировано
echo "Account is blocked"; #выводим в лог
exit 1 #Выходим
fi
При открытии сессии, для указанного тарифного плана:
Код: Выделить всё
/netup/utm5/scripts/pptp_up FRAMED_IP ACC_ID *Лимит скорости в килобитах*
При эвенте: закрытие сессии скрипт /netup/utm5/scripts/pptp_down
Код: Выделить всё
#!/bin/sh
AWK=/bin/awk
CAT=/bin/cat
GREP=/bin/grep
KILL=/bin/kill
IP=${1} #Получаем IP
PPP_ID=`/sbin/route -n|grep "$IP "|awk {'print $8'}`#Узнаем название интерфейса
tc qdisc del dev $PPP_ID root tbf #Удаляем правило шейпера
iptables -D FORWARD -s 0/0 -d $IP/32 -j ACCEPT; # удаляем
iptables -D FORWARD -d 0/0 -s $IP/32 -j ACCEPT; # Форварды
Код: Выделить всё
/netup/utm5/scripts/pptp_down FRAMED_IP
Идеи по оптимизации и доработке приветствуются =)