Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

FreeRadiusDataSource работает с внешним сервером FreeRADIUS через внутренний сервис MonitorResponderEngine, и скрипт-связку netams4-freeradius-bridge.pl (можно взять здесь)

Применение

Данный тип источника данных должен применяться для обеспечения работы пользователей в сети передачи данных, где доступ клиентов осуществляется при авторизации RADIUS-сервером, в частности при использовании беспроводного радио-доступа (Wi-Fi), авторизации через пару "логин-пароль" (PEAP/EAP-MSCHAPv2). Клиенты (саппликанты) для такой авторизации встроены в подавляющее большинство современный WiFi-устройств. Данный метод проверен на клиентах (ПК Windows, устройства iOS) и беспроводной сети на базе точек доступа Ubiquiti UniFi, но должен работать при применении любых других точек доступа, поддерживающих (автономно, или через контроллер) авторизацию по RADIUS (802.1x).

...

Как вы обратили внимание, в данной схеме информация об IP-адресе абонента в биллинг не передается. Это связано с тем, что адрес абонент получает уже после того, как прошла авторизация в беспроводной сети, и беспроводная сеть (и соответственно FreeRADIUS с источником данных) об адресе не знают. Так как адрес абонент получает по DHCP, есть возможность совершить действие при назначении адреса DHCP-сервером (при использовании ISC DHCPD), а именно уведомить ядро биллинга о таком назначении. Для этого вызывается утилита n4ctl с параметром setip и MAC-и IP-адресом абонента; при получении данной информации биллинг ищет в списке учетных объектов соответствующий данному MAC-адресу (только что прописан через RADIUS ACCT сообщение), и прописывает динамический IP адрес абонента, заодно вызывая событие LOGIN в ядре биллинга.

Настройка

Устанавливаем 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 в нормальном режиме.