Подключение к FREERADIUS. Часть 3

Материал из M-200 WIKI
Перейти к: навигация, поиск

Для того, чтобы использовать встроенный perl необходимо:

1. В файле modules/perl раскомментировать строку 'func_authorize = authorize'.

2. В файле radiusd.conf добавить:

authorize {
   preprocess
   files
   perl
}

3. В файле users убрать пользователя 904 и сделать ACCEPT правилом по умолчанию:

DEFAULT  Auth-Type = accept
   Fall-Through = yes

4. Перезапускаем freeradius. У меня на этом этапе сервер ни в какую не хотел есть Data::Dumper. Пришлось выкинуть - пока он вроде не нужен.


Настройка обработчика

К меня по умолчанию используется файл example.pl (см. modules/perl). Это просто заготовка, которую я слегка подправлю.

1. Используем sub authorize.

2. Для передачи атрибутов используются два хэша - RAD_REQUEST и RAD_REPLY. Соответственно запрос и ответ.

3. Функция может возвращать RLM_MODULE_OK или RLM_MODULE_REJECT.


И так, немного перла и получаем:

sub authorize {
  if ($RAD_REQUEST{'User-Name'} == '904') {
      $RAD_REPLY{'h323-credit-time'} = "h323-credit-time=1000";
      return RLM_MODULE_OK;
   }
   return RLM_MODULE_REJECT;
}

Вот так наверное лучше:

sub authorize {
  if ($RAD_REQUEST{'Calling-Station-Id'} == '904') {
      $RAD_REPLY{'h323-credit-time'} = "h323-credit-time=1000";
      return RLM_MODULE_OK;
   }
   return RLM_MODULE_REJECT;
}

Тестовый звонок

SEIZ EXT<SIP>(904)$
CALL EXT<SIP>(904)$:6157 -> CallAuth_in(770:4)$:6195 [904,407]
SEIZ CallAuth_out(1538:4)$
CALL CallAuth_out(1538:4)$:6196 -> INT_IP(769/14)$:6132 [904,407]


Вызов прошел.

А вот, что говорит сам freeradius:

rad_recv: Access-Request packet from host 127.0.0.1 port 55593, id=134, length=113
       Service-Type = Login-User
       h323-conf-id = "h323-conf-id=1364990370-919873"
       User-Name = "904"
       Calling-Station-Id = "904"
       h323-gw-id = "h323-gw-id=904"
       Called-Station-Id = "407"
       NAS-Port = 0
       NAS-IP-Address = 127.0.0.1
+- entering group authorize {...}
++[preprocess] returns ok
[files] users: Matched entry DEFAULT at line 20
++[files] returns ok
rlm_perl: Added pair h323-gw-id = h323-gw-id=904
rlm_perl: Added pair Service-Type = Login-User
rlm_perl: Added pair Called-Station-Id = 407
rlm_perl: Added pair Calling-Station-Id = 904
rlm_perl: Added pair User-Name = 904
rlm_perl: Added pair h323-conf-id = h323-conf-id=1364990370-919873
rlm_perl: Added pair NAS-Port = 0
rlm_perl: Added pair NAS-IP-Address = 127.0.0.1
rlm_perl: Added pair h323-credit-time = h323-credit-time=1000
rlm_perl: Added pair Auth-Type = Accept
++[perl] returns ok
Found Auth-Type = Accept
Auth-Type = Accept, accepting the user
Login OK: [904/<via Auth-Type = Accept>] (from client m-200 port 0 cli 904)
+- entering group post-auth {...}
++[exec] returns noop
Sending Access-Accept of id 134 to 127.0.0.1 port 55593
       h323-credit-time = "h323-credit-time=1000"
Finished request 7.
Going to the next request
Waking up in 4.9 seconds.
Cleaning up request 7 ID 134 with timestamp +2712
Ready to process requests.


Видно, как подключается perl обработчик.


Резюме

Используя возможности PERL, вполне возможно построить систему любой сложности. Так же интересным может быть модуль RLM_MYSQL - взаимодействие с mysql сервером. Но об этом в другой раз.


В четвертой части речь пойдет собственно о маршрутизации.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты