Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Рабочий скрипт для динамического изменения пропускной способности. Попробуй!

    Рабочий скрипт для динамического изменения пропускной способности. Попробуй!

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Рабочий скрипт для динамического изменения пропускной способности. Попробуй!, RouterOS
     
    tomtom80
    Guest
    #1
    0
    16.10.2010 10:27:00
    Привет, я много экспериментировал с очередями и взрывным трафиком с длительным временем взрыва. Но это не работает! Скрипт написан для v3.2 и вроде бы работает. Я новичок в скриптах для MikroTik, поэтому, возможно, есть лучшие способы написания...

    Вкратце, скрипт может ограничить количество трафика в определённый период, замедлять скорость, если пользователь достигает заданного лимита, не требует менеджера пользователей и запоминает трафик после перезагрузки (информация о трафике хранится в имени очереди, может, есть лучший способ... скажите мне, когда). Скорость работы очередей можно регулировать от каждой минуты до неограниченной (нужен планировщик). Регулировка только для определённых очередей (имена очередей должны начинаться с определённой строки, которую вы можете выбрать). Множество параметров для настройки под ваши нужды. Много комментариев, надеюсь вы поняли.. пожалуйста.. тестируйте, говорите о багах, давайте улучшать. Расскажите, что думаете..

    #Переменные

    :local MaxTrafficVolume
    :local TimePeriod
    :local TrafficBurst
    :local MaxSpeedDown
    :local MaxSpeedUp
    :local MinSpeedDown
    :local MinSpeedUp
    :local SlowDownVolume
    :local RunTime
    :local KeyString
    :local TrafficKeyString

    #Ваши Настройки ------------------------
    #Максимальный объем трафика в МБ за TimePeriod (TotalBytes, учитывается и входящий, и исходящий)
    :set MaxTrafficVolume 20480
    #время в часах, в течение которого можно загрузить/отправить MaxTrafficVolume (720 = 30 дней)
    :local TimePeriod 720
    #аналогично Burst в МБ, MaxTrafficVolume + TrafficBurst трафика может произойти в TimePeriod без замедления скорости
    :set TrafficBurst 5000
    #в МБ, это значение вызывает СЛЕДУЮЩЕЕ замедление скорости до минимальной скорости (значение=0 - нет замедления скорости)
    #если X МБ трафика больше, чем MaxTrafficVolume + TrafficBurst в TimePeriod
    #если SlowDownVolume=5000 и X=2000, (2000/5000 *100)% = 40%, 60% осталось до достижения SlowDownVolume, Скорость = MaxSpeed * 60%
    #если SlowDownVolume=5000 и X=4000, (4000/5000 *100)% = 80%, 20% осталось до достижения SlowDownVolume, Скорость = MaxSpeed * 20%
    :set SlowDownVolume 5000
    #Скорость в кбит
    :set MaxSpeedDown 800
    :set MaxSpeedUp 128
    #если установить слишком высокое значение MaxTrafficVolume-Limit можно легко превысить
    :set MinSpeedDown 32
    :set MinSpeedUp 32
    #Время работы 15 означает, что каждые 15 минут вычисляются новые значения полосы пропускания (вам нужно настроить планировщик с этим временем!)
    :set RunTime 15
    #только очереди, имена которых начинаются с этой строки, изменяются этим скриптом
    :set KeyString "20GB-"
    #после этой строки трафик хранится в имени очереди (эта строка может быть только одна часть имени очереди!)
    :set TrafficKeyString "__"
    #КОНЕЦ Ваших Настроек ----------------------------

    :local NewPoints
    :local OldPoints
    :local Traffic
    :local DecreasePerStep
    :local NewSpeed
    :local NewSpeedDown
    :local NewSpeedUp
    :local NewName
    :local SpeedMultiplier

    :set DecreasePerStep ($MaxTrafficVolume * 1024 / $TimePeriod / 60 * $RunTime);
    :set MaxSpeedDown ($MaxSpeedDown * 1000);
    :set MaxSpeedUp ($MaxSpeedUp * 1000);
    :set MinSpeedDown ($MinSpeedDown * 1000);
    :set MinSpeedUp ($MinSpeedUp * 1000);

    :foreach i in=[/queue simple find] do={
    #если очередь активна, не динамическая, и имя очереди начинается с keystring
    :if ((![/queue simple get $i disabled]) && (![/queue simple get $i dynamic]) && ([:find [/queue simple get $i name] $KeyString] = 0) ) do={
    #если это очередь с информацией о трафике (точки)
    :if ([:find [/queue simple get $i name] $TrafficKeyString] >= 0) do={
    #чтение информации о трафике из имени очереди в КБ
    :set OldPoints ([:pick [/queue simple get $i name] ([:find [/queue simple get $i name] $TrafficKeyString] + 2) [:len [/queue simple get $i name]]]);
    #чтение нового трафика
    :set Traffic ([/queue simple get $i total-bytes] / 1024)
    #сброс трафика
    /queue simple reset-counters [/queue simple get $i name]
    :set NewPoints ($OldPoints-$DecreasePerStep+$Traffic);
    :if ($NewPoints < 0) do={:set NewPoints 0;}
    :set NewSpeedDown $MaxSpeedDown;
    :set NewSpeedUp $MaxSpeedUp;
    #если слишком много трафика, то уменьшить скорость
    :if ($NewPoints > $TrafficBurst * 1024) do={
    :if ($SlowDownVolume < 1) do={:set SlowDownVolume 1;}
    #немного математики, линейное замедление если трафик больше, чем traffic burst
    :set SpeedMultiplier (10000 - ((($NewPoints - ($TrafficBurst * 1024))*10000) / ($SlowDownVolume * 1024)))
    :set NewSpeedDown (($SpeedMultiplier * $MaxSpeedDown) / 10000)
    :set NewSpeedUp (($SpeedMultiplier * $MaxSpeedUp) / 10000)

    #скорость ниже минимальной скорости, то установить минимальную скорость
    :if ($NewSpeedDown < $MinSpeedDown) do={:set NewSpeedDown $MinSpeedDown;}
    :if ($NewSpeedUp < $MinSpeedUp) do={:set NewSpeedUp $MinSpeedUp;}
    }
    :set NewSpeed ($NewSpeedUp . "/" . $NewSpeedDown)
    :put $NewSpeed;
    /queue simple set [/queue simple get $i name] max-limit=$NewSpeed;
    #новое имя очереди с информацией о трафике
    :set NewName ([:pick [/queue simple get $i name] 0 ([:find [/queue simple get $i name] $TrafficKeyString] + 2)] . (tostr($NewPoints)));
    /queue simple set [/queue simple get $i name] name=$NewName
    }
    }
    } Этот пример скрипта работает с очередями с таким именем и там вы можете видеть вычисленные скорости входящей и исходящей связи. 20GB-queuename__0 (поэтому нужно смотреть новые очереди с текущими настройками скрипта, когда вы хотите протестировать)
     
     
     
    Cameron_Earnshaw
    Guest
    #2
    0
    13.12.2010 23:22:00
    Отличная идея! Просто интересно, как это работает у тебя сейчас, спустя пару месяцев тестов? Кэм.
     
     
     
    tomtom80
    Guest
    #3
    0
    17.01.2011 17:58:00
    Да. Теперь работает уже 2 года. У меня проблем не было, и делает свою работу очень хорошо!! Может, некоторые клиенты не любят его, потому что у них нет полной скорости.
     
     
     
    Cameron_Earnshaw
    Guest
    #4
    0
    30.11.2011 06:10:00
    Ты знаешь, заработает ли этот скрипт с O/S V4.x или 5.x? Кэм.
     
     
     
    takoateli
    Guest
    #5
    0
    30.04.2012 20:26:00
    У кого-нибудь это работает под v5? Спасибо! Greg
     
     
     
    mesquito
    Guest
    #6
    0
    05.06.2012 06:19:00
    Только что настроил это на 5.15, вроде работает. [Редактировано - вроде работает отлично].
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры