Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія | Наступна ревізія По сторонах наступні версії | ||
mgmikrotikdhcp [2021/01/16 08:53] |
mgmikrotikdhcp [2022/09/24 14:39] 127.0.0.1 зовнішнє редагування |
||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
+ | ====== Авторизация абонентов DHCP на MikroTik методом IP + MAC при помощи КучаГен ====== | ||
+ | Сразу следует оговорится, | ||
+ | * Абсолютная невозможность какого либо управления абонентом после получения им DHCP lease от микротика. Никаких CoA и PoD. Только таймаут выданного лиза может изменить состояние подключения абонента. | ||
+ | * Обязательное использование фаерволла и address lists для предоставления/ | ||
+ | * Никакого Walled Garden и прочих удобств, | ||
+ | |||
+ | В то же время нельзя не отметить и положительных моментов(такой себе островок надежды посреди тьмы и грусти): | ||
+ | * Простота реализации. Применение < | ||
+ | * Очень большая(практически идентичная) схожесть в работе Ubilling с Mikrotik по API и авторизацией IP + MAC. Только IPшки и address lists теперь выдает радиус, | ||
+ | ====== Конфигурация Ubilling ====== | ||
+ | |||
+ | Уже должен быть настроен [[multigen|КучаГен]].\\ | ||
+ | Не забываем добавить словарь для Mikrotik в / | ||
+ | < | ||
+ | $INCLUDE | ||
+ | </ | ||
+ | После чего перезапускаем FreeRADIUS | ||
+ | |||
+ | |||
+ | Настраиваем биллинг стандартно как и для любых других устройств | ||
+ | |||
+ | в справочнике (сети и услуги) добавляем сети, создаем услуги(тип сети можете указать как "DHCP static" | ||
+ | |||
+ | {{: | ||
+ | |||
+ | добавляем 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 Настраиваем добавляем нашу абонентскую сеть и указываем адреса Default gateway и DNS, которые будут выдаваться клиентам: | ||
+ | {{: | ||
+ | |||
+ | |||
+ | Базовая минимальная настройка завершена. Теперь абоненты будут получать IP из биллинга. Абоненты с положительным состоянием счета будут добавлены в IP -> Firewall -> Address-List, | ||
+ | {{: | ||
+ | |||
+ | ====== Получение графиков по статистике трафика абонента с Mikrotik ====== | ||
+ | Если вы очень хотите получать графики по статистике трафика абонента с Mikrotik так же, как при работе с Mikrotik по API - можете использовать следующий **костыль**: | ||
+ | |||
+ | Включаем опцию [[alteriniconf|alter.ini]] | ||
+ | < | ||
+ | MULTIGEN_USE_ROS_TRAFFIC_GRAPHS=1 | ||
+ | </ | ||
+ | |||
+ | Далее: | ||
+ | ===== Когда DHCP-сервером у нас сам Mikrotik NAS - DEPRECATED и настоятельно не рекомендуется к использованию ===== | ||
+ | **Итак, поскольку у этого метода внезапно(за почти год, ага) был обнаружен ФАТАЛЬНЫЙ НЕДОСТАТОК, | ||
+ | |||
+ | **В связи с чем настоятельно рекомендуется во всех случаях использовать обновлённый и тщательнейше протестированный(но это не точно) скрипт для [[mgmikrotikdhcp# | ||
+ | \\ | ||
+ | \\ | ||
+ | //То есть - да - даже когда DHCP-сервером у нас сам Mikrotik NAS - используем методологию и скрипт для [[mgmikrotikdhcp# | ||
+ | |||
+ | **А эту штуку оставим чисто для понимания " | ||
+ | |||
+ | в 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 минут. Многим, | ||
+ | |||
+ | Далее обращаем внимание на вкладки "__... Rules__" | ||
+ | {{: | ||
+ | здесь мы можем указать детали сбора статистики(для сущностей типа интерфейсы, | ||
+ | {{: | ||
+ | и добавляем правило для наших будущих графчиков: | ||
+ | * **Simple Queue** - шейперы, | ||
+ | * **Allow Address** - адрес/ | ||
+ | * **Store On Disk** - хранить ли данные статистики на диске. Лучше включить - мы ведь не хотим, чтобы при каждом перезапуске НАСа у нас обнулялась стата? | ||
+ | * **Allow Target** - очень интересная опция, определяющая разрешено ли юзеру, чья стата собирается этим правилом, | ||
+ | Теперь, | ||
+ | А если не лицезреем - значит что-то не так и [[http:// | ||
+ | \\ | ||
+ | ======Копирайт====== | ||
+ | Отдельная благодарность за помощь в создании данного мануала - [[https:// | ||
+ | Главный микротико-скрипто-тестер - [[https:// | ||
+ |