Перейти до

pptpd linux + nodeny 49.32


Рекомендованные сообщения

Доброго времени суток!

 

Проблема такого плана: на сервере стоит Gentoo linux установил nodeny 49.32 с авторизатором работает нормально. Поднял радиус 1.1.7, pptpd-1.3.4. Авторизация заработала инет появился но примерно через минуту пропадает. Если снова прервать соединение и пересоединится инет появится но тоже приметрно на минуту. Наблюдение показало что через минуту нодени посылает сигнал дисконнекта для пользователя хотя баланс положительный и если поставить всегда онлай или подключится авторизатором все работает нормально.

Как написано в докуметнации по установке

Mpd настраивается таким образом, что с определенным периодом будет посылать radius-у так называемые accounting пакеты для каждого соединения. Эти пакеты будут интерпретироваться как keep-alive пакеты, сообщающие ядру, что соединение не зависло.

но это для MPD.

Как это реализовать на pptpd + radius?

Просьба не предлагать перейти на FreeBSD.

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

а логи что говорят радиуса

включи через radius -x

вот что выдал radius -x

 

rad_recv: Access-Request packet from host 127.0.0.1:50129, id=167, length=95

Service-Type = Framed-User

Framed-Protocol = PPP

User-Name = "slavavpn"

CHAP-Challenge = 0xb8c2ad9df99b90e562bceefa1f554d029c8ecfcc

CHAP-Password = 0x17a2318abefb811e93cab8ecef2a64333f

NAS-IP-Address = 127.0.0.1

NAS-Port = 1

Processing the authorize section of radiusd.conf

modcall: entering group authorize for request 0

modcall[authorize]: module "preprocess" returns ok for request 0

rlm_chap: Setting 'Auth-Type := CHAP'

modcall[authorize]: module "chap" returns ok for request 0

modcall[authorize]: module "mschap" returns noop for request 0

rlm_realm: No '@' in User-Name = "slavavpn", looking up realm NULL

rlm_realm: No such realm "NULL"

modcall[authorize]: module "suffix" returns noop for request 0

rlm_eap: No EAP-Message, not doing EAP

modcall[authorize]: module "eap" returns noop for request 0

users: Matched entry DEFAULT at line 172

users: Matched entry DEFAULT at line 184

modcall[authorize]: module "files" returns ok for request 0

radius_xlat: 'slavavpn'

rlm_sql (sql): sql_set_user escaped user --> 'slavavpn'

radius_xlat: 'call radcheck('slavavpn')'

rlm_sql (sql): Reserving sql socket id: 4

radius_xlat: ''

radius_xlat: 'call radreply('slavavpn')'

radius_xlat: ''

rlm_sql (sql): Released sql socket id: 4

modcall[authorize]: module "sql" returns ok for request 0

rlm_pap: Found existing Auth-Type, not changing it.

modcall[authorize]: module "pap" returns noop for request 0

modcall: leaving group authorize (returns ok) for request 0

rad_check_password: Found Auth-Type CHAP

auth: type "CHAP"

Processing the authenticate section of radiusd.conf

modcall: entering group CHAP for request 0

rlm_chap: login attempt by "slavavpn" with CHAP password

rlm_chap: Using clear text password "090480" for user slavavpn authentication.

rlm_chap: chap user slavavpn authenticated succesfully

modcall[authenticate]: module "chap" returns ok for request 0

modcall: leaving group CHAP (returns ok) for request 0

Processing the post-auth section of radiusd.conf

modcall: entering group post-auth for request 0

rlm_sql (sql): Processing sql_postauth

radius_xlat: 'slavavpn'

rlm_sql (sql): sql_set_user escaped user --> 'slavavpn'

modcall[post-auth]: module "sql" returns noop for request 0

modcall: leaving group post-auth (returns noop) for request 0

Sending Access-Accept of id 167 to 127.0.0.1 port 50129

Service-Type = Framed-User

Framed-Protocol = PPP

Framed-IP-Address = 172.17.2.200

Framed-IP-Netmask = 255.255.255.255

Finished request 0

Going to the next request

--- Walking the entire request list ---

Waking up in 6 seconds...

rad_recv: Accounting-Request packet from host 127.0.0.1:39569, id=168, length=100

Acct-Session-Id = "4BCFEDC9736E00"

User-Name = "slavavpn"

Acct-Status-Type = Start

Service-Type = Framed-User

Framed-Protocol = PPP

Acct-Authentic = RADIUS

NAS-Port-Type = Async

Framed-IP-Address = 172.17.2.200

NAS-IP-Address = 127.0.0.1

NAS-Port = 1

Acct-Delay-Time = 0

Processing the preacct section of radiusd.conf

modcall: entering group preacct for request 1

modcall[preacct]: module "preprocess" returns noop for request 1

rlm_acct_unique: Hashing 'NAS-Port = 1,Client-IP-Address = 127.0.0.1,NAS-IP-Address = 127.0.0.1,Acct-Session-Id = "4BCFEDC9736E00",User-Name = "slavavpn"'

rlm_acct_unique: Acct-Unique-Session-ID = "e70b741ae52c5165".

modcall[preacct]: module "acct_unique" returns ok for request 1

rlm_realm: No '@' in User-Name = "slavavpn", looking up realm NULL

rlm_realm: No such realm "NULL"

modcall[preacct]: module "suffix" returns noop for request 1

modcall[preacct]: module "files" returns noop for request 1

modcall: leaving group preacct (returns ok) for request 1

Processing the accounting section of radiusd.conf

modcall: entering group accounting for request 1

radius_xlat: '/var/log/radius/radacct/127.0.0.1/detail-20100422'

rlm_detail: /var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d expands to /var/log/radius/radacct/127.0.0.1/detail-20100422

modcall[accounting]: module "detail" returns ok for request 1

modcall[accounting]: module "unix" returns ok for request 1

radius_xlat: '/var/log/radius/radutmp'

radius_xlat: 'slavavpn'

modcall[accounting]: module "radutmp" returns ok for request 1

radius_xlat: 'slavavpn'

rlm_sql (sql): sql_set_user escaped user --> 'slavavpn'

radius_xlat: ''

rlm_sql (sql): Reserving sql socket id: 3

rlm_sql (sql): Released sql socket id: 3

modcall[accounting]: module "sql" returns ok for request 1

modcall: leaving group accounting (returns ok) for request 1

Sending Accounting-Response of id 168 to 127.0.0.1 port 39569

Finished request 1

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

Nodeny в течении минуты обрабатывает есть ли юзеру доступ или нет.

Для того, чтобы не пользоваться авторизатором, нужно ставить - всегда онлайн.

и подключайтесь по pptp/pppoe итд.

в другом случае, биллинг считает что пользователь отлючен и потому дает сигнал второму скрипту, который отвечает за подключение-отключение пользователей и шейпера команду на выключение доступаю

 

запустите perl noserver.pl -v и смотрите детальный лог.

 

в данном случае radius занимается только авторизацией пользователей для PPP доступа.

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

 

на центосе поднял аналогичную схему, все работает великолепно

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

Nodeny в течении минуты обрабатывает есть ли юзеру доступ или нет.

Для того, чтобы не пользоваться авторизатором, нужно ставить - всегда онлайн.

и подключайтесь по pptp/pppoe итд.

в другом случае, биллинг считает что пользователь отлючен и потому дает сигнал второму скрипту, который отвечает за подключение-отключение пользователей и шейпера команду на выключение доступаю

 

запустите perl noserver.pl -v и смотрите детальный лог.

 

в данном случае radius занимается только авторизацией пользователей для PPP доступа.

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

 

на центосе поднял аналогичную схему, все работает великолепно

 

спасибо заработало !

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

а выложите свои версии nofire.pl для линукса

Чуть позже выложу только шейпер и проброс реальников доделаю.

проброс реальников? это что еще за счастье? :o

а шейпер ждем с нетерпением...

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

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

Решение уважаемого Sanchezz - аля "костыль" (без обид!), ну соственно как и весь линукс)... но это не "наш" метод! Тем более на таком серьезном биллинге, как ноудени.

Докладываю результаты своих исследований:

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

accounting_update_query = "call radupdate('%{SQL-User-Name}')"

Ввиду того, что во фряхи это делает сам mpd и в документации по ней описано в конфигах.

А линуксовому радиус-клиенту надо рассказать: что есть мега важный атрибут

[root@test radiusclient]# grep Acct-Interim-Interval /etc/radiusclient/dictionary
ATTRIBUTE       Acct-Interim-Interval                   85      integer
[root@test radiusclient]#

после этого у меня заработало все...

Единственное не удобство, что IP, который в биллинге - выставляется на PPP-интерфейс, и надо опять костыли делать, что бы в подсетях юзерам выдавать по DHCP адреса фиксированные.

Благо в биллинге есть поля под МАК и типа UserData, как в СТГ...

Кстати, с реалками: просто проприсуете белый IP юзеру и не маскарадите его ,)

 

2 уважаемому "911":

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

как говориться: Ваши слова и пожелания, Вам же в уши.

 

К уважаемому коммунити с local.com.ua - отношения не имеет! Всем спасибо за то, что Вы есть!

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

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

Решение уважаемого Sanchezz - аля "костыль" (без обид!), ну соственно как и весь линукс)... но это не "наш" метод! Тем более на таком серьезном биллинге, как ноудени.

Докладываю результаты своих исследований:

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

accounting_update_query = "call radupdate('%{SQL-User-Name}')"

Ввиду того, что во фряхи это делает сам mpd и в документации по ней описано в конфигах.

А линуксовому радиус-клиенту надо рассказать: что есть мега важный атрибут

[root@test radiusclient]# grep Acct-Interim-Interval /etc/radiusclient/dictionary
ATTRIBUTE       Acct-Interim-Interval                   85      integer
[root@test radiusclient]#

после этого у меня заработало все...

Единственное не удобство, что IP, который в биллинге - выставляется на PPP-интерфейс, и надо опять костыли делать, что бы в подсетях юзерам выдавать по DHCP адреса фиксированные.

Благо в биллинге есть поля под МАК и типа UserData, как в СТГ...

Кстати, с реалками: просто проприсуете белый IP юзеру и не маскарадите его ,)

Посмотрел в свой dictionary вышеперечисленная сточка добавлена, результат тот же дисконнект через минуту. Можете выложить свой /etc/radiusclient/dictionary может еще какой строчки не хватает? Заранее спасибо!

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

Посмотрел в свой dictionary вышеперечисленная сточка добавлена, результат тот же дисконнект через минуту. Можете выложить свой /etc/radiusclient/dictionary может еще какой строчки не хватает? Заранее спасибо!

Ой прошу прощения, давно дело было... подзабыл малость,

интервал alivе-а во фре в конфиге мпд, а тут

так надо еще модифицировать PROCEDURE "radcheck", дабавив строку:

SELECT NULL,login,'Acct-Interim-Interval','60','=';

после "SELECT NULL,login,'Framed-Protocol','PPP','=';"

 

т.е. что бы в радиус-плагин мы вернули переменную(атрибут) "через сколько слать эвливы", в моем примере 60 сек

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

Посмотрел в свой dictionary вышеперечисленная сточка добавлена, результат тот же дисконнект через минуту. Можете выложить свой /etc/radiusclient/dictionary может еще какой строчки не хватает? Заранее спасибо!

Ой прошу прощения, давно дело было... подзабыл малость,

интервал alivе-а во фре в конфиге мпд, а тут

так надо еще модифицировать PROCEDURE "radcheck", дабавив строку:

SELECT NULL,login,'Acct-Interim-Interval','60','=';

после "SELECT NULL,login,'Framed-Protocol','PPP','=';"

 

т.е. что бы в радиус-плагин мы вернули переменную(атрибут) "через сколько слать эвливы", в моем примере 60 сек

Спасибо заработало!

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

Еще вопрос подскажите кто знает как правильно передать атрибут скорости

пробую так:

DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply` (IN login VARCHAR(64))
BEGIN
DECLARE usr_id INT;
DECLARE usr_ip VARCHAR(15);
DECLARE speed VARCHAR(15);

SELECT id,ip INTO usr_id,usr_ip FROM users WHERE name=login;
INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp());
SELECT speed from plans2 where id=(select paket from users where id=usr_id);

SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
SELECT NULL,login,'Framed-Protocol','PPP','=';
SELECT NULL,login,'Acct-Interim-Interval','60','=';
SELECT NULL,login,'Ascend-Data-Rate','speed','=';
END$$
DELIMITER ;

но поле такого запроса

radtest выдает

Sending Access-Request of id 112 to 127.0.0.1 port 1812

User-Name = "test"

User-Password = "12345"

NAS-IP-Address = 255.255.255.255

NAS-Port = 0

rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=112, length=44

 

и содержимое radattr.ppp0:

Service-Type Framed-User
Framed-Protocol PPP

 

если запрос сформирован так:

DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply` (IN login VARCHAR(64))
BEGIN
DECLARE usr_id INT;
DECLARE usr_ip VARCHAR(15);
SELECT id,ip INTO usr_id,usr_ip FROM users WHERE name=login;
INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp());
SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
SELECT NULL,login,'Framed-Protocol','PPP','=';
SELECT NULL,login,'Acct-Interim-Interval','60','=';
END$$
DELIMITER ;

то radattr.ppp0 :

Service-Type Framed-User
Framed-Protocol PPP
Framed-IP-Address 195.58.243.254
Framed-IP-Netmask 255.255.255.255
Acct-Interim-Interval 60

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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...