Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія | Попередня ревізія | ||
mgmikrotikdhcp [2021/01/15 11:11] |
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:// | ||
+ |