Jump to content

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

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

 

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

 

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

 

mpd5.5 FreeBSD 8.2

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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()

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

mrlexus

 

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

 

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

Share this post


Link to post
Share on other sites

mrlexus

 

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

 

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

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

Share this post


Link to post
Share on other sites

roysbike

 

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

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.