Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
| Порівняння попередніх версій Попередня ревізія | Попередня ревізія | ||
|
mgmikrotikdhcp [2019/12/19 00:46] |
mgmikrotikdhcp [2023/09/04 19:34] (поточний) bobr [Коли DHCP-сервер у нас десь там, а сам Mikrotik NAS - усього лише relay] |
||
|---|---|---|---|
| Рядок 1: | Рядок 1: | ||
| + | ====== Авторизація абонентів DHCP на MikroTik методом IP + MAC за допомогою КупаГен ====== | ||
| + | Відразу слід зазначити, | ||
| + | * Абсолютна неможливість будь-якого управління абонентом після отримання ним DHCP lease від мікротіка. Ніяких CoA і PoD. Тільки таймаут виданого лізу може змінити стан підключення абонента. | ||
| + | * Обов' | ||
| + | * Ніякого Walled Garden та інших зручностей, | ||
| + | |||
| + | Водночас не можна не відзначити і позитивних моментів (такий собі острівець надії посеред темряви і смутку): | ||
| + | * Простота реалізації. Застосування < | ||
| + | * Дуже велика (практично ідентична) схожість у роботі Ubilling з Mikrotik за API і авторизацією IP + MAC. Тільки IPшки і address lists тепер видає радіус, | ||
| + | ====== Конфігурація Ubilling ====== | ||
| + | |||
| + | Вже має бути налаштований [[multigen|КупаГен]].\\ | ||
| + | Не забуваємо додати словник для Mikrotik в / | ||
| + | < | ||
| + | $INCLUDE | ||
| + | </ | ||
| + | Після чого перезапускаємо FreeRADIUS | ||
| + | |||
| + | |||
| + | Налаштовуємо білінг стандартно як і для будь-яких інших пристроїв | ||
| + | |||
| + | у довіднику (мережі та послуги) додаємо мережі, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | додаємо NAS\\ | ||
| + | {{: | ||
| + | |||
| + | У конфігурації КупаГен для нашого NAS налаштовуємо атрибути: | ||
| + | {{: | ||
| + | |||
| + | Як уже згадувалося вище - для NAS MikroTik + DHCP **НЕ працюють Coa\PoD**, тому відключаться\включаться абоненти будуть після закінчення lease time (Session-Timeout). Час виберіть відповідний для себе. У нашому прикладі абоненти, | ||
| + | |||
| + | ====== Конфігурація Mikrotik ====== | ||
| + | Вмикаємо RADIUS, і його роботу з DHCP\\ | ||
| + | {{: | ||
| + | |||
| + | У полі **Address** вписуємо адресу нашого Ubilling (адже саме там живе наш радіус? | ||
| + | {{: | ||
| + | |||
| + | На інтерфейс, | ||
| + | {{: | ||
| + | |||
| + | І створюємо на цьому ж інтерфейсі dhcp-server (у полі Address Pool вказуємо **static-only**. У полі Use RADIUS ставимо **yes**):\\ | ||
| + | {{: | ||
| + | |||
| + | В IP -> DHCP Server -> Networks Налаштовуємо, | ||
| + | {{: | ||
| + | |||
| + | |||
| + | Базове мінімальне налаштування завершено. Тепер абоненти отримуватимуть IP з білінгу. Абоненти з позитивним станом рахунку будуть додані в IP -> Firewall -> Address-List, | ||
| + | {{: | ||
| + | |||
| + | ====== Отримання графіків зі статистикою трафіку абонента з Mikrotik ====== | ||
| + | Якщо ви дуже хочете отримувати графіки зі статистики трафіку абонента з Mikrotik так само, як під час роботи з Mikrotik через API, можете використати наступну **костиль**: | ||
| + | |||
| + | Вмикаємо опцію [[alteriniconf|alter.ini]] | ||
| + | < | ||
| + | MULTIGEN_USE_ROS_TRAFFIC_GRAPHS=1 | ||
| + | </ | ||
| + | |||
| + | Далі:\\ | ||
| + | ===== Коли DHCP-сервером у нас сам Mikrotik NAS - DEPRECATED і наполегливо не рекомендується до використання ===== | ||
| + | **Отже, оскільки у цього методу раптово (за майже рік, ага) було виявлено ФАТАЛЬНИЙ НЕДОЛІК, | ||
| + | |||
| + | **У зв' | ||
| + | \\ | ||
| + | \\ | ||
| + | // | ||
| + | |||
| + | **А цю штуку залишимо суто для розуміння " | ||
| + | |||
| + | в Mikrotik NAS **НЕ** __додаємо__ | ||
| + | * в **System -> Scripts** скрипт приблизно такого змісту (назвемо його, скажімо, | ||
| + | <code tcl [enable_line_numbers=" | ||
| + | # getting global vars | ||
| + | :global leaseBound; | ||
| + | :global leaseActIP; | ||
| + | |||
| + | :local speed ""; | ||
| + | :local newSpeed ""; | ||
| + | :local queueRec ""; | ||
| + | :local alreadyExists false; | ||
| + | |||
| + | :if ($leaseBound = 1) do={ | ||
| + | /queue simple | ||
| + | # looking for an " | ||
| + | :foreach tQueue in=[/queue simple find where (target=" | ||
| + | # if " | ||
| + | # 'cause it may be a tariff change and new speed settings may appear | ||
| + | :set newSpeed [get $tQueue max-limit]; | ||
| + | remove $tQueue; | ||
| + | } | ||
| + | |||
| + | # looking for a " | ||
| + | :foreach tQueue in=[/queue simple find where (target=" | ||
| + | :set queueRec [$tQueue]; | ||
| + | :set speed [get $tQueue max-limit]; | ||
| + | :set alreadyExists true; | ||
| + | |||
| + | # if $newSpeed is still empty - then no incorrect record was found | ||
| + | # and we need to make $newSpeed and $speed equal to avoid excess speed change action | ||
| + | :if ($newSpeed = "" | ||
| + | :set newSpeed [$speed]; | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | # if any of " | ||
| + | # otherwise we can't do a thing | ||
| + | :if ($speed != "" | ||
| + | # if found queue has correct name - just check it's speed and correct if needed | ||
| + | # else - create a new queue with correct name and speed | ||
| + | :if ($alreadyExists) do={ | ||
| + | :if ($newSpeed != $speed) do={ | ||
| + | set $queueRec max-limit=$newSpeed disabled=no; | ||
| + | } else={ | ||
| + | :log warning ("mlg_ changer: nothing to change for $leaseActIP - already exists with such speed" | ||
| + | } | ||
| + | } else={ | ||
| + | add name=" | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | * в **IP -> DHCP Server -> DHCP** | ||
| + | Логіка роботи цього скрипта така: у момент видачі // | ||
| + | Звісно, | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Коли DHCP-сервер у нас десь там, а сам Mikrotik NAS - всього лише relay ===== | ||
| + | Цей спосіб, | ||
| + | \\ | ||
| + | Як і в попередньому випадку в Mikrotik NAS __додаємо__ | ||
| + | * у **System -> Scripts** | ||
| + | <code tcl [enable_line_numbers=" | ||
| + | :local qSpeed ""; | ||
| + | :local qTarget ""; | ||
| + | :local qIP ""; | ||
| + | :local currentSpeed ""; | ||
| + | :local leaseDynPrefix " | ||
| + | |||
| + | /queue simple | ||
| + | # get all of the simple queues which have no " | ||
| + | #:local tQueueList [find where (name~" | ||
| + | |||
| + | # get all of the simple queues which have no " | ||
| + | :local tQueueList [find where (name~" | ||
| + | :local tQueueMLG ""; | ||
| + | |||
| + | # if some of the simple queues with no " | ||
| + | :if ([:len $tQueueList] > 0) do={ | ||
| + | :log warning ("Not mlg_ queues found: " . [:len $tQueueList]); | ||
| + | # conditionally step through the list | ||
| + | # get the necessary prameters into local vars | ||
| + | # remove the " | ||
| + | :foreach tQueue in=$tQueueList do={ | ||
| + | :set qSpeed [get $tQueue max-limit]; | ||
| + | :set qTarget [get $tQueue target]; | ||
| + | :set qIP [:pick [:tostr $qTarget] 0 [:find [:tostr $qTarget] "/" | ||
| + | |||
| + | remove $tQueue; | ||
| + | |||
| + | # try to find simple queue with such IP address and " | ||
| + | :set tQueueMLG [find where (name=" | ||
| + | |||
| + | # as far as we can rely on that fact that simple queues names are unique | ||
| + | # we can be sure that there will be only one rec with such IP address and " | ||
| + | # and so if we found one - we can just change it's speed, enabled status and (just in case) - target IP | ||
| + | # and not to create new one | ||
| + | :if ([:len $tQueueMLG] > 0) do={ | ||
| + | :foreach eachQueueMLG in=$tQueueMLG do={ | ||
| + | :set currentSpeed [get $eachQueueMLG max-limit]; | ||
| + | |||
| + | :if ($currentSpeed != $qSpeed) do={ | ||
| + | set $eachQueueMLG max-limit=$qSpeed target=$qTarget disabled=no; | ||
| + | } else={ | ||
| + | :log warning ("mlg_ changer: nothing to change for $qIP - already exists with such speed $qSpeed" | ||
| + | } | ||
| + | } | ||
| + | } else={ | ||
| + | # create a new queue with correct name and speed | ||
| + | add name=" | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | * далі йдемо в **System -> Scheduler** і створюємо там завдання, | ||
| + | По суті, ця штука слідує за тим самим принципом, | ||
| + | |||
| + | Варто зазначити, | ||
| + | |||
| + | І звичайно ж, **потрібно не забути про дуже важливий момент**, | ||
| + | \\ | ||
| + | Чи варто говорити, | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Вмикаємо самі графіки на Mikrotik NAS ===== | ||
| + | Ну і, як показує практика, | ||
| + | |||
| + | **Tools -> Graphing** | ||
| + | |||
| + | Натискаємо " | ||
| + | {{: | ||
| + | і встановлюємо бажану частоту збору та запису статистичних даних. Зазвичай це - 5 хвилин. Багатьом, | ||
| + | |||
| + | Далі звертаємо увагу на вкладки " | ||
| + | {{: | ||
| + | тут ми можемо вказати деталі збору статистики (для сутностей типу інтерфейси, | ||
| + | {{: | ||
| + | і додаємо правило для наших майбутніх графчиків: | ||
| + | * **Simple Queue** - шейпери, | ||
| + | * **Allow Address** - адреса/ | ||
| + | * **Store On Disk** - чи зберігати дані статистики на диску. Краще ввімкнути - адже ми не хочемо, | ||
| + | * **Allow Target** - дуже цікава опція, що визначає, | ||
| + | Тепер, коли " | ||
| + | А якщо не споглядаємо - значить, | ||
| + | \\ | ||
| + | ======Копірайт====== | ||
| + | Окрема подяка за допомогу у створенні цього мануала - [[https:// | ||
| + | Головний мікротико-скрипто-тестер - [[https:// | ||
| + | |||