Другое

Как настроить приоритет трафика в OpenWRT

Полное руководство по настройке приоритета трафика для конкретных устройств в OpenWRT. Узнайте, как выделить пропускную способность для важных устройств без покупки Микротик.

Как задать приоритет трафика в локальной сети на OpenWRT?

Хотел бы задать приоритет трафика в локальной сети одному/двум конкретным устройствам, чтобы остальные устройства ждали, пока канал освободится. Приоритет хотел бы сделать и для TCP, и для UDP.

Сейчас встроенный в роутер QoS только создаёт больше проблем, повышает вероятность отвала внешнего соединения, а приоритет у него работает по случайному принципу. Вплоть до того, что даже между локальными устройствами обмен повисает.

Вроде бы можно сделать на роутерах Микротик, хотя в другом вопросе сообщают, что приоритет задать нельзя.

Роутеры Микротик в магазине стоят недёшево, а у более дешёвых моделей аппаратные характеристики никчёмные, например, порты 100 Мегабит или только WiFi 2.4 ГГц.

Хотел бы по возможности обойтись имеющимся роутером на OpenWRT 19 (хотя он и слабоват).

Основные вопросы:

  1. Возможно ли реализовать это на OpenWRT, не покупая дополнительные роутеры Микротик? Да и разбираться в нём придётся немало.
  2. Воможно, я ищу не там? Какие ещё подходы могут быть?

Схема сети

Схема сети предоставлена в спойлере

Да, реализовать приоритизацию трафика для конкретных устройств на OpenWRT возможно без покупки дополнительных роутеров Микротик. OpenWRT предоставляет несколько мощных инструментов для управления приоритетом трафика как на уровне устройств, так и на уровне приложений (TCP/UDP портов).

Содержание

Возможности OpenWRT для приоритизации трафика

OpenWRT предлагает несколько продвинутых инструментов для управления трафиком, которые работают гораздо эффективнее встроенного QoS большинства бытовых роутеров:

  • SQM (Smart Queue Management) с алгоритмом Cake - автоматически управляет очередями для минимизации задержек
  • luci-app-qos - графический интерфейс для классификации трафика по устройствам и приложениям
  • Qosify - скрипт для создания многоуровневой приоритизации
  • tc (traffic control) - мощный инструмент для ручной настройки классов трафика

Основное отличие этих решений от встроенного QoS заключается в том, что они используют современные алгоритмы управления очередями, которые действительно работают предсказуемо и не разрывают внешние соединения.

Интересный факт: Как отмечают в OpenWRT документации, традиционный QoS работает путем приоритезации конкретных портов и пакетов на основе конфигурации, в то время как SQM/Cake поддерживают пинг клиентов как можно более низким и сбалансированным.

Основные подходы к настройке приоритета устройств

Существует три основных метода приоритизации трафика на уровне устройств:

  1. По IP-адресу - назначение статических IP через DHCP резервирование и настройка правил для этих адресов
  2. По MAC-адресу - прямая привязка к физическому адресу устройства
  3. По подсети - группировка устройств в подсети с разными уровнями приоритета

Из исследования OpenWRT Forum становится ясно, что Cake автоматически распределяет полосу пропускания между IP-адресами, но с дополнительными настройками можно изменить это поведение.

Важно: Прямая приоритезация по MAC-адресу в стандартном QoS не поддерживается, но решается через назначение статических IP и настройку правил для этих адресов.

Настройка приоритета по IP-адресу устройства

Для выделения приоритета конкретным устройствам необходимо:

  1. Назначить статические IP-адреса через DHCP резервирование
  2. Настроить классификацию трафика по этим IP-адресам
  3. Создать отдельные классы приоритета

Пример настройки из блога Sergey:

bash
# Приоритизация трафика с IP 192.168.1.195
/usr/sbin/iptables -t mangle -A POSTROUTING -o eth0 -s 192.168.1.195 -j CLASSIFY --set-class 1:30

Этот подход позволяет выделить конкретное устройство (например, игровой консоль или рабочий ноутбук) независимо от типа трафика, который оно использует.

Приоритизация TCP/UDP трафика по портам

Для приоритизации конкретных приложений (TCP/UDP портов) используется классификация по портам:

bash
# Приоритет для SSH (порт 22)
/usr/sbin/iptables -t mangle -A POSTROUTING -o eth0 -p tcp --dport 22 -j CLASSIFY --set-class 1:10

# Приоритет для DNS (порт 53)
/usr/sbin/iptables -t mangle -A POSTROUTING -o eth0 -p tcp --dport 53 -j CLASSIFY --set-class 1:10

# Приоритет для UDP пакетов малого размера (типично для игр)
/usr/sbin/iptables -t mangle -A POSTROUTING -o eth0 -p udp -m length --length :170 -j CLASSIFY --set-class 1:10

Как показано в примере из Reddit, для игровых сервисов типа GeForce Now, которые используют UDP пакеты, можно настроить отдельные правила.

Практическая настройка через LuCI интерфейс

Для пользователей, предпочитающих графический интерфейс:

  1. Установите пакет luci-app-qos через System → Software
  2. Перейдите в Network → QoS
  3. Настройте классификацию трафика:
lua
config classify
    option target 'Priority'
    option ports '22,53'
    option comment 'ssh, dns'
    
config classify
    option target 'Normal'
    option proto 'tcp'
    option ports '20,21,25,80,110,443,993,995'
    option comment 'ftp, smtp, http(s), imap'

Как описано в руководстве по OpenWRT QoS, эти блоки конфигурации позволяют задавать начальную классификацию трафика на основе портов и протоколов.

Расширенная настройка через командную строку

Для более гибкой настройки можно использовать комбинацию SQM и iptables:

  1. Установите SQM: opkg install luci-app-sqm
  2. Настройте базовый SQM через LuCI
  3. Добавьте кастомные правила iptables:
bash
# Маркировка трафика с высокоприоритетных устройств
iptables -t mangle -A PREROUTING -s 192.168.1.100 -j MARK --set-mark 0x1/0xff
iptables -t mangle -A PREROUTING -s 192.168.1.101 -j MARK --set-mark 0x1/0xff

# Приоритизация TCP SYN пакетов
iptables -t mangle -A POSTROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x1/0xff

Этот подход, как показано в форуме OpenWRT, позволяет точно контролировать, какой трафик получает высокий приоритет.

Альтернативные подходы и инструменты

Qosify - продвинутый скрипт приоритизации

Для создания многоуровневой системы приоритетизации можно использовать скрипт Qosify. Как сообщают в Reddit, Qosify позволяет создать 4 уровня приоритета с изоляцией хостов:

bash
# Пример настройки Qosify
opkg install qosify
/etc/init.d/qosify enable

Nftables - современный инструмент для маркировки трафика

Для новых версий OpenWRT можно использовать nftables вместо iptables:

bash
nft add table mangle
nft add chain mangle prerouting { type filter hook prerouting priority mangle; }
nft add rule mangle prerouting ip saddr 192.168.1.100 mark set 1

Решение проблем с встроенным QoS

Проблемы с встроенным QoS, которые вы описываете, типичны для его ограниченных возможностей:

  • Случайная приоритизация: встроенный QoS часто использует простые алгоритмы без учета реальных потребностей
  • Разрыв внешних соединений: неправильная настройка может привести к блокировке важных пакетов
  • Проблемы с локальным трафиком: встроенные решения часто не учитывают трафик между устройствами в локальной сети

Решение - перейти на SQM/Cake, который как отмечают, автоматически рассчитывает оптимальное использование доступной полосы пропускания, резервируя часть для критически важных сетевых функций.

Заключение

На основе исследования можно сделать следующие выводы:

  1. Да, это возможно: OpenWRT предоставляет все необходимые инструменты для приоритизации трафика конкретным устройствам без покупки Микротик роутеров.

  2. Рекомендуемые подходы:

    • Для новичков: luci-app-qos через LuCI интерфейс
    • Для продвинутых: SQM + кастомные iptables правила
    • Для игрового трафика: Qosify с 4 уровнями приоритета
  3. Практические шаги:

    • Установите соответствующие пакеты
    • Назначьте статические IP для приоритетных устройств
    • Настройте классификацию трафика
    • Протестируйте производительность
  4. Альтернативные решения:

    • Приоритизация по портам для конкретных приложений
    • Комбинированная настройка для устройств и приложений
    • Использование современных алгоритмов управления очередями

OpenWRT на вашем роутере даже с “слабыми” характеристиками способен обеспечить эффективную приоритизацию трафика, если правильно настроить SQM и классификацию правил. Главное - использовать современные инструменты вместо ограниченного встроенного QoS.

Источники

  1. OpenWRT QoS Configuration Guide - hoverbear.org
  2. Reddit: QoS/SQM bandwidth limiter per device/ip
  3. OpenWRT Forum: Device Priority with QoS
  4. Sergey’s Blog: OpenWRT QoS a Simple Recipe
  5. OpenWRT Forum: Traffic Prioritization
  6. PC Suggest: OpenWrt QoS Settings
  7. Tech Rapid UK: Manage Network Traffic Priority
Авторы
Проверено модерацией
Модерация