Подключение к FREERADIUS. Часть 3
- Подключение к FREERADIUS. Часть 1
- Насторойка М-200
- Подключение к FREERADIUS. Часть 2
- Насторойка FREERADIUS
- Подключение к FREERADIUS. Часть 3
- Авторизация
- Подключение к FREERADIUS. Часть 4
- Маршрутизация
Для того, чтобы использовать встроенный 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 сервером. Но об этом в другой раз.
В четвертой части речь пойдет собственно о маршрутизации.