BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 04 июл 2025, 23:18

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 26 ] 
Автор Сообщение
СообщениеДобавлено: 07 ноя 2008, 16:17 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
Существует ли такая возможность когда у клиента "-" чтобы происходило соединение но при заходе на любой сайт его перенаправляло на определнную страничку на которой написано что у него не хватает денег на счету и надо счет пополнить?
Заранее благодарен


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 ноя 2008, 17:39 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
http://wiki.bgbilling.ru/index.php/%D0% ... _DialUP.29
Детальное информирование абонентов о причинах ошибки 691


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 18 ноя 2008, 17:06 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
в нем сложно разобраться.
там есть скрипт который передает accept вместо reject.
хотелось бы чтобы с "-" пускало, присваивало определенный ип из диапазона, а дальше сделать так чтобы все запросы с этих ип редиректились на определенную страницу, где и будут описаны возможные проблемы
там описан метод для cisco, как реализовать это в связке freebsd+mpd мозгов не хватает
хотим купить биллинг, осталось научиться реализовать пару штук и все будет готово :roll:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 ноя 2008, 01:01 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
m2pod писал(а):
в нем сложно разобраться.

не правда Ваша, там все достаточно банально и просто ...
m2pod писал(а):
там описан метод для cisco, как реализовать это в связке freebsd+mpd

помимо регистрации ошибок, там описаны RADIUS атрибуты, все что Вам надо - удалить все ненужное Вам (читай - регистрацию ошибок) прописать RADIUS атрибуты соответствующие Вашему NAS и все! ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 20 ноя 2008, 14:14 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
проблему вызвало вот это


// Cisco-AV-Pair, устанавливаем WCCP-редирект на интерфейс
rva = new RadiusVendorAttribute( 9, 1 );
rva.setStringValue( "lcp:interface-config=ip wccp web-cache redirect in" );

// Cisco-AV-Pair, Устанавливаем access-list 155 на интерфейс
rvaAcc = new RadiusVendorAttribute( 9, 1 );
rvaAcc.setStringValue( "ip:inacl=155" );

с mpd как?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 20 ноя 2008, 17:34 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
m2pod писал(а):
проблему вызвало вот это


// Cisco-AV-Pair, устанавливаем WCCP-редирект на интерфейс
rva = new RadiusVendorAttribute( 9, 1 );
rva.setStringValue( "lcp:interface-config=ip wccp web-cache redirect in" );

// Cisco-AV-Pair, Устанавливаем access-list 155 на интерфейс
rvaAcc = new RadiusVendorAttribute( 9, 1 );
rvaAcc.setStringValue( "ip:inacl=155" );

с mpd как?

т.е. у Вас проблемы с тем чтобы выдать юзеру отдельную IP подсеть которую потом спокойненько так заворачивать на Ваш сервер статистики?
например как то так:
Код:
ipfw add fwd 127.0.0.1,порт tcp from подсеть_неплательщиков to any 80

где
"порт" - порт на котором слушает Ваш НТТР сервер и где висит страничка с уведомлением о необходимости оплаты
"подсеть" - подсеть для неплательщиков

за точность синтаксиса не ручаюсь но суть Вы надеюсь поймете ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 20 ноя 2008, 19:31 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
не пускает меня, пишет ошибка баланса
вот сам скрипт
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 java.util.*;

// event.getRequest|getResponse|getLogin|getContract|getErrorCode
login = event.getLogin();

// Ищем пользователя и IP, привязанный к нему в таблице
// "radius_pair_ip_x", где "x" код модуля Dialup.
ps = con.prepareStatement( "SELECT ip FROM radius_pair_ip_1 WHERE id=?" );

ps.setInt( 1, login.getId() );
rs = ps.executeQuery();

login_ip = 0;
while( rs.next() )
login_ip = rs.getInt( 1 );

errCode = event.getErrorCode();

// Если логину не присвоен IP-адрес, то даем AUTH_REJECT.
if( login_ip == 0 )
{
errCode = 2;
response = event.getResponse();
response.setPacketType( RadiusPacket.AUTHENTICATION_REJECT );
}

// 0 - нет ошибки, 2 - ошибка ввода пароля.
if( errCode != 0 && errCode != 2 )
{

response = event.getResponse();

response.setPacketType( RadiusPacket.AUTHENTICATION_ACCEPT );

// Готовим аттрибуты на отдачу

// Service-Type = 2
raSt = new RadiusAttribute( 6 );
raSt.setIntValue( 2 );

// Framed-Protocol = 1
raFp = new RadiusAttribute( 7 );
raFp.setIntValue( 1 );

// Framed-IP-Address
raIp = new RadiusAttribute( 8 );
raIp.setIntValue( login_ip );

// Session-Timeout = 900
raStm = new RadiusAttribute( 27 );
raStm.setIntValue( 900 );

rva = new RadiusVendorAttribute( 12341, 1 );
rva.setStringValue( "lcp:interface-config=ipfw add fwd 127.0.0.1 ip from 10.0.7.0/24 to any 80" );

rvaAcc = new RadiusVendorAttribute( 12341, 1 );
rvaAcc.setStringValue( "ip:inacl=155" );

response.addAttribute( raStm );
response.addAttribute( raSt );
response.addAttribute( raFp );
response.addAttribute( raIp );
response.addVendorAttribute( rva );
response.addVendorAttribute( rvaAcc );
}

не пускает наверно по причине что не присваивается ип, в скрипте написано что там берется из какойто таблицы. Надо чтобы присваивался ип из подсети 10.0.7.0. где это вписать? :oops:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 20 ноя 2008, 20:10 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
m2pod писал(а):
не пускает наверно по причине что не присваивается ип, в скрипте написано что там берется из какойто таблицы. Надо чтобы присваивался ип из подсети 10.0.7.0. где это вписать? :oops:

так ведь Вам надо IP присвоить, а то что в скрипте есть - это то что используется человеком в его конкретной ситуации! т.е. если Вы это не используете - то и не пишите это в скрипт! как в MPD адреса назначаются? там есть понятие "указать из радиуса пул адресов"?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 ноя 2008, 14:20 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
1)а можно как-нибудь прописать отдельный пул в диал-ап модуле и его как то тут указать?
2)где идет проверка что у клиента отрицательный баланс?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 ноя 2008, 15:57 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Пулами радиуса воспользоваться не получится, т.к. скрипт отрабатывает после всех обработок радиус-сервера. Можно держать пул в памяти, либо в базе. Где-то в форуме уже проскакивало сообщение по этой теме..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 ноя 2008, 17:14 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
говоря про пулы адресов я имел в виду прежде всего нечто в духе:
Код:
import bitel.billing.server.radius.*;
import bitel.billing.server.script.event.*;

errCode = event.getErrorCode();

if (errCode == 4 || errCode == 33) {
    print("Contract balance zero or contract not open!");

    resp = event.getResponse();
    resp.setPacketType(RadiusPacket.AUTHENTICATION_ACCEPT);

    // Service-Type = 2
    ra1 = new RadiusAttribute(6);
    ra1.setIntValue(2);

    // Framed-Protocol = 1
    ra2 = new RadiusAttribute(7);
    ra2.setIntValue(1);

    // Session-Timeout = 300
    ra3 = new RadiusAttribute(27);
    ra3.setIntValue(300);

    // Cisco-AVPair's
    rva1 = new RadiusVendorAttribute(9, 1);
    rva1.setStringValue("lcp:interface-config=ip unnumbered loopback 1");

    rva2 = new RadiusVendorAttribute(9, 1);
    rva2.setStringValue("ip:addr-pool=stat");

    response.addAttribute(ra1);
    response.addAttribute(ra2);
    response.addAttribute(ra3);
    response.addVendorAttribute(rva1);
    response.addVendorAttribute(rva2);
}

т.е. указание NAS-у на то что адрес надо брать из спец. пула адресов который никуда дальше NAS-а и статистики не пойдет ... разве в MPD нет такого функционала? или он может только выдать конкретный адрес через Framed-IP-Address и все?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 ноя 2008, 20:48 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
просветите уже по этому вопросу, а то остался последний штрих и все никак


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 ноя 2008, 21:14 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
MPD понимает атрибут Framed-Pool (код "88")?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 ноя 2008, 13:53 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
Mpd implements dynamic IP addresses pool management. When user is authenticated and auth backend have not provided IP address, it can be taken from pool. To make it work you should create one or more address pools with 'set ippool add ...' command and define which pool should be used with 'set ipcp ranges ... ippool ...' command, radius-auth Framed-Pool attribute or ext-auth FRAMED_POOL attribute.

set ippool add pool first last

This command creates new IP address pool if it not exists and adds specified address range to it.

насколько я понял надо в конфиге мпд прописать этот самый пул адресов, далее где то прописать FRAMED_POOL, тоесть будет браться оттуда и все. главное чтобы можно было присвоить ип из определенной подсети, а потом когда клиент его получит фаер на шлюзе сам завернет его на определенную страничку.
Осталось узнать куда писать этот FRAMED_POOL. подскажите


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 ноя 2008, 18:41 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
допустим у Вас есть 2 пула:
inet - для обычных юзеров
stat - для неплательщиков
создаете эти 2 пула, прописываете там адреса, а затем, подредактировав скрипт постом выше, получим что то в духе:
Код:
import bitel.billing.server.radius.*;
import bitel.billing.server.script.event.*;

errCode = event.getErrorCode();

if (errCode == 4 || errCode == 33) {
    print("Contract balance zero or contract not open!");

    resp = event.getResponse();
    resp.setPacketType(RadiusPacket.AUTHENTICATION_ACCEPT);

    // Service-Type = 2
    ra1 = new RadiusAttribute(6);
    ra1.setIntValue(2);

    // Framed-Protocol = 1
    ra2 = new RadiusAttribute(7);
    ra2.setIntValue(1);

    // Session-Timeout = 300
    ra3 = new RadiusAttribute(27);
    ra3.setIntValue(300);

    // Framed-Pool = stat
    ra4 = new RadiusAttribute(88);
    ra4.setStringValue("stat");

    response.addAttribute(ra1);
    response.addAttribute(ra2);
    response.addAttribute(ra3);
    response.addAttribute(ra4);
}

скрипт не проверен, но общую идею Вы думаю поняли ;)
"обычным юзерам" Вы можете выдавать хоть RADIUS-ом хоть самим MPD правильный пул, а "неплательщикам" - отдавать специальный пул


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 ноя 2008, 13:15 
Не в сети

Зарегистрирован: 22 ноя 2008, 01:17
Сообщения: 22
Карма: 0
snark писал(а):
допустим у Вас есть 2 пула:
inet - для обычных юзеров
stat - для неплательщиков
создаете эти 2 пула, прописываете там адреса, а затем, подредактировав скрипт постом выше, получим что то в духе:
Код:
import bitel.billing.server.radius.*;
import bitel.billing.server.script.event.*;

errCode = event.getErrorCode();

if (errCode == 4 || errCode == 33) {
    print("Contract balance zero or contract not open!");

    resp = event.getResponse();
    resp.setPacketType(RadiusPacket.AUTHENTICATION_ACCEPT);

    // Service-Type = 2
    ra1 = new RadiusAttribute(6);
    ra1.setIntValue(2);

    // Framed-Protocol = 1
    ra2 = new RadiusAttribute(7);
    ra2.setIntValue(1);

    // Session-Timeout = 300
    ra3 = new RadiusAttribute(27);
    ra3.setIntValue(300);

    // Framed-Pool = stat
    ra4 = new RadiusAttribute(88);
    ra4.setStringValue("stat");

    response.addAttribute(ra1);
    response.addAttribute(ra2);
    response.addAttribute(ra3);
    response.addAttribute(ra4);
}

скрипт не проверен, но общую идею Вы думаю поняли ;)
"обычным юзерам" Вы можете выдавать хоть RADIUS-ом хоть самим MPD правильный пул, а "неплательщикам" - отдавать специальный пул


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 ноя 2008, 13:37 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
Easy писал(а):
А если ситуация, что серверов доступа несколько? :\ Для каждого свой стат пул делать, отличный от всех других? Т.к. на статистику то они через маршрутизатор бегают, поэтому адреса везде должны быть уникальными...

да хоть стопицот серверов! что мешает использовать на каждом из них один и тот же пул, с одним и тем же именем, с одними и теми же адресами которые будут просто NAT-ится для доступа к статистике? ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 ноя 2008, 14:09 
Не в сети
Клиент

Зарегистрирован: 12 фев 2007, 18:49
Сообщения: 335
Карма: 15
snark писал(а):
Easy писал(а):
А если ситуация, что серверов доступа несколько? :\ Для каждого свой стат пул делать, отличный от всех других? Т.к. на статистику то они через маршрутизатор бегают, поэтому адреса везде должны быть уникальными...

да хоть стопицот серверов! что мешает использовать на каждом из них один и тот же пул, с одним и тем же именем, с одними и теми же адресами которые будут просто NAT-ится для доступа к статистике? ;)

Ну натить не совсем правильно, иначе откуда страничка, на которую перенаправит пользователя, узнает кто на нее пришел, чтобы высветить баланс, код ошибки и т.п.
Есть мысль: определять статичную IP-шку для опред. реалма, на который обычным коннектом нельзя выйти, зато она будет подставляться при предобработки радиус-запроса... Этим мы обеспечим уникальность и идентификацию...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 ноя 2008, 19:03 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
проблему решил, все ок, спасибо всем кто помогал :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 дек 2008, 18:59 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
в логах отработки появляется это

GENERATE_TIME: 01.12.08 15:18:20
EXECUTION_STOP_TIME: 01.12.08 15:18:21
PROCESS_TIME: 54

OUT:
Contract balance zero or contract not open!


ERROR:


EXCEPTIONS:
Sourced file: inline evaluation of: ``import bitel.billing.server.radius.*; import bitel.billing.server.script.event . . . '' : Attempt to resolve method: addAttribute() on undefined variable or class name: responseSourced file: inline evaluation of: ``import bitel.billing.server.radius.*; import bitel.billing.server.script.event . . . '' : Attempt to resolve method: addAttribute() on undefined variable or class name: response : at Line: 28 : in file: inline evaluation of: ``import bitel.billing.server.radius.*; import bitel.billing.server.script.event . . . '' : response .addAttribute ( ra1 )

at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHBlock.evalBlock(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHIfStatement.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:158)
at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:247)
at bitel.billing.server.processor.DefaultProcessor.standartAuth(DefaultProcessor.java:187)
at bitel.billing.server.processor.dialup.DialUpProcessor.authenticationProcess(DialUpProcessor.java:106)
at bitel.billing.server.radius.RadiusRequestThread.processRequest(RadiusRequestThread.java:120)
at bitel.billing.server.radius.RadiusRequestThread.run(RadiusRequestThread.java:48)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)


WARNINGS:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 дек 2008, 20:21 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
в скрипте переменная называется resp, однако чуть далее используется имя response
Цитата:
response.addAttribute(ra4);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 дек 2008, 20:41 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
import bitel.billing.server.radius.*;
import bitel.billing.server.script.event.*;

errCode = event.getErrorCode();

if (errCode == 4 || errCode == 33) {
print("Contract balance zero or contract not open!");

resp = event.getResponse();
resp.setPacketType(RadiusPacket.AUTHENTICATION_ACCEPT);

// Service-Type = 2
ra1 = new RadiusAttribute(6);
ra1.setIntValue(2);

// Framed-Protocol = 1
ra2 = new RadiusAttribute(7);
ra2.setIntValue(1);

// Session-Timeout = 300
ra3 = new RadiusAttribute(27);
ra3.setIntValue(300);

// Framed-Pool = nomoney
ra4 = new RadiusAttribute(88);
ra4.setStringValue("nomoney");

resp.addAttribute(resp);
resp.addAttribute(ra1);
resp.addAttribute(ra2);
resp.addAttribute(ra3);
resp.addAttribute(ra4);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 дек 2008, 12:31 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
GENERATE_TIME: 02.12.08 09:04:25
EXECUTION_STOP_TIME: 02.12.08 09:04:25
PROCESS_TIME: 23

OUT:
Contract balance zero or contract not open!


ERROR:


EXCEPTIONS:


WARNINGS:

скрипт отрабатывает без ошибок, не не дает accept вместо reject.
попросту не пускает


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 дек 2008, 17:43 
Не в сети

Зарегистрирован: 29 окт 2008, 18:03
Сообщения: 212
Карма: 0
как оказалось коннект есть, но билинг пишит "Ошибка баланса" и не отображает сессии. Тоесть надо было саму зайти под минусовой учеткой


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 03 дек 2008, 17:24 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Биллинг и не будет их учитывать. А зачем их учет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 03 дек 2008, 18:22 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
m2pod писал(а):
как оказалось коннект есть, но билинг пишит "Ошибка баланса" и не отображает сессии.


отказы не попадают в сессии . они попадают в ошибки (если смотреть в мониторе)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.070s | 69 Queries | GZIP : On ]