Versions Compared

Key

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

...

Как вы обратили внимание, в данной схеме информация об 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 в нормальном режиме.