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

Изменение скоростей в 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 периодически будет проверять сессии на наличие условного параметра, и при наличии такого менять скорость в зависимости от значения этого параметра.

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


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.