|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Boris Samorodov 2:5020/400 13 Apr 2004 13:40:50 To : Cyrill Malevanov Subject : Re: MPD+Billing -------------------------------------------------------------------------------- Hi! Cyrill Malevanov <Cyrill.Malevanov@f790.n5030.z2.fidonet.org> wrote: CM> 10 Апр 04, Kosha wrote to Cyrill Malevanov: CM>> DF>>> Такая схема не решает проблемы сброса юзеров CM>> K>> Да... Я сам пишу замену RADIUS-Accounting'у для этого... CM>>> С аккаунтингом проблем нет. А вот со сбросом - есть. K>> Он у меня и сбрасывать умеет... CM> Как? Как раз по теме. Пытаюсь написать небольшую документацию к патчу для mpd. Текст ещё сыроват. Прежде чем выставлять на всеобщее обозрение и пользование, хотелось представить её All'у. - --- patch.README --- Краткое описание патча для mpd-3.17, MD5 (mpd-3.17-drop-user-1.diff) = dbd2fef170949b5890c4f77f1a9ced48 размер файла 7075. I. Общие замечания. 1. Сам патч расположен по адресу: ftp://ftp.ufanet.ru/pub/boco/mpd-3.17-drop-user-1.diff Автор: Damir Bikmuhametov aka boko. 2. Все дополнительные возможности, предоставляемые патчем, независимы друг от друга. Если нужна только часть его функций -- редактируйте патч. Код достаточно прозрачный. II. Возможности. 1. Корректная выдача ip-адреса клиенту в случае, если mpd настроен на получение его от радиуса, а радиус-сервер не высылает параметр Framed-IP-Address. Оригинальная версия mpd в таком случае выдаёт клиенту ip-адрес 0.0.0.0. Что ведёт к невозможности установления связи. 2. Возможность отсылать Accounting-Update на радиус сервер не только по времени, но и в зависимости от объёма принятого и/или переданного трафика. По умолчанию параметры update-limit-out и update-limit-in равны 0. Если в mpd.conf задать ненулевые значения: set radius update-limit-out X set radius update-limit-out Y (где X, Y -- трафик в байтах) то при наступлении очередного времени формирования acct-update, проверяется условие превышения лимитов. В случае не превышения лимитов update не формируется. Смысл: не перегружать радиус и его логи. BUG: При следующем сформированном и отправленном acct-update в логе mpd появляется запись: ----- Apr 12 17:27:41 srv mpd: [<name>] RADIUS: RadiusGetParams: WARNING no MPPE-Keys received, MPPE will not work ----- MPPE на самом деле работает. Причину появления этой строки автор обещает устранить в следующей версии патча. 3. Hазначение ppp node имени типа "mpd-<name>" вместо "mpd<pid>-name". Поскольку длина имени netgraph node ограничена 15 символами, а стандартное обозначение ppp node состоит из "mpdNNNNN-pptpXX", то более 99 нод создать нельзя. Патч позволяет обойти эту проблему. 4. Завершение сеанса связи, если радиус-сервер прислал vendor-specific аттрибут 154. Значение атрибута 0 -- продолжение сеанса, 1 -- завершение. В словарь dictionary.mpd (VENDOR mpd 12341) добавляются строки: ----- ATTRIBUTE Drop-User 154 integer mpd VALUE Drop-User No 0 VALUE Drop-User Yes 1 ----- III. Mini-HOW-TO 1. Update limits При включённых update limits можно ставить достаточно маленький временной интервал acct-update и устанавливать требуемые update-limits-[in]|[out]. Внутренняя статистика в mpd в любом случае срабатывает один раз в минуту. Поэтому, добавив строку set radius update 60 работы mpd абсолютно не прибавится. Разве что на сравнение с установленными лимитами. Конкретные значения лимитов для всех, конечно, разные. Hо начальные значения от 100000 до 1000000 мне кажутся вполне разумными. Далее анализируйте результаты и изменяйте значения. Вплоть до индивидуальных лимитов для отдельных абонентов. 2. Drop-User Для того, чтобы mpd сбросил линк, радиус-сервер должен прислать этот самый аттрибут со значением "Yes". Hо, вероятно, формирование такого пакета -- дело не самого радиуса, а биллинговой системы, которая стоит за ним. В этой системе обрабатываются ACCT пакеты трёх типов: Start, Stop, Update. Stop в данном контексте не интересен. При Start-пакете используются другие методы определения возможности начала сессии. Поэтому имеет смысл рассматривать только Update-пакеты. При достижении лимитов достаточно в пакет, предназначенный для отправки ответа радиусу, добавить необходимую пару с оператором "=". Что-то типа такого: Hовая_пара = Создать_пару("Drop-User", "Yes", T_OP_EQ); Добавить_пару(Указатель_на_пары, Hовая_пара); Hа моём стенде установлен freeradius-0.9.3, freenibs-0.0.3-bf3. патч, позволяющий использовать сброс пользователя: -------- - --- rlm_nibs.c.orig Mon Apr 12 22:27:58 2004 +++ rlm_nibs.c Tue Apr 13 01:01:41 2004 @@ -1139,6 +1139,8 @@ radlog(L_INFO, querystr); if (nibs_error != NULL) free(nibs_error); nibs_user_kill(inst, request); + pair = pairmake("Drop-User", "Yes", T_OP_EQ); + pairadd(&request->packet->vps, pair); } } -------- Boris Samorodov aka bsam - --- README ended --- CM> WBR, Cyrill WBR -- bsam --- ifmail v.2.15dev5.3 * Origin: InPharmTech (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/4442c1b52a21.html, оценка из 5, голосов 10
|