Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія | Попередня ревізія Наступна ревізія По сторонах наступні версії | ||
multigen [2019/12/17 13:05] |
multigen [2023/09/09 10:21] nightfly [Попереднє налаштування] |
||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
+ | ====== КупаГен aka MultiGen ====== | ||
+ | |||
+ | Ця механіка з' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== Попереднє налаштування ===== | ||
+ | |||
+ | Починаючи з FreeBSD 12.1 **достатньо лише увімкнути (і запустити) FreeRADIUS** в / | ||
+ | |||
+ | Ми сподіваємося, | ||
+ | |||
+ | <file ini rc.conf> | ||
+ | radiusd_enable=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Закінчуємо конфігурацію і перевіряємо ==== | ||
+ | Потім приступаємо до конфігурації з' | ||
+ | ^ Параметр | ||
+ | | server | ||
+ | | port | Порт сервера бази даних | ||
+ | | login | Користувач | ||
+ | | password | ||
+ | | radius_db | Ім' | ||
+ | |||
+ | Якщо все закінчили, | ||
+ | < | ||
+ | # 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 / | ||
+ | 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** | ||
+ | |||
+ | <code ini> | ||
+ | ;Чи ввімкнено підтримку КупаГен? | ||
+ | MULTIGEN_ENABLED=1 | ||
+ | ;Ця опція не обов' | ||
+ | ;Може зменшити швидкодію. Радикально. Рекомендується вмикати тільки на час налагодження або конфігурації нових NAS. Логує в exports/ | ||
+ | ; | ||
+ | ;Шлях і опції за замовчуванням radclient для КупаГен. Необов' | ||
+ | ; | ||
+ | ; | ||
+ | за допомогою вирубування автокомміта і ручної роботи з транзакціями. | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ;Чи ввімкнено планетарний тельбухач Ішимура? | ||
+ | ISHIMURA_ENABLED=0 | ||
+ | ; | ||
+ | ;Так, циферка в секундах. Відсутня або рівна 0 опція вимикає кешування взагалі. | ||
+ | ; | ||
+ | ; | ||
+ | MULTIGEN_POD_ON_IP_CHANGE=0 | ||
+ | Відправляти PoD у разі зміни MAC-адреси у користувача? | ||
+ | MULTIGEN_POD_ON_MAC_CHANGE=0 | ||
+ | </ | ||
+ | |||
+ | ===== Використання | ||
+ | Виклик [[remoteapi|RemoteAPI]] | ||
+ | ubapi " | ||
+ | | ||
+ | Куди це засовувати? | ||
+ | |||
+ | **crontab -e** | ||
+ | <code bash> | ||
+ | */2 * * * * /bin/ubapi " | ||
+ | </ | ||
+ | |||
+ | ===== Конфігурація серверів доступу ===== | ||
+ | Все гранично прозоро і тривіально | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Кожен NAS може мати свої власні механіки роботи, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Слід також зазначити, | ||
+ | \\ | ||
+ | \\ | ||
+ | **Не забуваємо**, | ||
+ | \\ | ||
+ | **Не забуваємо №2**, що під час усіляких ваших експериментів із набором атрибутів (типу видалення, | ||
+ | |||
+ | ===== Кастомні налаштування NAS ===== | ||
+ | |||
+ | Також, починаючи з Ubilling 1.2.8, з' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Зайвохромосомні NAS мають пріоритет перед нормальними | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Власне ось результат | ||
+ | |||
+ | {{: | ||
+ | |||
+ | І звичайно ж **не забуваємо**, | ||
+ | |||
+ | ===== Як перевірити чи все гаразд? | ||
+ | При запущеному в одному вікні | ||
+ | # radiusd -X | ||
+ | | ||
+ | робимо в сусідньому щось на кшталт | ||
+ | |||
+ | # radtest testlogin testpassword 127.0.0.1 0 dec0071981b1 | ||
+ | | ||
+ | Де testlogin і testpassword, | ||
+ | |||
+ | Що ми маємо побачити в результаті? | ||
+ | |||
+ | < | ||
+ | root@test11_1x64: | ||
+ | Sending Access-Request of id 252 to 127.0.0.1 port 1812 | ||
+ | User-Name = " | ||
+ | User-Password = " | ||
+ | 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: | ||
+ | radclient:: Failed to find IP address for test11_1x64 | ||
+ | radclient: Nothing to send. | ||
+ | </ | ||
+ | |||
+ | варто звернути увагу як мінімум на **/ | ||
+ | < | ||
+ | 127.0.0.1 | ||
+ | </ | ||
+ | |||
+ | ===== Макроси ===== | ||
+ | |||
+ | Наразі підтримуються такі макроси, | ||
+ | |||
+ | ^ Макрос | ||
+ | | {IP} | IP користувача у форматі x.x.x.x | | ||
+ | | {MAC} | MAC користувача у форматі за замовчуванням aa: | ||
+ | | {MACFDL} | ||
+ | | {MACFML} | ||
+ | | {MACTMU} | ||
+ | | {MACTML} | ||
+ | | {LOGIN} | ||
+ | | {USERNAME} | ||
+ | | {PASSWORD} | ||
+ | | {TARIFF} | Ім' | ||
+ | | {STATE} | Стан користувача (ON-LINE/ | ||
+ | | {NETID} | ID мережі нетхоста користувача | | ||
+ | | {NETADDR} | Мережа користувача | | ||
+ | | {NETCIDR} | CIDR мережі користувача | | ||
+ | | {NETSTART} | початкова IP мережі користувача | | ||
+ | | {NETEND} | кінцева IP мережі користувача | | ||
+ | | {NETDESC} | Мережа користувача у форматі network/ | ||
+ | | {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/ | ||
+ | | {USERSWITCHIP} | IP присвоєного світча користувача у форматі x.x.x.x | | ||
+ | | {USERSWITCHPORT} | Порт присвоєного світча користувача | | ||
+ | | {USERSWITCHMAC} | MAC присвоєного світча користувача у форматі aa: | ||
+ | | {RADCLIENT} | Шлях до radclient з опціями за замовчуванням | | ||
+ | | {SUDO} | Шлях до sudo за замовчуванням | | ||
+ | | {PRINTF} | Шлях до printf за замовчуванням | | ||
+ | | {NASIP} | IP NAS-а користувача | | ||
+ | | {NASSECRET} | Radius secret NAS-а користувача | | ||
+ | | {NASPORT} | Віддалений порт для radclient за замовчуванням (3799) | | ||
+ | | {NETEXT} | Користувацькі підмережі з NETWORKS_EXT для Framed-Route атрибуту | | ||
+ | |||
+ | |||
+ | ===== Шаблони атрибутів з однаковими іменами ===== | ||
+ | Слід також зауважити, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Внаслідок чого, ми отримаємо від FreeRADIUS таку відповідь: | ||
+ | |||
+ | <code bash> | ||
+ | .... | ||
+ | mpd-limit = " | ||
+ | mpd-limit = " | ||
+ | .... | ||
+ | </ | ||
+ | |||
+ | це ж стосується і випадків, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== Сервіси 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 сервера. Ви можете конфігурувати тільки один і переносити всі його опції, шаблони атрибутів і сервісів на інші просто за допомогою " | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== А що по швидкості? | ||
+ | Наздожени мене цегла | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== Про облік трафіку ===== | ||
+ | Сам сервер FreeRADIUS вести облік трафіку не буде. Трафік має враховуватися за допомогою протоколу NetFlow: сенсором виступатиме сам RADIUS-клієнт, | ||
+ | |||
+ | ===== А все ж таки якщо дуже хочеться? | ||
+ | Якщо дуже хочеться, | ||
+ | < | ||
+ | 20 * * * * /bin/ubapi " | ||
+ | </ | ||
+ | Це запихатиме дані з акаунтингу в Stargazer. | ||
+ | ===== А можна щоб це було не так повільно? | ||
+ | Так, тепер можна. Використовуйте для тельбуханя даних акаунтингу планетарний тельбухач Ішимура. Просто ввімкнувши опцію | ||
+ | <code ini> | ||
+ | ISHIMURA_ENABLED=1 | ||
+ | </ | ||
+ | у конфігах [[alteriniconf|alter.ini]] та [[userstats|userstats.ini]]. Це активує шоковий двигун, | ||
+ | |||
+ | ===== А як чистити дані акаунтингу? | ||
+ | |||
+ | В Ubilling 1.3.0 і далі, все це керується опціями MULTIGEN_AUTOCLEANUP_* конфіга [[alteriniconf|alter.ini]] і відбувається **автоматично**. | ||
+ | |||
+ | У більш ранніх релізах, | ||
+ | |||
+ | Наприклад якихось таких: | ||
+ | <code php> | ||
+ | $cleanupDays=30; | ||
+ | |||
+ | $query=" | ||
+ | nr_query($query); | ||
+ | |||
+ | $query=" | ||
+ | nr_query($query); | ||
+ | </ | ||
+ | |||
+ | Зберігаємо якось так | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Після чого залишаємо періодичний виклик у **crontab -e** якось так | ||
+ | |||
+ | <code bash> | ||
+ | 4 4 * * * / | ||
+ | </ | ||
+ | |||
+ | ===== А як зробити з аккаунтингу DN? ===== | ||
+ | У разі, якщо ви використовуєте планетарний тельбухач Ішимура, | ||
+ | |||
+ | <code php> | ||
+ | | ||
+ | //directory clanup | ||
+ | $oldDnData = rcms_scandir($dnPath); | ||
+ | if (!empty($oldDnData)) { | ||
+ | foreach ($oldDnData as $deleteFile) { | ||
+ | unlink($dnPath . $deleteFile); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $accounting = new NyanORM(MultiGen:: | ||
+ | $accounting-> | ||
+ | $accounting-> | ||
+ | $allSessions = $accounting-> | ||
+ | |||
+ | //saving new DN data | ||
+ | if (!empty($allSessions)) { | ||
+ | foreach ($allSessions as $io=> | ||
+ | file_put_contents($dnPath.$each[' | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | */20 * * * * / | ||
+ | </ | ||