Перейти к содержимому
Калькуляторы

Изменение скоростей в mpd5 Повышение скорости конкретного пользователя на NAS'е

Существует ли возможность изменения параметров ng интерфейса уже поднятой сессии непосредственно на NAS'e? То есть при поднятии сессии mpd получает параметры с RADIUS и в зависимости от какого-либо параметра (IP не подойдет) повышает лимит скорости интерфейса, либо оставляет его без изменений. Через pipe и ipfw, как я понимаю, скорость можно только урезать.

 

Есть какие варианты через консоль mpd, если они вообще есть?

 

Нужно это для реализации "турбо-кнопки". Понятно, что это можно сделать через билинг/RADIUS, чтобы на NAS приходили уже правильные параметры, но ввиду некоторых специфических особенностей организации сети и тарифных планов, хотелось бы сделать все на NAS.

 

mpd5.5 FreeBSD 8.2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

из консоли - никак, только ковырянием ng ноды этого интерфейса походу

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяюсь. Только мы ищем вариант обхода ng_car. Хотим просто снимать скоростные ограничения сразу для всех авторизованных абонентов ночью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

CoA же вроде как поддерживается, и изменение скорости по CoA запросу - тоже...

Да и снимать ограничения тождественно установке скажем 100 мбит ограничения в общем-то...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

CoA же вроде как поддерживается, и изменение скорости по CoA запросу - тоже...

Да и снимать ограничения тождественно установке скажем 100 мбит ограничения в общем-то...

ВОт наша turbo кнопка.

#!/usr/bin/env python
from datetime import datetime
import string
import sys
import os

hosts = ["192.168.53.2", "192.168.53.7", "192.168.53.8", "192.168.53.9", "192.168.53.10", "192.168.53.11", "192.168.53.14", "192.168.53.15", "192.168.53.13"]
port = 3799
password = "password"
radclient = "/usr/local/bin/radclient"

logins = []
logFile = open("/var/log/billing/turbo.log", "a+")
logFile.write("%s [sTART] Set Turbo Mode\n" % datetime.now())

if len(sys.argv) > 1 and os.path.isfile(sys.argv[1]):
   logFile.write("%s [ARGUMENTS] %s \n" % (datetime.now(), sys.argv[1]))
   lgns = open(sys.argv[1])
   for login in lgns:
logins.append(login.rstrip())
logFile.write("%s [ADD] To List %s\n" % (datetime.now(), login.rstrip()))
   lgns.close()
   os.unlink(sys.argv[1])
   for login in logins:
for host in hosts:
    lgn = login.split("-")[0]
    speed = login.split("-")[1]
    set_speed_command = "echo \"User-Name := %s, mpd-limit += 'in#1=all rate-limit %s', mpd-limit += 'out#1=all rate-limit %s'\" | %s %s:%d coa %s" % (lgn, speed, speed, radclient, host, port, password)
    os.system(set_speed_command)
    logFile.write("%s [sEND] %s\n" % (datetime.now(), set_speed_command))
    logFile.write("%s [TURBO] Username: %s\n" %(datetime.now(), lgn))
logFile.write("%s [sTOP]\n" % datetime.now())
logFile.close()

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кусок моего старого скрипта динамического шейпера под utm5. Как один из вариантов управления скоростью:

	$ebs=floor($speed_shape/8);
$cbs=$ebs/2;
$if_up="/usr/sbin/ngctl msg ".$interface.":inet.1-0-m setconf { upstream={ cbs=".$cbs." ebs=".$ebs." cir=".$speed_shape." greenAction=1 yellowAction=1 redAction=2 mode=3 } downstream={ cbs=".$cbs." ebs=".$ebs." cir=".$speed_shape." greenAction=1 yellowAction=1 redAction=2 mode=3 } }";
$if_dw="/usr/sbin/ngctl msg ".$interface.":inet.0-0-m setconf { upstream={ cbs=".$cbs." ebs=".$ebs." cir=".$speed_shape." greenAction=1 yellowAction=1 redAction=2 mode=3 } downstream={ cbs=".$cbs." ebs=".$ebs." cir=".$speed_shape." greenAction=1 yellowAction=1 redAction=2 mode=3 } }";

exec($if_up);
exec($if_dw);

Где: $speed_shape - скорость в Кбит/с, $interface - ngXX

Соотвественно, надо заранее знать имя ноды. У меня сохранялость в самодельную табличку скриптами up/down значения login/ip/ng* и пр., затем оттуда бралось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

mrlexus

 

Да, спасибо, что-то в этом духе - теперь понятно куда копать :)

 

Остается актуальным вопрос, что использовать в качестве триггера. IP не подойдет, остальные параметры mpd, как я понимаю, тоже. Можно ли как-то поймать "неважный" параметр от RADIUS'a или включить в словарь новый, чтобы mpd отработал скрипт исходя из его значения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

mrlexus

 

Да, спасибо, что-то в этом духе - теперь понятно куда копать :)

 

Остается актуальным вопрос, что использовать в качестве триггера. IP не подойдет, остальные параметры mpd, как я понимаю, тоже. Можно ли как-то поймать "неважный" параметр от RADIUS'a или включить в словарь новый, чтобы mpd отработал скрипт исходя из его значения?

я не понял вашего вопроса. По логину можно обратится к mpd5 и сменить скорость

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

roysbike

 

Просто хотелось, чтобы все происходило на NAS в момент поднятия сессии. Пока остановился на том, что скрипт на NAS периодически будет проверять сессии на наличие условного параметра, и при наличии такого менять скорость в зависимости от значения этого параметра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас