...
FreeRadiusDataSource работает с внешним сервером FreeRADIUS через внутренний сервис MonitorResponderEngine, и скрипт-связку netams4-freeradius-bridge.pl (можно взять здесь)
Применение
Данный тип источника данных должен применяться для обеспечения работы пользователей в сети передачи данных, где доступ клиентов осуществляется при авторизации RADIUS-сервером, в частности при использовании беспроводного радио-доступа (Wi-Fi), авторизации через пару "логин-пароль" (PEAP/EAP-MSCHAPv2). Клиенты (саппликанты) для такой авторизации встроены в подавляющее большинство современный WiFi-устройств. Данный метод проверен на клиентах (ПК Windows, устройства iOS) и беспроводной сети на базе точек доступа Ubiquiti UniFi, но должен работать при применении любых других точек доступа, поддерживающих (автономно, или через контроллер) авторизацию по RADIUS (802.1x).
Предварительные требования
Для того, чтобы авторизация работала нормально, вам необходимо настроить беспроводную сеть, убедиться в ее работе при WPA/WPA2 PSK (Personal) авторизации, затем настроить авторизацию в данной сеть через FreeRADIUS и локальную базу пользователей (/etc/freeradius/users). В биллинге NETAMS необходимо создать соответствующие записи о:
- тарифе (допустимые тарифные обработчики - те, который используют VPNService в своей основе, это XPrepaidByDaysVPN1, PeriodicFeeIncludedVolume, PeriodicFeeRateLimit (рекомендуется))
- контракте, лицевом счете
- учетном объекте (необходимо, чтоб был включен параметр "разрешить динамический IP"
- услуге (созданной из соответствующего тарифа, учетного объекта, лицевого счета)
Необходимо создать и запустить источник данных FreeRadiusDataSource, и настроить соответствующую связку с FreeRADIUS и DHCP (ниже)
Механика работы
Беспроводной клиент (ноутбук) при подключении к беспроводной сети через встроенный саппликант производит авторизацию с FreeRADIUS-сервером, передавая указанные в настройках логин-пароль. FreeRADIUS согласно своим настройкам запускает скрипт-связку netams4-freeradius-bridge.pl, который получает все текущие атрибуты (в том числе имя (логин) пользователя), упаковывает их в MIME64, отправляет в сторону процесса NETAMS/jserver запрос (аналогично клиенту n4ctl, через локальный UDP-сокет, порт 20003).
Запрос на стороне NETAMS4/jserver получается службой MonitorResponderEngine, которая выполняет следующие действия:
- проверяет, есть ли в настройках источник данных типа FreeRadiusDataSource, и запущен ли он
- распаковывает из MIME64 запрос (набор AVPairs)
- вызывает процедуры authorization либо accounting для источника данных
Настройка
Устанавливаем FreeRADIUS (из пакетов, или как удобно). Прописываем устройства доступа (NAS) в конфигурации /etc/freeradius/clients.conf - указываем IP-адрес или адреса RADIUS-клиентов (точек доступа или контроллера), пароль.
Прописываем вызов модуля perl для процедуры внутренней авторизации (секция authorization) в EAP-туннеле (inner-tunnel). Убеждаемся, что mschap и eap там тоже есть.
Прописываем вызов модуля perl для процедуры аккаунтинга (секция accounting) в общем конфиге (default).
Прописываем вызов скрипта netams4-freeradius-bridge.pl в настройках модуля PERL-интеграции (modules/perl) вместо базового example.pl.
Поскольку FreeRADIUS при запуске нашего Perl-скрипта использует прекомпиляцию и библиотеку libperl, убеждаемся что библиотека доступна. Например, для Debian Linux необходимо в начало файла /etc/default/freeradius дописать параметр
LD_PRELOAD=/usr/lib/libperl.so.5.10
export LD_PRELOAD
Создаем и включаем источник данных FreeRadiusDataSource
Для того, чтобы DHCP-сервер сообщал биллингу о присвоении IP-адреса, добавляем следующие строки в /etc/dhcp/dhcpd.conf в секцию subnet { ... }
on commit {
set clip = binary-to-ascii(10, 8, ".", leased-address);
set clhw = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
execute("/usr/local/netams4/jserver/bin/n4ctl", "setip", "commit", clip, clhw);
}
Запускаем FreeRADIUS с ключом -X, клиентом пробуем подключиться к радиосети, смотрим в netams4/logs/jserver.log :
2013-03-06 10:18:33,535 DEBUG [monitor_responder] com.netams.netams4.datasource.FreeRadiusDatasource - RAD_AUTH: authenticated user 'user' having SE=1
2013-03-06 10:18:33,547 DEBUG [monitor_responder] com.netams.netams4.datasource.FreeRadiusDatasource - RAD_AUTH: authenticated user 'user' having SE=1
2013-03-06 10:18:33,560 DEBUG [monitor_responder] com.netams.netams4.datasource.FreeRadiusDatasource - RAD_AUTH: authenticated user 'user' having SE=1
2013-03-06 10:18:33,587 INFO [monitor_responder] com.netams.netams4.datasource.FreeRadiusDatasource - RAD_ACCT START user='user' AU id=1 Wireless, SET MAC to '98:fe:94:9b:38:58'
2013-03-06 10:18:34,971 INFO [RMI TCP Connection(10)-172.16.130.80] com.netams.netams4.RPCBridgeEngine - CAJO collection_subset [q='mod_name=backup_restore and mod_key=sys and attribute_name=root_url', 1, 1, unidata]
2013-03-06 10:18:34,973 INFO [RMI TCP Connection(10)-172.16.130.80] com.netams.netams4.RPCBridgeEngine - CAJO collection_subset [q='mod_name=backup_restore and mod_key=sys and attribute_name=root_url', unidata] returns=1
2013-03-06 10:18:35,139 INFO [RMI TCP Connection(10)-172.16.130.80] com.netams.netams4.RPCBridgeEngine - CAJO authservice_getinfo [10.1.1.11]
2013-03-06 10:18:36,108 DEBUG [monitor_responder] com.netams.netams4.MonitorResponderEngine - setip: cmd=commit, IP=10.1.1.11, MAC=98:fe:94:9b:38:58
2013-03-06 10:18:36,109 DEBUG [monitor_responder] com.netams.netams4.MonitorResponderEngine - setip: notified au=1, set ip to 10.1.1.11
2013-03-06 10:18:36,109 DEBUG [monitor_responder] com.netams.netams4.BillingEngine - billing_notify_datasource LOGIN, AU=1, ip=10.1.1.11, DS=0, rule=[128kbit]
2013-03-06 10:18:36,192 DEBUG [datasource] com.netams.netams4.datasource.ScriptCallDatasource - DS:2, CMD: 'LOGIN 10.1.1.11 32 1 '128kbit' 1362550716', state=0
2013-03-06 10:26:58,665 INFO [monitor_responder] com.netams.netams4.datasource.FreeRadiusDatasource - RAD_ACCT STOP user='user' AU id=1 Wireless, CLEAR MAC from '98:fe:94:9b:38:58' and IP from 10.1.1.11
2013-03-06 10:26:58,665 DEBUG [monitor_responder] com.netams.netams4.BillingEngine - billing_notify_datasource LOGOUT, AU=1, ip=10.1.1.11, DS=0, rule=[]
2013-03-06 10:26:58,752 DEBUG [datasource] com.netams.netams4.datasource.ScriptCallDatasource - DS:2, CMD: 'LOGOUT 10.1.1.11 32 1 '' 1362551218', state=0
Если все нормально, запускаем FreeRADIUS в нормальном режиме.