Jump to content
Калькуляторы

Ошибка НЕ 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, когда неудачная авторизация в биллинге?

Edited by planken

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
жывотное ввело правильный логин, но неверный пароль, поэтому такая вот бяка

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

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

Edited by planken

Share this post


Link to post
Share on other sites
жывотное ввело правильный логин, но неверный пароль, поэтому такая вот бяка

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

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

 

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

 

 

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

 

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

Edited by parazit74

Share this post


Link to post
Share on other sites
Есть в наличии 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.

Edited by littlesavage

Share this post


Link to post
Share on other sites
Описание MS-CHAP-Error - в RFC.
RFC читать иногда полезно.

 

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

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

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

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

Share this post


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

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

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

 

 

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

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

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

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

 

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

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

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

Edited by planken

Share this post


Link to post
Share on other sites
правда пришлось немного поправить код 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

Share this post


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

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


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

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

 

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

Edited by littlesavage

Share this post


Link to post
Share on other sites
Выполните 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

Edited by planken

Share this post


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

Share this post


Link to post
Share on other sites
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?
Edited by AlKov

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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;
                }

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this