forum.bitel.ru
http://forum.bitel.ru/

Передача атрибутов Radius
http://forum.bitel.ru/viewtopic.php?f=5&t=2055
Страница 1 из 1

Автор:  Vorojeikin [ 20 мар 2009, 12:40 ]
Заголовок сообщения:  Передача атрибутов Radius

Доброго времени суток!
Работает связка mpd 4.4.1 +BgBilling 4.5, модуль VPN 4.5.
Передаем в файрволл ipfw посредством Radius атрибут mpd-table:
1=172.x.x.x 128, где 172.х.х.х - адрес, выдаваемый mpd подключившемуся клиенту.
Для этого пробиваем это правило в настройках атрибутов Radius _каждого_ договора. Вопрос в следующем - как можно сделать так, чтобы _не_ прописывать эти атрибуты в _каждом_ договоре (что довольно утомительно), а создать отдельный атрибут в конфиге модуля и подключить его к конкертному тарифному плану в справочнике? Проблема заключается в том, как выцепить этот самый IP-адрес, выданный клиенту? Т.е., по аналогии с модулем IPN сделать что-то типа
mpd-table 1= {A} 128.
Спасибо.

Автор:  snark [ 21 мар 2009, 02:15 ]
Заголовок сообщения: 

скриптом на событие RADIUS аутентификации не получится?

Автор:  Администратор [ 23 мар 2009, 17:05 ]
Заголовок сообщения: 

Такой возможности нет.
В MPD же можно правила не интерфейс клиента передавать. Чем не подходит?

Автор:  gate [ 19 июн 2009, 01:31 ]
Заголовок сообщения: 

как можно передать IP в таблицу ipfw?

Автор:  snark [ 19 июн 2009, 21:06 ]
Заголовок сообщения: 

gate писал(а):
как можно передать IP в таблицу ipfw?

мануал MPD говорит:
MPD manual писал(а):
You can write in your RADIUS configuration something like:
Код:
mpd-table += "1=10.0.0.1",
mpd-table += "1=10.0.0.15",
mpd-pipe += "1=bw 10Kbyte/s",
mpd-pipe += "5=bw 20Kbyte/s",
mpd-rule += "1=pipe %p1 all from any to table\\(%t1\\) in",
mpd-rule += "2=pipe %p5 all from table\\(%t1\\) to any out",
mpd-rule += "100=allow all from any to any",

When mpd receives these parameters it will call ipfw(8) to create firewall rules, pipes and queues with unique numbers starting from 10000 (configurable via 'set global start...'). %rX, %pX, %qX, %tX macroses will be expanded within mpd-rule and mpd-queue. To the end of each rule will be added "via ngX" to make the rule apply only to that client's networking interface.

As a result of this example we would get these commands executed:
Код:
ipfw table 32 add 10.0.0.1
ipfw table 32 add 10.0.0.15
ipfw pipe 10000 config bw 10Kbyte/s
ipfw pipe 10001 config bw 20Kbyte/s
ipfw add 10000 pipe 10000 all from any to table\(32\) in via ng0
ipfw add 10001 pipe 10001 all from table\(32\) to any out via ng0
ipfw add 10002 allow all from any to any via ng0

When the link goes down, all created rules will be removed.

Note: As soon as mpd executes ipfw commands using shell, shell's special characters like "(" and ")" must be slashed.

Вы это пробывали?

Автор:  gate [ 23 июн 2009, 04:06 ]
Заголовок сообщения: 

а каким параметром указать IP можно?
mpd-table += "1=%ip"

Автор:  snark [ 23 июн 2009, 16:51 ]
Заголовок сообщения: 

gate писал(а):
а каким параметром указать IP можно?

давайте по порядку ... Вы чего именно хотите сделать? скорость поюзерно нарезать? так это можно обычными средствами сделать, без таблиц ...

Автор:  gate [ 27 июн 2009, 00:57 ]
Заголовок сообщения: 

Код:
import bitel.billing.server.call.bean.Login;
import bitel.billing.server.radius.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.server.tariff.bean.*;
import bitel.billing.common.IPUtils;
import bitel.billing.server.util.*;
import java.util.*;
import java.math.*;

errCode = event.getErrorCode();

if (errCode == 0) {
  cid = event.getContractID();
  evdate=event.getGenerateTime();
  ctm =  new ContractTariffManager( con );
  currentTariff = ctm.getContractTariff( cid, evdate).getTariffPlanID();
  if( currentTariff == null ) { error( "Current tariff not found" ); return; }
  if (currentTariff == 1) {
    response = event.getResponse();
    ip = response.getIntAttribute(RadiusStandartAttributes.Framed_IP_Address);
    ipaddr = IPUtils.convertIpToString( ip );
    rva = new RadiusVendorAttribute( 12341, 4 );
    rva.setStringValue("1="+ipaddr);
    response.addVendorAttribute( rva );
  }
}

Автор:  snark [ 29 июн 2009, 15:44 ]
Заголовок сообщения: 

т.е. в зависимости от тарифа выдавать некий IP адрес?

Автор:  gate [ 30 июн 2009, 12:46 ]
Заголовок сообщения: 

да (в нужную table на NAS), просто уже есть написанный софт, который распределяет полосу...

Автор:  snark [ 30 июн 2009, 15:59 ]
Заголовок сообщения: 

в конфиге модуля dialup прописываем пулы адресов:
Код:
pools.tbl1=1.1.1.1-1.1.1.255
pools.tbl2=2.2.2.1-2.2.2.255
pools.tbl3=3.3.3.1-3.3.3.255

там же прописываем RADIUS атрибуты для этих пулов
Код:
attrset.1.title=IP адреса для таблицы 1
attrset.1.attributes=Framed-Pool=tbl1

attrset.2.title=IP адреса для таблицы 2
attrset.2.attributes=Framed-Pool=tbl2

attrset.3.title=IP адреса для таблицы 3
attrset.3.attributes=Framed-Pool=tbl3

ну и добавляете RADIUS атрибуты в тариф (см. скрины):

Вложения:
howto_1.jpg
howto_1.jpg [ 20.62 КБ | Просмотров: 5861 ]
howto_2.jpg
howto_2.jpg [ 13.34 КБ | Просмотров: 5861 ]
howto_3.jpg
howto_3.jpg [ 14.53 КБ | Просмотров: 5861 ]

Автор:  snark [ 30 июн 2009, 16:04 ]
Заголовок сообщения: 

в дополнение к выше перечисленным атрибутам у Вас есть некий атрибут:
Код:
attrset.4.title=Скорость 128k/128k
attrset.4.attributes=foo;bar;baz

который в т.ч. закинет нужные адреса в нужную таблицу, тогда Ваш тариф пример вид:

P.S. на скринах видно что пулами адресов Вы можете управлять прямо из радиуса (даны все 3 пула) ... с атрибутами точно так же

Вложения:
tbl1.jpg
tbl1.jpg [ 11.97 КБ | Просмотров: 5861 ]
tbl2.jpg
tbl2.jpg [ 12.71 КБ | Просмотров: 5861 ]
tbl3.jpg
tbl3.jpg [ 12.77 КБ | Просмотров: 5861 ]

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/