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

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


multigen

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версій Попередня ревізія
Попередня ревізія
multigen [2018/11/24 16:08]
multigen [2023/09/09 10:23] (поточний)
nightfly [Попереднє налаштування]
Рядок 1: Рядок 1:
 +====== КупаГен aka MultiGen ======
 +
 +Ця механіка з'явилася починаючи з релізу 0.9.0 і являє собою зручний рівень абстракції та автоматизації для роботи з будь-якими NAS, що підтримують роботу з FreeRADIUS. Взагалі-то вміє генерувати купу всякого під виглядом кастомних per-NAS атрибутів. Так, яких завгодно, ні - без прив'язки до будь-якого фіксованого типу NAS.
 +
 +{{:genasad.jpg?direct&|}}
 +
 +===== Попереднє налаштування =====
 +
 +Починаючи з FreeBSD 12.1 достатньо лише увімкнути (і запустити) FreeRADIUS в **/etc/rc.conf**. Все інше відносно КупаГен-у вже автоматично налаштовано для вас.
 +
 +Ми сподіваємося, що ви встановлювали Ubilling за допомогою інсталятора, і все потрібне у вас уже є. Для початку вмикаємо FreeRADIUS в **/etc/rc.conf** \\
 +
 +<file ini rc.conf>
 +radiusd_enable="YES"
 +</file>
 +
 +Тепер можна спробувати запустити FreeRADIUS, але поки що в debug-режимі:
 +<code>
 +# radiusd -X
 +</code>
 +
 +І якщо ви побачили щось схоже на код нижче - можна продовжувати далі.
 +<code>
 +... 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.
 +</code>
 +
 +===== Включення підтримки в Ubilling  =====
 +
 +Вмикаємо відповідну опцію у **alter.ini**
 +
 +<code 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
 +</code>
 +
 +===== Використання  =====
 +Виклик [[remoteapi|RemoteAPI]]
 +  ubapi "multigen" - регенерація даних усіх користувачів, природно тільки тих, що змінилися або відсутні.
 +  
 +Куди це засовувати?
 +
 +**crontab -e**
 +<code bash>
 +*/2 * * * *  /bin/ubapi "multigen"
 +</code>
 +
 +===== Конфігурація серверів доступу =====
 +Все гранично прозоро і тривіально
 +
 +{{:multigen_nas.png?600|}}
 +
 +Кожен NAS може мати свої власні механіки роботи, сервіси, що виконуються, і набори атрибутів, а також правила їхньої обробки, а також, трансформувати імена користувачів (username) у потрібні вам формати.
 +
 +{{:multigen_nas2.png?600|}}
 +
 +Слід також зазначити, що в разі ввімкнення режиму NAS-а "Тільки активні користувачі" всі модифікатори одиничних атрибутів "Користувачі" буде проігноровано, а атрибути буде згенеровано власне тільки для активних користувачів. У разі потрапляння користувача в категорію неактивних, усі його атрибути будуть видалені. Для NAS-ів, які не мають цього статусу, уся робота з атрибутами відбуватиметься на підставі їхніх модифікаторів "Користувачі", які можуть набувати таких значень: "Все", "Активний", "Неактивний", що, зі свого боку, породжує можливість городити логіку роботи з призначеними для користувача атрибутами якої завгодно складності.
 +\\
 +\\
 +**Не забуваємо**, що в продакшні слід перезапускати ваш радіус-сервер, скажімо, за допомогою service radiusd restart під час додавання нових NAS. FreeRADIUS читає radius clients тільки на своєму ж старті. \\
 +\\
 +**Не забуваємо №2**, що під час усіляких ваших експериментів із набором атрибутів (типу видалення, додавання, зміна імені атрибутів) варто зробити повне очищення та генерацію атрибутів заново. Видалення атрибута з довідника NAS-а не видалить атрибути з табличок mlg_check/mlg_reply.
 +
 +===== Кастомні налаштування NAS =====
 +
 +Також, починаючи з Ubilling 1.2.8, з'явилася можливість безпосередньо заповнювати або перепризначати параметри серверів доступу КучаГен. Зробити це можна, скориставшись "Кастомними налаштуваннями NAS". Наприклад ось так, можна додати резервні сервери доступу не вішаючи на них будь-які підмережі, а також перевизначити ім'я і RADIUS secret наявних серверів доступу:
 +
 +{{:multigen_ecn0.png?600|}}
 +
 +{{:multigen_noecn.png?600|}}
 +
 +Зайвохромосомні NAS мають пріоритет перед нормальними
 +
 +{{:multigen_ecn1.png?600|}}
 +
 +Власне ось результат
 +
 +{{:multigen_ecn2.png?600|}}
 +
 +І звичайно ж **не забуваємо**, що будь-які з цих змін також вимагають перезапуску FreeRADIUS.
 +
 +===== Як перевірити чи все гаразд? =====
 +При запущеному в одному вікні 
 +  # radiusd -X 
 +  
 +робимо в сусідньому щось на кшталт
 +
 +  # radtest testlogin testpassword 127.0.0.1 0 dec0071981b1
 +  
 +Де testlogin і testpassword, як нескладно здогадатися, - логін/пароль наявного користувача, якого ми перевіряємо на авторизованість, а dec0071981b1 це Radius secret нашого локального сервера доступу. 
 +
 +Що ми маємо побачити в результаті? А ось щось таке:
 +
 +<code>
 +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
 +
 +</code>
 +
 +У випадку, якщо ми побачимо щось на кшталт:
 +<code>
 +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.
 +</code>
 +
 +варто звернути увагу як мінімум на **/etc/hosts** на тему додавання туди нашого хостнейма у вигляді
 +<code>
 +127.0.0.1   test11_1x64 test11_1x64.localdomain
 +</code>
 +
 +===== Макроси =====
 +
 +Наразі підтримуються такі макроси, які ви можете підставляти в значення ваших шаблонів атрибутів або сервісів
 +
 +^ Макрос  ^ Опис                    ^ 
 +| {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 якось так:
 +
 +{{:mlg_mpdspeedlimit0.png?direct&800|}}
 +
 +Внаслідок чого, ми отримаємо від FreeRADIUS таку відповідь:
 +
 +<code bash>
 +....
 + mpd-limit = "in#1=all rate-limit 5242880 655360"
 + mpd-limit = "out#1=all rate-limit 1048576 131072"
 +....
 +</code>
 +
 +це ж стосується і випадків, якщо ми хочемо віддавати атрибут з однаковим ім'ям але різними значеннями для активних/неактивних користувачів.
 +
 +{{:mlg_mtaccesslists0.png?direct&800|}}
 +
 +===== Сервіси 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 сервера, постити її на форумах або в месенджерах у вигляді одного єдиного рядка тексту.
 +
 +{{:mlgnascloneform0.png?direct&|}}
 +
 +===== А що по швидкості? =====
 +Наздожени мене цегла
 +
 +{{:multigen_perfoormance2.jpg?900|}}
 +
 +===== Про облік трафіку =====
 +Сам сервер FreeRADIUS вести облік трафіку не буде. Трафік має враховуватися за допомогою протоколу NetFlow: сенсором виступатиме сам RADIUS-клієнт, який надсилатиме статистику на колектор, у нашому випадку модуль cap_nf ядра системи. Як це зробити буде описано окремо в документації для обраного вами рішення.
 +
 +===== А все ж таки якщо дуже хочеться? =====
 +Якщо дуже хочеться, і вам не страшно - можете спробувати використовувати виклик **multigentraff** з [[remoteapi|Remote API]]. Наприклад якось так:
 +<code>
 +20 * * * *  /bin/ubapi "multigentraff"
 +</code>
 +Це запихатиме дані з акаунтингу в Stargazer.
 +===== А можна щоб це було не так повільно? =====
 +Так, тепер можна. Використовуйте для тельбуханя даних акаунтингу планетарний тельбухач Ішимура. Просто ввімкнувши опцію 
 +<code ini>
 +ISHIMURA_ENABLED=1
 +</code>
 +у конфігах [[alteriniconf|alter.ini]] та [[userstats|userstats.ini]]. Це активує шоковий двигун, для обходу всієї механіки роботи з колекторами Stargazer-а.
 +
 +===== А як чистити дані акаунтингу? =====
 +
 +В Ubilling 1.3.0 і далі, все це керується опціями MULTIGEN_AUTOCLEANUP_* конфіга [[alteriniconf|alter.ini]] і відбувається **автоматично**.
 +
 +У більш ранніх релізах, ви можете зробити це за допомогою [[onepunch|One-Punch скриптів]] будь-якої упоротості, які будуть робити все, що ви захочете.
 +
 +Наприклад якихось таких:
 +<code php>
 +$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);
 +</code>
 +
 +Зберігаємо якось так
 +
 +{{:mlgclean0.png?direct&|}}
 +
 +Після чого залишаємо періодичний виклик у **crontab -e** якось так
 +
 +<code bash>
 +4 4 * * *     /bin/ubapi "onepunch&param=mlgclean"
 +</code>
 +
 +===== А як зробити з аккаунтингу DN? =====
 +У разі, якщо ви використовуєте планетарний тельбухач Ішимура, все має нормально працювати саме по собі за умови штатного виклику fullhostscan з параметром traffdiff.Якщо ж ви не бажаєте спиратися на зміни трафіку, а, скажімо, тільки на існування незавершених сесій Radius, все так само дуже просто, One-Punch скриптом. Для комутованих з'єднань типу PPPoE можна, наприклад, так:
 +
 +<code php>
 + $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');
 +        }
 +    }
 +</code>
 +
 +<code bash>
 +*/20 * * * *     /bin/ubapi "onepunch&param=mlgdn"
 +</code>
  
multigen.txt · Востаннє змінено: 2023/09/09 10:23 повз nightfly