Користувальницькькі налаштування

Налаштування сайту


Сайдбар

Розділи

Загальний опис
Історія змін
Рекомендації щодо оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Допомога проєкту
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

multigen

КупаГен aka MultiGen

Ця механіка з'явилася починаючи з релізу 0.9.0 і являє собою зручний рівень абстракції та автоматизації для роботи з будь-якими NAS, що підтримують роботу з FreeRADIUS. Взагалі-то вміє генерувати купу всякого під виглядом кастомних per-NAS атрибутів. Так, яких завгодно, ні - без прив'язки до будь-якого фіксованого типу NAS.

Попереднє налаштування

Починаючи з FreeBSD 12.1 достатньо лише увімкнути (і запустити) FreeRADIUS в /etc/rc.conf. Все інше відносно КупаГен-у вже автоматично налаштовано для вас.

Ми сподіваємося, що ви встановлювали Ubilling за допомогою інсталятора, і все потрібне у вас уже є. Для початку вмикаємо FreeRADIUS в /etc/rc.conf

rc.conf
radiusd_enable="YES"

Тепер можна спробувати запустити 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. Логує в exports/multigen.log
;MULTIGEN_LOGGING=1
;Шлях і опції за замовчуванням radclient для КупаГен. Необов'язкова опція.
;MULTIGEN_RADCLIENT="/usr/local/bin/radclient -r 3 -t 1"
;Використовується тільки для баз, що використовують innodb, і має вирішувати проблеми зі швидкодією,
за допомогою вирубування автокомміта і ручної роботи з транзакціями.
;MULTIGEN_MAKE_INNODB_GREAT_AGAIN=1
;Показувати тільки незавершені сесії за замовчуванням
;MULTIGEN_UNFACCT=1
;Кількість днів, використовуваних для показу статистики акаунтингу за замовчуванням
;MULTIGEN_DAYSACCT=30
;Додаткові поля акаунтингу для показу
;MULTIGEN_FIELDSACCT="acctuniqueid,acctupdatetime"
;Чи ввімкнено планетарний тельбухач Ішимура?
ISHIMURA_ENABLED=0
;Вмикає і встановлює таймаут кешування юзернеймів. Може поліпшити швидкодію звітів з аккаунтингу.
;Так, циферка в секундах. Відсутня або рівна 0 опція вимикає кешування взагалі.
;MULTIGEN_UNTIMEOUT=3600
;Відправляти PoD при зміні IP адреси у користувача? Може приймати значення 0,1,2. У разі 1 відправляємо PoD із новими даними. У разі 2 відправляємо 2 PoD з новими і старими даними. Актуально, наприклад, для статичних адрес або radius login=ip.
MULTIGEN_POD_ON_IP_CHANGE=0
Відправляти PoD у разі зміни MAC-адреси у користувача? Може приймати значення 0,1,2. У разі 1 відправляємо PoD із новими даними. У разі 2 відправляємо 2 PoD з новими і старими даними. Актуально, наприклад, для статичних адрес або radius login=mac.
MULTIGEN_POD_ON_MAC_CHANGE=0

Використання

Виклик RemoteAPI

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

Куди це засовувати?

crontab -e

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

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

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

Кожен NAS може мати свої власні механіки роботи, сервіси, що виконуються, і набори атрибутів, а також правила їхньої обробки, а також, трансформувати імена користувачів (username) у потрібні вам формати.

Слід також зазначити, що в разі ввімкнення режиму NAS-а “Тільки активні користувачі” всі модифікатори одиничних атрибутів “Користувачі” буде проігноровано, а атрибути буде згенеровано власне тільки для активних користувачів. У разі потрапляння користувача в категорію неактивних, усі його атрибути будуть видалені. Для NAS-ів, які не мають цього статусу, уся робота з атрибутами відбуватиметься на підставі їхніх модифікаторів “Користувачі”, які можуть набувати таких значень: “Все”, “Активний”, “Неактивний”, що, зі свого боку, породжує можливість городити логіку роботи з призначеними для користувача атрибутами якої завгодно складності.

Не забуваємо, що в продакшні слід перезапускати ваш радіус-сервер, скажімо, за допомогою service radiusd restart під час додавання нових NAS. FreeRADIUS читає radius clients тільки на своєму ж старті.

Не забуваємо №2, що під час усіляких ваших експериментів із набором атрибутів (типу видалення, додавання, зміна імені атрибутів) варто зробити повне очищення та генерацію атрибутів заново. Видалення атрибута з довідника NAS-а не видалить атрибути з табличок mlg_check/mlg_reply.

Кастомні налаштування NAS

Також, починаючи з Ubilling 1.2.8, з'явилася можливість безпосередньо заповнювати або перепризначати параметри серверів доступу КучаГен. Зробити це можна, скориставшись “Кастомними налаштуваннями NAS”. Наприклад ось так, можна додати резервні сервери доступу не вішаючи на них будь-які підмережі, а також перевизначити ім'я і RADIUS secret наявних серверів доступу:

Зайвохромосомні NAS мають пріоритет перед нормальними

Власне ось результат

І звичайно ж не забуваємо, що будь-які з цих змін також вимагають перезапуску FreeRADIUS.

Як перевірити чи все гаразд?

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

# 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:~ # radtest 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.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:aa:bb
{RADCLIENT} Шлях до radclient з опціями за замовчуванням
{SUDO} Шлях до sudo за замовчуванням
{PRINTF} Шлях до printf за замовчуванням
{NASIP} IP NAS-а користувача
{NASSECRET} Radius secret NAS-а користувача
{NASPORT} Віддалений порт для radclient за замовчуванням (3799)
{NETEXT} Користувацькі підмережі з NETWORKS_EXT для Framed-Route атрибуту

Шаблони атрибутів з однаковими іменами

Слід також зауважити, що з метою поліпшення швидкодії, архітектурою КупаГен не передбачено існування двох атрибутів з однаковими іменами в рамках одного сценарію. У цьому випадку, останній з описаних шаблонів атрибутів буде затирати всі попередні. Для обходу цього обмеження, ви можете використовувати інший сценарій для атрибутів з дублюючимися іменами. Наприклад, якщо вам потрібно віддавати в 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 ядра системи. Як це зробити буде описано окремо в документації для обраного вами рішення.

А все ж таки якщо дуже хочеться?

Якщо дуже хочеться, і вам не страшно - можете спробувати використовувати виклик multigentraff з Remote API. Наприклад якось так:

20 * * * *  /bin/ubapi "multigentraff"

Це запихатиме дані з акаунтингу в Stargazer.

А можна щоб це було не так повільно?

Так, тепер можна. Використовуйте для тельбуханя даних акаунтингу планетарний тельбухач Ішимура. Просто ввімкнувши опцію

ISHIMURA_ENABLED=1

у конфігах alter.ini та userstats.ini. Це активує шоковий двигун, для обходу всієї механіки роботи з колекторами Stargazer-а.

А як чистити дані акаунтингу?

В Ubilling 1.3.0 і далі, все це керується опціями MULTIGEN_AUTOCLEANUP_* конфіга alter.ini і відбувається автоматично.

У більш ранніх релізах, ви можете зробити це за допомогою One-Punch скриптів будь-якої упоротості, які будуть робити все, що ви захочете.

Наприклад якихось таких:

$cleanupDays=30;
 
$query="DELETE FROM `mlg_acct` WHERE `acctstarttime` <= NOW() - INTERVAL ".$cleanupDays." DAY AND `acctstoptime` IS NOT NULL";
nr_query($query);
 
$query="DELETE FROM `mlg_postauth` WHERE `authdate` <= NOW() - INTERVAL ".$cleanupDays." DAY";
nr_query($query);

Зберігаємо якось так

Після чого залишаємо періодичний виклик у crontab -e якось так

4 4 * * *     /bin/ubapi "onepunch&param=mlgclean"

А як зробити з аккаунтингу DN?

У разі, якщо ви використовуєте планетарний тельбухач Ішимура, все має нормально працювати саме по собі за умови штатного виклику fullhostscan з параметром traffdiff.Якщо ж ви не бажаєте спиратися на зміни трафіку, а, скажімо, тільки на існування незавершених сесій Radius, все так само дуже просто, One-Punch скриптом. Для комутованих з'єднань типу PPPoE можна, наприклад, так:

 $dnPath = DATA_PATH . 'dn/';
    //directory clanup
    $oldDnData = rcms_scandir($dnPath);
    if (!empty($oldDnData)) {
        foreach ($oldDnData as $deleteFile) {
            unlink($dnPath . $deleteFile);
        }
    }
 
    $accounting = new NyanORM(MultiGen::NAS_ACCT);
    $accounting->selectable(array('username', 'framedipaddress', 'acctstarttime'));
    $accounting->where('acctstoptime', 'IS', 'NULL');
    $allSessions = $accounting->getAll();
 
    //saving new DN data
    if (!empty($allSessions)) {
        foreach ($allSessions as $io=>$each) {
            file_put_contents($dnPath.$each['username'], 'alive');
        }
    }
*/20 * * * *     /bin/ubapi "onepunch&param=mlgdn"
multigen.txt · Востаннє змінено: 2023/09/09 10:23 повз nightfly