Вітаю,
треба роутер з підтримкою декількох wan і можливістю розподілу навантаження: ліміт на 1 wan 500Гб\місяць, буде від 2-х wan.
думав взяти якийсь cudy, вродє ж опенврт має вміти, але на сайті пишуть про два роутери, що вміють в мультиван(один проводний cudy r700, тому треба ще точку доступу до нього, інший P5 з віфі, але ціна здається високою). І не знаю, чи опенврт вміє в балансування по ліміту трафіку.
зараз пробуємо mikrotik hap ac2 настроїти, трохи складно.і вайфай у нього так собі.
бюджет бажано до 5к, менше буде краще. можна вживане, аби працювало.
Новини
Останні статті і огляди
Вибір роутера
-
mumu
Member
- Звідки: Житомир
-
Scoffer
Member
Так у тебе і запит не тривіальний. Стан лічильників має зберігатись між ребутами і звірятись з часом інакше схема зламається.mumu: ↑ 10.10.2026 15:00трохи складно
ШІ питав?
-
mumu
Member
- Звідки: Житомир
так. якщо світло пропаде щоб лог використаного трафіка зберігався.Scoffer: ↑ 10.10.2026 15:17Стан лічильників має зберігатись між ребутами і звірятись з часом інакше схема зламається.
ШІ, гугл і т.д. питаємо
Дали декілька старлінків з обмеженим пріоріті трафіком, якщо використати ліміт, заберуть акаунти назад
-
Scoffer
Member
mumu
На перший погляд щось схоже на правду.
На оперврт сильно простіше не буде. До речі опенврт ставиться на hAP ac²
https://openwrt.org/toh/mikrotik/hap_ac2
Так що купляти новий роутер не треба в будь-якому випадку.
- спойлер
Код: Виділити все
# ============================================================================ # MikroTik hAP ac² — два WAN із лімітом 500 ГБ на кожного провайдера # Сумісність: RouterOS 7.x # # ПРИЗНАЧЕННЯ # • ether1 — WAN1, основний провайдер; # • ether2 — WAN2, резервний провайдер; # • обидва провайдери мають видавати WAN-адресу через DHCP; # • маршрутизатор рахує RX + TX окремо на кожному фізичному WAN-порту; # • після досягнення ліміту 500 000 000 000 байтів порт виключається з # маршрутизації за замовчуванням, а інший WAN стає основним; # • на початку нового календарного місяця обидва ліміти обнуляються; # • стан лічильників зберігається у файлі, щоб не починати облік із нуля # після звичайного перезавантаження роутера. # # ВАЖЛИВО ПЕРЕД ІМПОРТОМ # 1. Зробіть резервну копію: WinBox → Files → Backup або через Terminal: # /system backup save name=before-dualwan # 2. Підключіться через ether3–ether5 або Wi-Fi. Після імпорту ether2 # забирається з LAN-моста й стає WAN2; через нього поточне керування # роутером може обірватися. # 3. Цей файл налаштований саме на DHCP. Для PPPoE або статичної WAN-IP # конфігурацію потрібно адаптувати. # 4. Файл змінює DHCP-клієнти ether1/ether2 та створює маршрути з коментарями # quota-WAN1 і quota-WAN2. Перевірте наявні нестандартні маршрути, VPN, # правила policy routing та інші конфігурації, які можуть обходити ці # маршрути. # 5. Перед автоскиданням перевірте дату, час, часовий пояс і NTP на роутері. # # ЯК ІМПОРТУВАТИ # Завантажте цей файл у WinBox → Files, потім у Terminal виконайте: # /import file-name=hap_ac2_dualwan_500gb_ua_comments.rsc # Імпортуйте повну конфігурацію лише один раз. Повторний імпорт повторно # перестворює DHCP-клієнти WAN1/WAN2 та службові скрипти/планувальники. # # ПРО ОБЛІК ТРАФІКУ # 500 000 000 000 байтів — це десяткові 500 GB (не 500 GiB). # Сумуються лічильники RX і TX фізичного порту. Це практичний підрахунок # трафіку інтерфейсу, але він може трохи відрізнятися від білінгу провайдера: # провайдер може рахувати інакше, округлювати сесії або враховувати службові # заголовки. Монітор перевіряє ліміт раз на хвилину, тому можливе невелике # перевищення між перевірками. # ============================================================================ # --- 1. Переводимо ether2 із LAN у WAN -------------------------------------- # У типовій заводській конфігурації ether2 входить до bridge (LAN). Видаляємо # лише цей порт із моста, щоб він не об'єднував мережу провайдера з локальною. :if ([:len [/interface bridge port find where interface="ether2"]] > 0) do={ /interface bridge port remove [find where interface="ether2"] } # --- 2. Створюємо список інтерфейсів WAN і додаємо до нього обидва порти ------ # Типові правила NAT і firewall часто використовують interface-list WAN. # Перевіряємо наявність списку/учасників, щоб не створювати дублікати. :if ([:len [/interface list find where name="WAN"]] = 0) do={ /interface list add name="WAN" } :if ([:len [/interface list member find where list="WAN" and interface="ether1"]] = 0) do={ /interface list member add list="WAN" interface="ether1" } :if ([:len [/interface list member find where list="WAN" and interface="ether2"]] = 0) do={ /interface list member add list="WAN" interface="ether2" } # --- 3. Додаємо NAT для виходу локальних пристроїв в інтернет ---------------- # Masquerade підміняє адресу клієнта адресою активного WAN. Правило додається # лише тоді, коли вже немає такого правила для списку WAN. :if ([:len [/ip firewall nat find where chain="srcnat" and action="masquerade" and out-interface-list="WAN"]] = 0) do={ /ip firewall nat add chain=srcnat action=masquerade out-interface-list="WAN" comment="NAT для двох WAN" } # --- 4. Очищаємо старі DHCP-клієнти та службові елементи цієї конфігурації ---- # Ці команди стосуються лише ether1/ether2 і елементів із наведеними нижче # службовими іменами/коментарями. Інші DHCP-клієнти не видаляються. /ip dhcp-client remove [find where interface="ether1"] /ip dhcp-client remove [find where interface="ether2"] /ip route remove [find where comment="quota-WAN1"] /ip route remove [find where comment="quota-WAN2"] /system scheduler remove [find where name="Quota-Monitor-Scheduler"] /system scheduler remove [find where name="Quota-Init-Scheduler"] /system scheduler remove [find where name="Quota-Monthly-Reset-Scheduler"] /system script remove [find where name="Quota-Monthly-Reset-Check"] /system script remove [find where name="Quota-Monitor"] /system script remove [find where name="Quota-Init"] /system script remove [find where name="Quota-Reset"] # --- 5. Файл стану лічильників ---------------------------------------------- # Формат quota-state.txt: total1,previous1,total2,previous2 # total1 — накопичені байти WAN1 за поточний місяць; # previous1 — значення RX+TX лічильника ether1 під час попередньої перевірки; # total2 — накопичені байти WAN2 за поточний місяць; # previous2 — попереднє значення RX+TX для ether2. # Якщо файл відсутній, створюємо його з нульовими значеннями. :if ([:len [/file find where name="quota-state.txt"]] = 0) do={ /file print file=quota-state /file set [find where name="quota-state.txt"] contents="0,0,0,0" } # --- 6. Файл-мітка місячного скидання --------------------------------------- # У ньому зберігається місяць і рік останнього обробленого періоду, наприклад # oct2026. Це не дає скидати ліміти кожні п'ять хвилин протягом того самого # місяця. Файл створюється із поточним місяцем, тому сам імпорт не скидає квоту. :if ([:len [/file find where name="quota-month-marker.txt"]] = 0) do={ /file print file=quota-month-marker :local d [/system clock get date] :local monthId ([:pick $d 0 3] . [:pick $d 7 11]) /file set [find where name="quota-month-marker.txt"] contents=$monthId } # --- 7. Ініціалізація після запуску роутера --------------------------------- # Після перезавантаження апаратні лічильники інтерфейсів можуть початися з # нуля. Накопичені total1/total2 НЕ обнуляємо — лише записуємо поточні значення # RX+TX як нову базу для наступного розрахунку приросту. /system script add name="Quota-Init" policy=read,write,ftp source={ :local f [/file find where name="quota-state.txt"] :local data [/file get $f contents] :local p1 [:find $data ","] :local p2 [:find $data "," ($p1 + 1)] :local p3 [:find $data "," ($p2 + 1)] :local total1 [:tonum [:pick $data 0 $p1]] :local total2 [:tonum [:pick $data ($p2 + 1) $p3]] :local i1 [/interface find where name="ether1"] :local i2 [/interface find where name="ether2"] :local now1 ([/interface get $i1 rx-byte] + [/interface get $i1 tx-byte]) :local now2 ([/interface get $i2 rx-byte] + [/interface get $i2 tx-byte]) /file set $f contents=($total1 . "," . $now1 . "," . $total2 . "," . $now2) } # --- 8. Основний монітор: рахує приріст і керує маршрутами ------------------- # Запускається планувальником раз на хвилину. Для кожного WAN: # 1) читає збережені суми та попередні показники інтерфейсу; # 2) обчислює приріст RX+TX з моменту попередньої перевірки; # 3) додає його до місячного підсумку та записує стан у файл; # 4) якщо квота вичерпана — вимикає відповідний маршрут; # 5) надає WAN1 вищий пріоритет, якщо на ньому ще є трафік. /system script add name="Quota-Monitor" policy=read,write,ftp source={ # Ліміт одного WAN: 500 GB у десятковому вимірі, у байтах. :local limit 500000000000 :local f [/file find where name="quota-state.txt"] :local data [/file get $f contents] :local p1 [:find $data ","] :local p2 [:find $data "," ($p1 + 1)] :local p3 [:find $data "," ($p2 + 1)] :local total1 [:tonum [:pick $data 0 $p1]] :local prev1 [:tonum [:pick $data ($p1 + 1) $p2]] :local total2 [:tonum [:pick $data ($p2 + 1) $p3]] :local prev2 [:tonum [:pick $data ($p3 + 1) [:len $data]]] :local before1 $total1 :local before2 $total2 # Поточне сумарне значення лічильників RX+TX на фізичних WAN-портах. :local i1 [/interface find where name="ether1"] :local i2 [/interface find where name="ether2"] :local now1 ([/interface get $i1 rx-byte] + [/interface get $i1 tx-byte]) :local now2 ([/interface get $i2 rx-byte] + [/interface get $i2 tx-byte]) :local delta1 0 :local delta2 0 # Якщо лічильник став меншим за попередній (наприклад, його скинули), # беремо поточне значення як новий приріст, щоб не віднімати байти. :if ($now1 >= $prev1) do={ :set delta1 ($now1 - $prev1) } else={ :set delta1 $now1 } :if ($now2 >= $prev2) do={ :set delta2 ($now2 - $prev2) } else={ :set delta2 $now2 } # Додаємо приріст до місячних сум і зберігаємо суму разом із новою базою. :set total1 ($total1 + $delta1) :set total2 ($total2 + $delta2) /file set $f contents=($total1 . "," . $now1 . "," . $total2 . "," . $now2) # Пишемо попередження в системний журнал у момент першого перетину ліміту. :if (($before1 < $limit) && ($total1 >= $limit)) do={ :log warning "WAN1: вичерпано ліміт 500 ГБ; перехід на WAN2, якщо він доступний" } :if (($before2 < $limit) && ($total2 >= $limit)) do={ :log warning "WAN2: вичерпано ліміт 500 ГБ" } # Менше значення distance означає вищий пріоритет маршруту. # Звичайний режим: WAN1 distance=1, WAN2 distance=2. # WAN1 вичерпав квоту: WAN1 distance=10, WAN2 distance=1. # WAN2 вичерпав квоту: WAN1 distance=1, WAN2 distance=10. # Обидві квоти вичерпано: обидва маршрути вимикаються нижче. :local distance1 1 :local distance2 2 :if ($total1 >= $limit) do={ :set distance1 10; :set distance2 1 } :if ($total2 >= $limit) do={ :set distance2 10; :set distance1 1 } :if (($total1 >= $limit) && ($total2 >= $limit)) do={ :set distance1 10; :set distance2 10 } # Шукаємо саме наші маршрути за службовим коментарем. DHCP-клієнт може # ще не отримати адресу/шлюз, тому також перевіряємо стан обох оренд. :local r1 [/ip route find where comment="quota-WAN1"] :local r2 [/ip route find where comment="quota-WAN2"] :local c1 [/ip dhcp-client find where interface="ether1"] :local c2 [/ip dhcp-client find where interface="ether2"] :local bound1 false :local bound2 false :if ([:len $c1] > 0) do={ :if ([/ip dhcp-client get $c1 status] = "bound") do={ :set bound1 true } } :if ([:len $c2] > 0) do={ :if ([/ip dhcp-client get $c2 status] = "bound") do={ :set bound2 true } } # WAN1 активний лише тоді, коли квота не вичерпана і DHCP отримав адресу. :if ([:len $r1] > 0) do={ :if (($total1 >= $limit) || ($bound1 = false)) do={ /ip route set $r1 disabled=yes distance=$distance1 } else={ /ip route set $r1 disabled=no distance=$distance1 } } # WAN2 працює за тим самим принципом, але має нижчий пріоритет у нормі. :if ([:len $r2] > 0) do={ :if (($total2 >= $limit) || ($bound2 = false)) do={ /ip route set $r2 disabled=yes distance=$distance2 } else={ /ip route set $r2 disabled=no distance=$distance2 } } } # --- 9. Ручне/автоматичне обнулення обох місячних лімітів -------------------- # Обнуляємо тільки накопичені суми. Поточні показники інтерфейсів записуються # як базові значення, щоб трафік до моменту скидання не потрапив у новий місяць. # Скрипт також можна запустити вручну командою: # /system script run Quota-Reset /system script add name="Quota-Reset" policy=read,write,ftp source={ :local f [/file find where name="quota-state.txt"] :local i1 [/interface find where name="ether1"] :local i2 [/interface find where name="ether2"] :local now1 ([/interface get $i1 rx-byte] + [/interface get $i1 tx-byte]) :local now2 ([/interface get $i2 rx-byte] + [/interface get $i2 tx-byte]) /file set $f contents=("0," . $now1 . ",0," . $now2) :log warning "Ліміти WAN1 і WAN2 обнулено; почався новий період обліку" } # --- 10. Перевірка зміни місяця для автоматичного скидання ------------------- # Запускається раз на 5 хвилин. Якщо поточний місяць/рік відрізняється від # маркера, ліміти обнуляються один раз, маркер оновлюється, а монітор запускається # знову, щоб відразу застосувати потрібний стан маршрутів. # Якщо роутер був вимкнений першого числа, скидання станеться після його # ввімкнення та першої перевірки. Для коректної роботи необхідний правильний час. /system script add name="Quota-Monthly-Reset-Check" policy=read,write,ftp source={ :local d [/system clock get date] :local currentMonth ([:pick $d 0 3] . [:pick $d 7 11]) :local f [/file find where name="quota-month-marker.txt"] :local previousMonth [/file get $f contents] :if ($currentMonth != $previousMonth) do={ /system script run Quota-Reset /file set $f contents=$currentMonth /system script run Quota-Monitor :log warning ("Автоматичне місячне скидання лімітів завершено: " . $currentMonth) } } # --- 11. DHCP-клієнти для WAN1 і WAN2 --------------------------------------- # DHCP автоматично отримує адресу та шлюз провайдера. add-default-route=no # вимикає створення автоматичного маршруту за замовчуванням: маршрути створює # наш скрипт із фіксованими коментарями quota-WAN1 і quota-WAN2, щоб керувати # пріоритетом і квотою незалежно для кожного провайдера. # Маршрути спочатку створюються вимкненими, а Quota-Monitor їх увімкне після # перевірки, що DHCP прив'язаний і ліміт ще не вичерпаний. /ip dhcp-client add interface=ether1 add-default-route=no use-peer-dns=no use-peer-ntp=yes disabled=no script={ :local r [/ip route find where comment="quota-WAN1"] :if ($bound = 1) do={ :if ([:len $r] = 0) do={ /ip route add dst-address=0.0.0.0/0 gateway=$"gateway-address" distance=1 check-gateway=ping disabled=yes comment="quota-WAN1" } else={ /ip route set $r gateway=$"gateway-address" } } else={ :if ([:len $r] > 0) do={ /ip route set $r disabled=yes } } } /ip dhcp-client add interface=ether2 add-default-route=no use-peer-dns=no use-peer-ntp=yes disabled=no script={ :local r [/ip route find where comment="quota-WAN2"] :if ($bound = 1) do={ :if ([:len $r] = 0) do={ /ip route add dst-address=0.0.0.0/0 gateway=$"gateway-address" distance=2 check-gateway=ping disabled=yes comment="quota-WAN2" } else={ /ip route set $r gateway=$"gateway-address" } } else={ :if ([:len $r] > 0) do={ /ip route set $r disabled=yes } } } # --- 12. Перший запуск і планувальники -------------------------------------- # Quota-Init оновлює стартові показники інтерфейсів без втрати накопиченої суми. # Quota-Monitor перевіряє ліміти щохвилини; це визначає точність відключення. # Quota-Monthly-Reset-Scheduler перевіряє зміну календарного місяця кожні 5 хв. /system script run Quota-Init /system scheduler add name="Quota-Init-Scheduler" start-time=startup interval=0s on-event="/system script run Quota-Init" policy=read,write,ftp /system scheduler add name="Quota-Monitor-Scheduler" start-time=startup interval=1m on-event="/system script run Quota-Monitor" policy=read,write,ftp /system scheduler add name="Quota-Monthly-Reset-Scheduler" start-time=startup interval=5m on-event="/system script run Quota-Monthly-Reset-Check" policy=read,write,ftp # --- Корисні команди для перевірки після імпорту ---------------------------- # Переконатися, що обидва DHCP-клієнти отримали адресу: # /ip dhcp-client print detail # Переглянути маршрути, які перемикає скрипт: # /ip route print detail where comment~"quota-WAN" # Переглянути останні повідомлення про квоти: # /log print where message~"WAN|ліміт|скидання" # Подивитися збережені значення обліку: # /file print detail where name="quota-state.txt" # Перевірити планувальники: # /system scheduler print detail # Скинути вручну обидва ліміти: # /system script run Quota-Reset
На оперврт сильно простіше не буде. До речі опенврт ставиться на hAP ac²
https://openwrt.org/toh/mikrotik/hap_ac2
Так що купляти новий роутер не треба в будь-якому випадку.