pik Опубликовано 17 ноября, 2011 (изменено) · Жалоба Пытаюсь решить следующую задачку. Есть mikrotik с поднятым pptp сервером и стоит проверка через радиус. Необходимо чтобы любой пользователь с любым паролем проходил проверку на Радиус сервере. Пытался реализовать через rlm_perl, но вылазит ошибка rlm_perl: ERROR: Failed to create pair Event-Timestamp = ▒?о▒? 17 2011 10:33:02 MSK на стадии accounting через перл скрипт. use vars qw(%RAD_REQUEST %RAD_REPLY %RAD_CHECK ); use Data::Dumper; # This is hash wich hold original request from radius my %RAD_REQUEST; # In this hash you add values that will be returned to NAS. my %RAD_REPLY; #This is for check items my %RAD_CHECK; use constant RLM_MODULE_REJECT=> 0;# /* immediately reject the request */ use constant RLM_MODULE_FAIL=> 1;# /* module failed, don't reply */ use constant RLM_MODULE_OK=> 2;# /* the module is OK, continue */ use constant RLM_MODULE_HANDLED=> 3;# /* the module handled the request, so stop. */ use constant RLM_MODULE_INVALID=> 4;# /* the module considers the request invalid. */ use constant RLM_MODULE_USERLOCK=> 5;# /* reject the request (user is locked out) */ use constant RLM_MODULE_NOTFOUND=> 6;# /* user not found */ use constant RLM_MODULE_NOOP=> 7;# /* module succeeded without doing anything */ use constant RLM_MODULE_UPDATED=> 8;# /* OK (pairs modified) */ use constant RLM_MODULE_NUMCODES=> 9;# /* How many return codes there are */ sub authorize { # For debugging purposes only # &log_request_attributes; # Here's where your authorization code comes # You can call another function from here: #&test_call; return RLM_MODULE_OK; } sub authenticate { # For debugging purposes only &log_request_attributes; if ($RAD_REQUEST{'User-Name'} =~ /^no/i) { # Reject user and tell him why $RAD_REPLY{'Reply-Message'} = "Denied access by rlm_perl function"; return RLM_MODULE_REJECT; } else { # Accept user and set some attribute $RAD_REPLY{'Packet-Type'} = "Access-Accept"; $RAD_REPLY{'Framed-IP-Address'} = "10.225.245.125"; $RAD_REPLY{'Framed-Protocol'} = "ppp"; return RLM_MODULE_OK; } } sub accounting { return RLM_MODULE_OK; } FreeRadius -x rad_recv: Accounting-Request packet from host 172.27.65.70 port 49361, id=108, length=183 Service-Type = Framed-User Framed-Protocol = PPP NAS-Port = 38 NAS-Port-Type = Virtual User-Name = "test" Calling-Station-Id = "172.27.65.210" Called-Station-Id = "172.27.65.70" Acct-Session-Id = "81800020" Framed-IP-Address = 0.0.0.0 Acct-Authentic = RADIUS Event-Timestamp = "Ноя 17 2011 10:33:02 MSK" Acct-Session-Time = 0 Acct-Input-Octets = 0 Acct-Input-Gigawords = 0 Acct-Input-Packets = 0 Acct-Output-Octets = 10 Acct-Output-Gigawords = 0 Acct-Output-Packets = 1 Acct-Status-Type = Stop Acct-Terminate-Cause = User-Request NAS-Identifier = "MikroTik" NAS-IP-Address = 172.27.65.70 Acct-Delay-Time = 0 # Executing section preacct from file /etc/freeradius/radiusd.conf +- entering group preacct {...} ++[preprocess] returns ok # Executing section accounting from file /etc/freeradius/radiusd.conf +- entering group accounting {...} [acct_unique] Hashing 'NAS-Port = 38,Client-IP-Address = 172.27.65.70,NAS-IP-Address = 172.27.65.70,Acct-Session-Id = "81800020",User-Name = "test"' [acct_unique] Acct-Unique-Session-ID = "307a9a7007fe51de". ++[acct_unique] returns ok rlm_perl: Added pair Acct-Input-Octets = 0 rlm_perl: Added pair NAS-Port-Type = Virtual rlm_perl: Added pair Acct-Session-Id = 81800020 rlm_perl: Added pair Acct-Output-Gigawords = 0 rlm_perl: Added pair Service-Type = Framed-User rlm_perl: Added pair Acct-Unique-Session-Id = 307a9a7007fe51de rlm_perl: Added pair Called-Station-Id = 172.27.65.70 rlm_perl: Added pair Acct-Authentic = RADIUS rlm_perl: Added pair Acct-Status-Type = Stop rlm_perl: Added pair Acct-Output-Packets = 1 rlm_perl: Added pair NAS-IP-Address = 172.27.65.70 rlm_perl: Added pair Acct-Output-Octets = 10 rlm_perl: Added pair Acct-Terminate-Cause = User-Request rlm_perl: Added pair Acct-Session-Time = 0 rlm_perl: Added pair Calling-Station-Id = 172.27.65.210 rlm_perl: Added pair Framed-Protocol = PPP rlm_perl: Added pair User-Name = test rlm_perl: Added pair NAS-Identifier = MikroTik rlm_perl: ERROR: Failed to create pair Event-Timestamp = ▒?о▒? 17 2011 10:33:02 MSK rlm_perl: Added pair Acct-Input-Gigawords = 0 rlm_perl: Added pair Framed-IP-Address = 0.0.0.0 rlm_perl: Added pair Acct-Input-Packets = 0 rlm_perl: Added pair NAS-Port = 38 rlm_perl: Added pair Acct-Delay-Time = 0 ++[perl] returns ok [detail] expand: /var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d -> /var/log/radius/radacct/172.27.65.70/detail-20111117 [detail] /var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d expands to /var/log/radius/radacct/172.27.65.70/detail-20111117 [detail] expand: %t -> Thu Nov 17 10:34:22 2011 ++[detail] returns ok Sending Accounting-Response of id 108 to 172.27.65.70 port 49361 Finished request 2. Cleaning up request 2 ID 108 with timestamp +6 Going to the next request Waking up in 4.9 seconds. Cleaning up request 0 ID 106 with timestamp +6 Ready to process requests. Пример отсюда http://wiki.freeradius.org/Rlm_perl Может можно без Rlm_perl поставленную задачу - опыта работы с этим модулем никакого. Изменено 18 ноября, 2011 пользователем pik Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 17 ноября, 2011 · Жалоба Читайте документацию, смотрите примеры, в сайтесаваибл и в модулях - там всё просто и понятно, для вашего случая. должны сделать control: accept и в reply что то добавить (ип адрес и что то ещё), никакой перл тут не нужен. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pik Опубликовано 17 ноября, 2011 · Жалоба Читайте документацию, смотрите примеры, в сайтесаваибл и в модулях - там всё просто и понятно, для вашего случая. должны сделать control: accept и в reply что то добавить (ип адрес и что то ещё), никакой перл тут не нужен. Оно конечно просто и понятно задним числом. Это как поставить ocfs2 drbd heartbeat stonith. Когда настроил, то конешно все уже ясно, но не в начале ))) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 17 ноября, 2011 · Жалоба Если всё разжевать - в голове ничего не осядет. Ну и решение простое, я думаю вам будет обидно самому его не найти :) Основной нюанс в том что Accept в Control блоке, а всё остальное в Update Reply.... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 17 ноября, 2011 · Жалоба У меня виртуальный сервер с динамическими клиентами из базы (там пример есть), потому здесь листен и ещё некоторые части опущены. Ещё можете погулить на тему авторизации в свичах через радиус, я от туда брал некоторые вещи когда то. authorize { update control { Auth-Type = Accept } ok update reply { NAS-IP-Address = "%{request:NAS-IP-Address}" #NAS-IPv6-Address = "%{request:NAS-IPv6-Address}" } } authenticate { ok } # Post-Authentication # Once we KNOW that the user has been authenticated, there are # additional steps we can take. post-auth { ok } Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pik Опубликовано 17 ноября, 2011 · Жалоба Если всё разжевать - в голове ничего не осядет. Ну и решение простое, я думаю вам будет обидно самому его не найти :) Основной нюанс в том что Accept в Control блоке, а всё остальное в Update Reply.... Ну шо делать, хочется таблетку и побольше. А на счет головы... Думаю мне присниться сегодня Mikrotik насилующий Radius в самых извращенных формах ))) Спасибо! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tartila Опубликовано 17 ноября, 2011 · Жалоба Если всё разжевать - в голове ничего не осядет. Ну и решение простое, я думаю вам будет обидно самому его не найти :) Основной нюанс в том что Accept в Control блоке, а всё остальное в Update Reply.... Ну шо делать, хочется таблетку и побольше. А на счет головы... Думаю мне присниться сегодня Mikrotik насилующий Radius в самых извращенных формах ))) Спасибо! Знаете, что не понятно? Зачем в этой схеме вообще радиус? MT в этом случае сам себе может быть хозяином. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 17 ноября, 2011 · Жалоба Видимо однокурсник того студента с хотспотом, обоим фрирадиус нужно было освоить на зачёт. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pik Опубликовано 18 ноября, 2011 · Жалоба Знаете, что не понятно? Зачем в этой схеме вообще радиус? MT в этом случае сам себе может быть хозяином. МТ умеет пускать пользователей с любым логином паролем? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pik Опубликовано 18 ноября, 2011 (изменено) · Жалоба У меня виртуальный сервер с динамическими клиентами из базы (там пример есть), потому здесь листен и ещё некоторые части опущены. Ещё можете погулить на тему авторизации в свичах через радиус, я от туда брал некоторые вещи когда то. Аутентификация, авторизация проходит, в аккаунтинге засада. Юзерь не коннектиться выпадает 778 ошибка - "Невозможно проверить идентичность сервера". Почитал RADIUS Accounting покурил дебаги.... понял, что Accounting-Response возможно не все отдает. Accounting-Request шлется второй раз после Accounting-Response потом статус Acct-Terminate-Cause = User-Request Посему вопрос, в update reply кроме IP писать нужно ручками? Т.е всякие сессионные ключи, таймштампы и прочее? update reply { NAS-IP-Address = "%{request:NAS-IP-Address}" } При отсутствии секции accounting request шлеться 4 раза. При наличии этой секции 2 раза. При этом в лог reply падает только одна строка "Packet-Type = Access-Accept" вместо: Packet-Type = Access-Accept Framed-IP-Address = 10.225.245.98 Framed-Protocol = PPP Service-Type = Framed-User MS-CHAP2-Success = 0x01533d34413646323842333933383442424234384233333037423545444233354133353345323231384532 Какие идеи? Изменено 18 ноября, 2011 пользователем pik Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 18 ноября, 2011 · Жалоба MS-CHAP2-Success Почитайте про этот протокол :) И замените его на что нибудь по проще. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pik Опубликовано 22 ноября, 2011 (изменено) · Жалоба MS-CHAP2-Success Почитайте про этот протокол :) И замените его на что нибудь по проще. Почитал ) Запустил на mschap успешно... Вся засада нашего случая в том, что есть физ. клиенты работающие через биллинг. Этот вариант c произвольным логином и паролем, я сейчас прорабатываю для подстраховки . Чтобы в случае отказа оборудования, физики могли временно поработать по этой схеме. Вкладываться в репликации биллинга и прочую муть нам сейчас не с руки. Мы слезаем с Netup - задолбало, бюджета сюда больше не будет. Новый биллинг уже виднеется на горизонте. В этой систуации нужно прозрачная схема переключения физиков, без усилий с их стороны. Т.е заставить всех поменять во вкладке безопасность MSCHAP 2 на MSCHAP нереально ) Изменено 22 ноября, 2011 пользователем pik Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 22 ноября, 2011 · Жалоба Запустил на mschap успешно Я вообще думал что выше PAP начинаются проблемы из за взаимной проверки правильности пароля. Уходите на IPoE, в том или ином виде, там вообще, для настройки хватает одного нажатия на ресет на всяких роутерах типа дир 300/320/620 и пр. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...