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

Mikrotik + FreeRadius rlm_perl

Пытаюсь решить следующую задачку.

Есть 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 поставленную задачу - опыта работы с этим модулем никакого.

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

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


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

Читайте документацию, смотрите примеры, в сайтесаваибл и в модулях - там всё просто и понятно, для вашего случая.

 

должны сделать control: accept и в reply что то добавить (ип адрес и что то ещё), никакой перл тут не нужен.

 

 

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


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

Читайте документацию, смотрите примеры, в сайтесаваибл и в модулях - там всё просто и понятно, для вашего случая.

 

должны сделать control: accept и в reply что то добавить (ип адрес и что то ещё), никакой перл тут не нужен.

Оно конечно просто и понятно задним числом.

Это как поставить ocfs2 drbd heartbeat stonith.

Когда настроил, то конешно все уже ясно, но не в начале )))

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


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

Если всё разжевать - в голове ничего не осядет. Ну и решение простое, я думаю вам будет обидно самому его не найти :)

 

Основной нюанс в том что Accept в Control блоке, а всё остальное в Update Reply....

 

 

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


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

У меня виртуальный сервер с динамическими клиентами из базы (там пример есть), потому здесь листен и ещё некоторые части опущены.

 

Ещё можете погулить на тему авторизации в свичах через радиус, я от туда брал некоторые вещи когда то.

 

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

}

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


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

Если всё разжевать - в голове ничего не осядет. Ну и решение простое, я думаю вам будет обидно самому его не найти :)

 

Основной нюанс в том что Accept в Control блоке, а всё остальное в Update Reply....

 

Ну шо делать, хочется таблетку и побольше.

А на счет головы... Думаю мне присниться сегодня Mikrotik насилующий Radius в самых извращенных формах )))

Спасибо!

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


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

Если всё разжевать - в голове ничего не осядет. Ну и решение простое, я думаю вам будет обидно самому его не найти :)

 

Основной нюанс в том что Accept в Control блоке, а всё остальное в Update Reply....

 

Ну шо делать, хочется таблетку и побольше.

А на счет головы... Думаю мне присниться сегодня Mikrotik насилующий Radius в самых извращенных формах )))

Спасибо!

 

Знаете, что не понятно? Зачем в этой схеме вообще радиус? MT в этом случае сам себе может быть хозяином.

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


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

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

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


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

Знаете, что не понятно? Зачем в этой схеме вообще радиус? MT в этом случае сам себе может быть хозяином.

 

МТ умеет пускать пользователей с любым логином паролем?

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


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

У меня виртуальный сервер с динамическими клиентами из базы (там пример есть), потому здесь листен и ещё некоторые части опущены.

 

Ещё можете погулить на тему авторизации в свичах через радиус, я от туда брал некоторые вещи когда то.

 

Аутентификация, авторизация проходит, в аккаунтинге засада.

Юзерь не коннектиться выпадает 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

 

Какие идеи?

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

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


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

MS-CHAP2-Success

 

Почитайте про этот протокол :)

 

И замените его на что нибудь по проще.

 

 

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


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

MS-CHAP2-Success

 

Почитайте про этот протокол :)

И замените его на что нибудь по проще.

 

Почитал ) Запустил на mschap успешно...

Вся засада нашего случая в том, что есть физ. клиенты работающие через биллинг.

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

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

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

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

Т.е заставить всех поменять во вкладке безопасность MSCHAP 2 на MSCHAP нереально )

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

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


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

Запустил на mschap успешно

 

Я вообще думал что выше PAP начинаются проблемы из за взаимной проверки правильности пароля.

 

Уходите на IPoE, в том или ином виде, там вообще, для настройки хватает одного нажатия на ресет на всяких роутерах типа дир 300/320/620 и пр.

 

 

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


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

Join the conversation

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

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

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

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

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

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

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