Подключение к 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 сервером. Но об этом в другой раз.
В четвертой части речь пойдет собственно о маршрутизации.