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

Ошибка НЕ 691

Есть в наличии LanBilling 1.9 установленный на FreeBSD 7.2 + MPD5.

Когда биллинг отказывает абоненту в подключении выдается ошибка 691, однако в некоторых случаях выдается другое сообщение об ошибке

 

http://content.foto.mail.ru/mail/vel-kom/1/i-2.jpg

 

в лог MPD при этом пишется, затем дает еще 2 попытки авторизации и ошибка 734

 

Mar 16 14:16:56 localhost mpd: [L-1] AUTH: RADIUS returned: failed

Mar 16 14:16:56 localhost mpd: [L-1] AUTH: ran out of backends

Mar 16 14:16:56 localhost mpd: [L-1] CHAP: Auth return status: failed

Mar 16 14:16:56 localhost mpd: [L-1] CHAP: Reply message: ^AE=691 R=1

Mar 16 14:16:56 localhost mpd: [L-1] CHAP: sending FAILURE #1 len: 14

Mar 16 14:16:56 localhost mpd: [L-1] LCP: authorization failed

 

 

Когда выдается ошибка 691, в лог пишется

 

Mar 16 14:18:44 localhost mpd: [L-1] AUTH: RADIUS returned: failed

Mar 16 14:18:44 localhost mpd: [L-1] AUTH: ran out of backends

Mar 16 14:18:44 localhost mpd: [L-1] CHAP: Auth return status: failed

Mar 16 14:18:44 localhost mpd: [L-1] CHAP: Reply message: E=691 R=0 M=Login incorrect

Mar 16 14:18:44 localhost mpd: [L-1] CHAP: sending FAILURE #1 len: 31

Mar 16 14:18:44 localhost mpd: [L-1] LCP: authorization failed

 

 

Что надо подправить, что бы всегда выдавалась ошибка 691, когда неудачная авторизация в биллинге?

Изменено пользователем planken

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


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

жывотное ввело правильный логин, но неверный пароль, поэтому такая вот бяка

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


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

жывотное ввело правильный логин, но неверный пароль, поэтому такая вот бяка

ответ не верный - во-первых жывотных к интернету не допускаем

во-вторых, такая же байда выскакивает, когда отрицательный баланс или достигнут лимит трафика

Изменено пользователем planken

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


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

жывотное ввело правильный логин, но неверный пароль, поэтому такая вот бяка

ответ не верный - во-первых жывотных к интернету не допускаем

во-вторых, такая же байда выскакивает, когда отрицательный баланс или достигнут лимит трафика

 

правильно а что вы хотите, чтоб винда вам написала "Пополните баланс" или "купите еще мегабайтов"? ))))

 

 

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

 

691 ошибка ет нормально)))научите тех. поддержку (или кто там у вас) сразу смотреть на балланс звонящего с такой ошибкой. потом ессесно уже его логин и пасс...

Изменено пользователем parazit74

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


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

Есть в наличии LanBilling 1.9 установленный на FreeBSD 7.2 + MPD5.

Когда биллинг отказывает абоненту в подключении выдается ошибка 691, однако в некоторых случаях выдается другое сообщение об ошибке

в лог MPD при этом пишется, затем дает еще 2 попытки авторизации и ошибка 734

Mar 16 14:16:56 localhost mpd: [L-1] CHAP: Reply message: ^AE=691 R=1

Что надо подправить, что бы всегда выдавалась ошибка 691, когда неудачная авторизация в биллинге?

Подправить надо что-то в биллинге. За то, что выдается на скриншоте, отвечает параметр R=1.

mpd получает это сообщение от радиуса параметром MS-CHAP-Error

Описание MS-CHAP-Error - в RFC.

Изменено пользователем littlesavage

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


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

Описание MS-CHAP-Error - в RFC.
RFC читать иногда полезно.

 

у нас 691-я ошибка только при вводе неверного логина или пароля.

для уже подключенного (с другого МАК адреса) и заблокированого (системой) аккаунта - 649 и 647.

правда пришлось немного поправить код mpd5, зато пользователю ясно,

когда он сессию завершил некорректно или пароль неверно ввёл

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


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

691 ошибка ет нормально)))научите тех. поддержку (или кто там у вас) сразу смотреть на балланс звонящего с такой ошибкой. потом ессесно уже его логин и пасс...

Товарисч, вы вопрос читали?

Я хочу что бы было 691, а выскакивает повторите ввод пароля, а пароль можно вводить до посинения, т.к. на самом деле баланс нулевой

 

 

Подправить надо что-то в биллинге. За то, что выдается на скриншоте, отвечает параметр R=1.

mpd получает это сообщение от радиуса параметром MS-CHAP-Error

Описание MS-CHAP-Error - в RFC.

Общался с разработчиками из ЛанБаллинг, они сказали, что биллинг в ЛЮБОМ случает дает только два ответа ACCEPT или FAILED, далее ответы интерпретирует NAS (MPD в данном случае) и операционка. RFC почитаю

 

правда пришлось немного поправить код mpd5, зато пользователю ясно,

когда он сессию завершил некорректно или пароль неверно ввёл

что конкретно подправить?

Изменено пользователем planken

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


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

правда пришлось немного поправить код mpd5, зато пользователю ясно,

когда он сессию завершил некорректно или пароль неверно ввёл

что конкретно подправить?

1. файл auth.c функция authAsync()

if (RadiusAuthenticate(auth)) {

} else {

Log...

закоментировать if (auth->success == AUTH_STATUS_SUCCESS)

оставить return;

}

2. в тойже функции в конце auth->why_fail = AUTH_FAIL_INVALID_LOGIN

заменить на auth->why_fail = AUTH_FAIL_NOT_EXPECTED

3. radius.c функция authgetparams()

ищем строку RADIUS: Get MS-CHAP-Error: %s

дописываем проверку:

если 646 присваиваем auth->why_fail = AUTH_FAIL_RESTRICTED_HOURS

если 647 присваиваем auth->why_fail = AUTH_FAIL_ACCT_DISABLED

если 649 присваиваем auth->why_fail = AUTH_FAIL_NO_PERMISSION

 

всё.

далее, радиусом шлём access-accept и ms-chap-error

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


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

Общался с разработчиками из ЛанБаллинг, они сказали, что биллинг в ЛЮБОМ случает дает только два ответа ACCEPT или FAILED, далее ответы интерпретирует NAS (MPD в данном случае) и операционка. RFC почитаю

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

 

Giga-Byte, патч, как я понял, чтобы mpd принимал MS-CHAP-Error при access-accept и считал его ошибкой?

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


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

Giga-Byte, патч, как я понял, чтобы mpd принимал MS-CHAP-Error при access-accept и считал его ошибкой?

я уже не помню тонкостей. пробуйте, может родится другая версия.

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


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

Giga-Byte, патч, как я понял, чтобы mpd принимал MS-CHAP-Error при access-accept и считал его ошибкой?
я уже не помню тонкостей. пробуйте, может родится другая версия.

Я freeradius патчил на тему отдавать VSA при access-reject :)

 

Там любые ошибки из списка можно отдавать: http://support.microsoft.com/kb/824864

Изменено пользователем littlesavage

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


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

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

не правильный пароль

rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=224, length=20

 

лимит трафика

rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=246, length=20

 

абонент отключен

rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=36, length=20

 

не правильный логин

rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=251, length=20

 

отличается только ID, который меняется каждый раз

 

Разработчики ЛанБиллинга сказали, что биллинг дает только ACCEPT или REJECT

Изменено пользователем planken

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


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

Giga-Byte, littlesavage, спасибо за подсказки, у себя тоже самое давно хотел реализовать, только вот не доганял где, буду ковыряться :)

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


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

1. файл auth.c функция authAsync()

if (RadiusAuthenticate(auth)) {

} else {

Log...

закоментировать if (auth->success == AUTH_STATUS_SUCCESS)

оставить return;

}

Это (выделено) опечатка? У меня там if (auth->status == AUTH_STATUS_SUCCESS)
3. radius.c функция authgetparams()

ищем строку RADIUS: Get MS-CHAP-Error: %s

Такой функции не нашел в "своем" radius.c...

Log(LG_RADIUS2, ("[%s] RADIUS: Get MS-CHAP-Error: %s"

есть только в ф-ции RadiusGetParams

вот тут

switch (vendor) {

 

case RAD_VENDOR_MICROSOFT:

switch (res) {

 

case RAD_MICROSOFT_MS_CHAP_ERROR:

if (auth->mschap_error != NULL) {

Freee(auth->mschap_error);

auth->mschap_error = NULL;

}

if (len == 0)

break;

 

/* there is a nullbyte on the first pos, don't know why */

if (((const char *)data)[0] == '\0') {

data = (const char *)data + 1;

len--;

}

tmpval = rad_cvt_string(data, len);

auth->mschap_error = Mdup(MB_AUTH, tmpval, len + 1);

free(tmpval);

 

Log(LG_RADIUS2, ("[%s] RADIUS: Get MS-CHAP-Error: %s",

auth->info.lnkname, auth->mschap_error));

break;

и как тут "впихнуть"?
дописываем проверку:

если 646 присваиваем auth->why_fail = AUTH_FAIL_RESTRICTED_HOURS

если 647 присваиваем auth->why_fail = AUTH_FAIL_ACCT_DISABLED

если 649 присваиваем auth->why_fail = AUTH_FAIL_NO_PERMISSION

или п.3 относится уже к radius.c биллинга, а не mpd?
Изменено пользователем AlKov

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


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

Giga-Byte, патч, как я понял, чтобы mpd принимал MS-CHAP-Error при access-accept и считал его ошибкой?
я уже не помню тонкостей. пробуйте, может родится другая версия.

Я freeradius патчил на тему отдавать VSA при access-reject :)

 

Там любые ошибки из списка можно отдавать: http://support.microsoft.com/kb/824864

А можно патчик посмотреть?

 

VSA in Access-Reject

Symptom: FreeRADIUS is not including VSA attributes in Access-Reject packets. (but it worked in earlier versions of FreeRADIUS)

According RFC 2865 (section 5.44) Vendor-Specific Attributes aren't allow in Access-Reject packets.

This behaviour was fixed in newer versions of FreeRADIUS

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


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

VSA in Access-Reject

Symptom: FreeRADIUS is not including VSA attributes in Access-Reject packets. (but it worked in earlier versions of FreeRADIUS)

According RFC 2865 (section 5.44) Vendor-Specific Attributes aren't allow in Access-Reject packets.

This behaviour was fixed in newer versions of FreeRADIUS

Ага, именно это и патчил.

 

Только на 1 freeradius, 2 не ковырял.

 

--- src/main/util.c.orig        2009-09-05 02:24:19.000000000 +0400
+++ src/main/util.c     2009-09-05 02:24:40.000000000 +0400
@@ -458,6 +458,7 @@
                pairmove2(&vps, &(packet->vps), PW_EAP_MESSAGE);
                pairmove2(&vps, &(packet->vps), PW_MESSAGE_AUTHENTICATOR);
                pairmove2(&vps, &(packet->vps), PW_REPLY_MESSAGE);
+               pairmove2(&vps, &(packet->vps), PW_VENDOR_SPECIFIC);
                break;
        }

--- src/modules/rlm_mschap/rlm_mschap.c.orig    2009-09-05 02:49:14.000000000 +0400
+++ src/modules/rlm_mschap/rlm_mschap.c 2009-09-05 02:50:26.000000000 +0400
@@ -1224,8 +1224,8 @@
                if (do_mschap(inst, request, password, challenge->strvalue,
                              response->strvalue + offset, nthashhash) < 0) {
                        DEBUG2("  rlm_mschap: MS-CHAP-Response is incorrect.");
-                       add_reply(&request->reply->vps, *response->strvalue,
-                                 "MS-CHAP-Error", "E=691 R=1", 9);
+                       /*add_reply(&request->reply->vps, *response->strvalue,
+                                 "MS-CHAP-Error", "E=691 R=1", 9);*/
                        return RLM_MODULE_REJECT;
                }

@@ -1292,8 +1292,8 @@
                if (do_mschap(inst, request, nt_password, mschapv1_challenge,
                              response->strvalue + 26, nthashhash) < 0) {
                        DEBUG2("  rlm_mschap: FAILED: MS-CHAP2-Response is incorrect");
-                       add_reply(&request->reply->vps, *response->strvalue,
-                                 "MS-CHAP-Error", "E=691 R=1", 9);
+                       /*add_reply(&request->reply->vps, *response->strvalue,
+                                 "MS-CHAP-Error", "E=691 R=1", 9);*/
                        return RLM_MODULE_REJECT;
                }

@@ -1333,8 +1333,8 @@
                if (((smb_ctrl->lvalue & ACB_DISABLED) != 0) ||
                    ((smb_ctrl->lvalue & ACB_NORMAL) == 0)) {
                        DEBUG2("  rlm_mschap: SMB-Account-Ctrl says that the account is disabled, or is not a normal account.");
-                       add_reply( &request->reply->vps, *response->strvalue,
-                                  "MS-CHAP-Error", "E=691 R=1", 9);
+                       /*add_reply( &request->reply->vps, *response->strvalue,
+                                  "MS-CHAP-Error", "E=691 R=1", 9);*/
                        return RLM_MODULE_NOTFOUND;
                }

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


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

1. файл auth.c функция authAsync()

if (RadiusAuthenticate(auth)) {

} else {

Log...

закоментировать if (auth->success == AUTH_STATUS_SUCCESS)

оставить return;

}

Это (выделено) опечатка? У меня там if (auth->status == AUTH_STATUS_SUCCESS)

да, верно.
3. radius.c функция authgetparams()

ищем строку RADIUS: Get MS-CHAP-Error: %s

Такой функции не нашел в "своем" radius.c...

Log(LG_RADIUS2, ("[%s] RADIUS: Get MS-CHAP-Error: %s"

есть только в ф-ции RadiusGetParams

вот тут

switch (vendor) {

 

...

 

Log(LG_RADIUS2, ("[%s] RADIUS: Get MS-CHAP-Error: %s",

auth->info.lnkname, auth->mschap_error));

break;

дописываем проверку:

если 646 присваиваем auth->why_fail = AUTH_FAIL_RESTRICTED_HOURS

если 647 присваиваем auth->why_fail = AUTH_FAIL_ACCT_DISABLED

если 649 присваиваем auth->why_fail = AUTH_FAIL_NO_PERMISSION

тоже верно.
и как тут "впихнуть"?
Log(LG_RADIUS2, ("[%s] RADIUS: Get MS-CHAP-Error: %s",
        auth->info.lnkname, auth->mschap_error));
{ // By dmitriy. Handling Other error messages
    char *err_no;
    err_no = strstr(auth->mschap_error, "E=");
    if (err_no) {
        int err_num = 0;
        char *invalid = NULL;
        err_num = strtol((err_no+=2), &invalid, 10);
        if (!invalid) break;

        switch (err_num) {
            case 646: auth->why_fail = AUTH_FAIL_RESTRICTED_HOURS; break;
            case 647: auth->why_fail = AUTH_FAIL_ACCT_DISABLED; break;
            //case 648: auth->why_fail = AUTH_FAIL_PASSWORD_EXPIRED; break;
            case 649: auth->why_fail = AUTH_FAIL_NO_PERMISSION; break;
        }
    } // if err_no ...
} // end of By dmitriy
break;

или п.3 относится уже к radius.c биллинга, а не mpd?
нет, к mpd.

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


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

Join the conversation

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

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

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

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

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

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

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