Для обеспечения работы клиентов, подключаемых через авторизацию по протоколу EAP (в первую очередь, Wi-Fi клиентов с RADIUS-авторизацией через EAP/MSCHAPv2) был создан модуль интеграции биллигна NETAMS4 со сторонним популярным RADIUS-сервером FreeRADIUS.
Данный функционал доступен с релиза NETAMS 4.0.1522 (03 марта 2013).
Модуль оформлен в виде источника данных типа FreeRadiusDataSource, который добавляется как и другие источники данных. Настроек не содержит, кроме параметра interim_interval (в минутах), который инструктирует FreeRADIUS передавать анформацию об аккаунтинге (статистике по трафику) каждые N минут.
Источник данных не имеет никакого отношения к другому, существующему источнику данных типа LocalJustRadius, который использует собственный RADIUS-сервер, и предназначен для VPN-подключений.
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 необходимо создать соответствующие записи о:
Необходимо создать и запустить источник данных FreeRadiusDataSource, и настроить соответствующую связку с FreeRADIUS и DHCP (ниже)
Беспроводной клиент (ноутбук) при подключении к беспроводной сети через встроенный саппликант производит авторизацию с FreeRADIUS-сервером, передавая указанные в настройках логин-пароль. FreeRADIUS согласно своим настройкам запускает скрипт-связку netams4-freeradius-bridge.pl, который получает все текущие атрибуты (в том числе имя (логин) пользователя), упаковывает их в MIME64, отправляет в сторону процесса NETAMS/jserver запрос (аналогично клиенту n4ctl, через локальный UDP-сокет, порт 20003).
Запрос на стороне NETAMS4/jserver получается службой MonitorResponderEngine, которая выполняет следующие действия:
Устанавливаем 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 в нормальном режиме.