КучаГен aka MultiGen

Данная механика появилась начиная с релиза 0.9.0 и представляет собой удобный уровень абстракции и автоматизации для работы с любыми NAS поддерживающими работу с FreeRADIUS. Тащемто умеет генерировать кучу всякого под видом кастомных per-NAS атрибутов. Да, каких угодно, нет - без привязки к какому либо фиксированному типу NAS.

Предварительная настройка

Мы надеемся, что вы устанавливали Ubilling при помощи инсталлятора, и все нужное у вас уже есть. Для начала включаем Free Radius в /etc/rc.conf
Важно: пресеты в /docs/multigen/raddb/ для версии freeradius2.

radiusd_enable="YES"

После чего разворачиваем пресеты конфигурации FreeRADIUS2

# cd /usr/local/www/apache24/data/billing
# cp -R ./docs/multigen/raddb/* /usr/local/etc/raddb/

Конфигурация FreeRADIUS3 (идет с бинарными пакетами для FreeBSD >=11.2):

# cd /usr/local/www/apache24/data/billing
# cp -R ./docs/multigen/raddb3/* /usr/local/etc/raddb/
# setenv RADVER `radiusd -v | grep "radiusd: FreeRADIUS Version" | awk '{print $4}' | tr -d ,`
# sed -i.bak "s/\/usr\/local\/lib\/freeradius-3.0.16/\/usr\/local\/lib\/freeradius-$RADVER/" /usr/local/etc/raddb/radiusd.conf

Вливаем нужный нам дамп базы

# mysql -u root -p stg < ./docs/multigen/dump.sql

Для 3-й версии FreeRADIUS так же стоит добавить

# mysql -u root -p stg < ./docs/multigen/radius3_fix.sql

Потом приступаем к конфигурированию соединения FreeRADIUS с БД Ubilling, редактируя следующие параметры в /usr/local/etc/raddb/sql.conf

Параметр Описание
server Хост/IP сервера базы данных
port Порт сервера базы данных
login Пользователь
password Пароль
radius_db Имя базы данных

Если все закончили, можно попробовать запустить FreeRADIUS, но пока в debug-режиме:

# radiusd -X

И если вы увидели нечто похожее на код ниже - можно продолжать дальше.

... adding new socket proxy address * port 10049
Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on command file /var/run/radiusd/radiusd.sock
Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel
Listening on proxy address * port 1814
Ready to process requests.

Включение поддержки в Ubilling

Включаем соответствующую опцию в alter.ini

;Включена ли поддержка КучаГен-а?
MULTIGEN_ENABLED=1
;Эта опция не обязательна и включает логирование multigen. Возможные значения 0 - disabled, 1 - enabled, 2 - debug, 3 - paranoid, 4 - nani?!. 
;Может уменьшить быстродействие. Радикально. Рекомендуется включать только на время отладки или конфигурации новых NAS.
;MULTIGEN_LOGGING=1
;Путь и опции по-умолчанию radclient для КучаГен-а. Необязательная опция.
;MULTIGEN_RADCLIENT="/usr/local/bin/radclient -r 3 -t 1"
;Используется только для баз использующих innodb и должно решать проблемы с быстродействием,
;посредством вырубания автокоммита и ручной работы с транзакциями.
;MULTIGEN_MAKE_INNODB_GREAT_AGAIN=1

Использование

ubapi "multigen" - регенерация данных всех пользователей, естественно только изменившихся либо отсутствующих.

Куда это засовывать?

crontab -e

*/2 * * * *  /bin/ubapi "multigen"

Конфигурация серверов доступа

Все предельно прозрачно и тривиально

Каждый NAS может иметь свои собственные механики работы, выполняемые сервисы и наборы атрибутов а также правила их обработки а также, трансформировать имена пользователей (username) в требуемые вам форматы.

Следует также отметить, что при включении режима NAS-а «Только активные пользователи» все модификаторы единичных атрибутов «Пользователи» будут проигнорированы и атрибуты будут сгенерированы собственно только для активных пользователей. При попадании пользователя в категорию неактивных, все его атрибуты будут удалятся. Для NAS-ов не имеющих этого статуса вся работа с атрибутами будет происходить на основании их модификаторов «Пользователи», которые могут принимать следующие значения: «Все», «Активный», «Неактивный», что в свою очередь порождает возможность городить логику работы с пользовательскими атрибутами какой угодно сложности.

Как проверить все ли хорошо?

При запущенном в одном окне

# radiusd -X 

делаем в соседнем что-то вроде

# radtest testlogin testpassword 127.0.0.1 0 dec0071981b1

Где testlogin и testpassword как несложно догадаться - логин/пароль существующего пользователя которого мы проверяем на авторизуемость, а dec0071981b1 это Radius secret нашего локального сервера доступа.

Что мы должны увидеть в результате? А вот что-то такое:

root@test11_1x64:~ # radtest testlogin testpassword 127.0.0.1 0 dec0071981b1
Sending Access-Request of id 252 to 127.0.0.1 port 1812
	User-Name = "testlogin"
	User-Password = "testpassword"
	NAS-IP-Address = 127.0.0.1
	NAS-Port = 0
	Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=252, length=32
	Framed-IP-Address = 172.16.0.2
	Framed-IP-Netmask = 255.255.255.0

В случае если мы увидим что-то вроде

root@test11_1x64:~ # testlogin testpassword 127.0.0.1 0 dec0071981b1
radclient:: Failed to find IP address for test11_1x64
radclient: Nothing to send.

стоит обратить внимание как минимум на /etc/hosts на тему добавления туда нашего хостнейма в виде

127.0.0.1   test11_1x64 test11_1x64.localdomain

Макросы

На данный момент поддерживаются следующие макросы, которые вы можете подставлять в значения ваших шаблонов атрибутов или сервисов

Макрос Описание
{IP} IP пользователя в формате x.x.x.x
{MAC} MAC пользователя в формате по-умолчанию aa:bb:aa:bb:aa:bb (two symbols, semicolon lowercase)
{MACFDL} MAC пользователя в формате aabb.aabb.aabb (four symbols, dotted lowercase)
{MACFML} MAC пользователя в формате aabb-aabb-aabb (four symbols, minuses lowercase)
{MACTMU} MAC пользователя в формате AA-BB-AA-BB-AA-AA (two symbols, minuses uppercase)
{MACTML} MAC пользователя в формате aa-bb-aa-bb-aa-bb (two symbols, minuses lowercase)
{LOGIN} Логин пользователя
{USERNAME} Юзернейм пользователя трансформированный относительно настроек NAS
{PASSWORD} Пароль пользователя в прямом виде
{TARIFF} Имя тарифа пользователя
{STATE} Состояние пользователя (ON-LINE/DOWN/PASSIVE/OFF-LINE/NOT-EXIST)
{NETID} ID сети нетхоста пользователя
{NETADDR} Сеть пользователя
{NETCIDR} CIDR сети пользователя
{NETSTART} начальная IP сети пользователя
{NETEND} конечная IP сети пользователя
{NETDESC} Сеть пользователя в формате network/cidr
{NETMASK} Маска сети пользователя в формате xxx.xxx.xxx.xxx
{SPEEDDOWN} Скорость даунлода пользователя в Kbit/s
{SPEEDUP} Скорость аплода пользователя в Kbit/s
{SPEEDDOWNB} Скорость даунлода пользователя в bit/s с 1024 битами в килобите
{SPEEDUPB} Скорость аплода пользователя в bit/s с 1024 битами в килобите
{SPEEDDOWNBD} Скорость даунлода пользователя в bit/s с 1000 битами в килобите
{SPEEDUPBD} Скорость аплода пользователя в bit/s с 1000 битами в килобите
{SPEEDDOWNBC} Скорость даунлода пользователя в bit/s с 1024 битами в килобите поделенная на 8 (Cisco burst)
{SPEEDUPBC} Скорость аплода пользователя в bit/s с 1024 битами в килобите поделенная на 8 (Cisco burst)
{SPEEDMRL} Скорость даунлода и аплода в виде downspeedk/upspeedk для Mikrotik-Rate-Limit
{USERSWITCHIP} IP присвоенного свитча пользователя в формате x.x.x.x
{USERSWITCHPORT} Порт присвоенного свитча пользвателя
{USERSWITCHMAC} MAC присвоенного свитча пользователя в формате aa:bb:aa:bb:aa:bb
{RADCLIENT} Путь к radclient с опциями по-умолчанию
{SUDO} Путь к sudo по-умолчанию
{PRINTF} Путь к printf по-умолчанию
{NASIP} IP NAS-а пользователя
{NASSECRET} Radius secret NAS-а пользователя
{NASPORT} Удаленный порт для radclient по-умолчанию (3799)

Шаблоны атрибутов с одинаковыми именами

Следует также заметить, что в целях улучшения быстродействия, архитектурой КучаГен-а не предусмотрено существование двух атрибутов с одинаковыми именами в рамках одного сценария. В этом случае, последний из описанных шаблонов атрибутов будет затирать все предыдущие. Для обхода этого ограничения, вы можете использовать другой сценарий для атрибутов с дублирующимися именами. Например, если вам требуется отдавать в reply какой-то одинаковый атрибут два раза скажем mpd-limit вы можете сделать это при помощи сценария groupreply как-то так:

В следствии чего, мы получим от FreeRADIUS следующий ответ:

....
	mpd-limit = "in#1=all rate-limit 5242880 655360"
	mpd-limit = "out#1=all rate-limit 1048576 131072"
....

это же относится и к случаям, если мы хотим отдавать атрибут с одинаковым именем но разными значениями для активных/неактивных пользователей.

Сервисы NAS

На данный момент поддерживаются сервисы PoD (RADIUS Packet of Disconnect) и CoA (RADIUS Change of Authorization). В рамках этих сервисов, вы можете скриптовать, все что вам захочется для обеспечения требуемого вам поведения серверов доступа. Теперь кратко о том, в каких ситуациях будут выполнены данные скрипты:

Сервис Предыдущее состояние пользователя Текущее состояние пользователя Будет выполнен скрипт
PoD Пользователь активен Пользователь не активен PoD
CoA Пользователь не активен Пользователь активен CoA Connect
CoA Пользователь активен Пользователь не активен CoA Disconnect
CoA Пользователь активен Пользователь активен + изменился любой его атрибут CoA Disconnect + CoA Connect

Соответственно для сервиса POD+CoA при вываливании пользователя в оффлайн правила последовательно те же. Для пользователей, которые ранее не имели какого-либо состояние (читаем новых пользователей) не будет выполнено никаких скриптов в рамках сервисов. Для них будут просто сгенерированы новые атрибуты на общих основаниях.

Много NAS-ов

Никто вас не заставляет вручную кликать всю конфигурацию для каждого вашего NAS сервера. Вы можете сконфигурировать только один и переносить все его опции, шаблоны атрибутов и сервисов на другие просто при помощи «Клонирования» в один клик. Также вы можете копировать, вставлять, и куда-то себе сохранять всю конфигурацию нужного вам NAS сервера, постить ее по форумам или мессенджерам в виде одной единственной строки текста.

О учёте трафика

Сам сервер FreeRADIUS вести учёт трафика не будет. Трафик должен учитываться при помощи протокола NetFlow: сенсором будет выступать сам RADIUS-клиент, который будет отправлять статистику на коллектор, в нашем случае модуль cap_nf ядра системы. Как это сделать будет описано отдельно в документации для выбранного вами решения.

А что по скорости?

Догони меня кирпич

multigen.txt · Последние изменения: 2018/09/08 17:58 — nightfly
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki