QoS (Quality of Service) в VyOS

VyOS предоставляет мощные механизмы Quality of Service (QoS) для управления полосой пропускания, приоритизации трафика и контроля задержек в сетевых соединениях.

Концепция QoS

Основные задачи QoS

Quality of Service решает:

  • Приоритизация критичного трафика (VoIP, видеоконференции)
  • Ограничение полосы пропускания для некритичных сервисов
  • Предотвращение перегрузки каналов связи
  • Гарантирование минимальной пропускной способности
  • Управление задержками и джиттером
  • Контроль burst трафика

Основные метрики:

  • Bandwidth (пропускная способность): Объем данных за единицу времени
  • Latency (задержка): Время доставки пакета
  • Jitter (джиттер): Вариация задержки
  • Packet loss (потери пакетов): Процент потерянных пакетов

Компоненты QoS в VyOS

Traffic Policy:

  • Определение правил обработки трафика
  • Классификация пакетов по различным критериям
  • Применение действий к классифицированному трафику

Queueing Disciplines (очереди):

  • FIFO (First In First Out)
  • Priority Queue
  • Class-based Queue
  • Fair Queue
  • Random Early Detection (RED)

Traffic Shaping vs Policing:

  • Shaping: Сглаживание трафика с использованием буферов
  • Policing: Отбрасывание превышающего трафика

Traffic Policy Types

1. Shaper (Traffic Shaping)

Ограничение исходящего трафика с возможностью приоритизации:

configure

# Создание shaper policy
set traffic-policy shaper WAN-OUT bandwidth '100mbit'
set traffic-policy shaper WAN-OUT default bandwidth '10mbit'
set traffic-policy shaper WAN-OUT default ceiling '50mbit'
set traffic-policy shaper WAN-OUT default priority '7'

# Класс для VoIP (высокий приоритет)
set traffic-policy shaper WAN-OUT class 10 bandwidth '20mbit'
set traffic-policy shaper WAN-OUT class 10 ceiling '30mbit'
set traffic-policy shaper WAN-OUT class 10 priority '1'
set traffic-policy shaper WAN-OUT class 10 match voip ip dscp 'ef'

# Класс для видео
set traffic-policy shaper WAN-OUT class 20 bandwidth '30mbit'
set traffic-policy shaper WAN-OUT class 20 ceiling '40mbit'
set traffic-policy shaper WAN-OUT class 20 priority '2'
set traffic-policy shaper WAN-OUT class 20 match video ip protocol 'udp'
set traffic-policy shaper WAN-OUT class 20 match video destination port '1935,5004,5005'

# Применение на интерфейс
set interfaces ethernet eth0 traffic-policy out 'WAN-OUT'

commit
save

2. Limiter (Rate Limiting)

Ограничение входящего трафика:

configure

# Создание limiter policy
set traffic-policy limiter LAN-IN bandwidth '1gbit'

# Класс для guest сети (ограничение 10 Mbps)
set traffic-policy limiter LAN-IN class 10 bandwidth '10mbit'
set traffic-policy limiter LAN-IN class 10 match guest-net source address '192.168.100.0/24'

# Класс для torrents (ограничение 5 Mbps)
set traffic-policy limiter LAN-IN class 20 bandwidth '5mbit'
set traffic-policy limiter LAN-IN class 20 match torrent destination port '6881-6889'
set traffic-policy limiter LAN-IN class 20 priority '7'

# Класс по умолчанию
set traffic-policy limiter LAN-IN default bandwidth '100mbit'

# Применение на интерфейс
set interfaces ethernet eth1 traffic-policy in 'LAN-IN'

commit
save

3. Priority Queue

Строгая приоритизация трафика:

configure

# Создание priority queue policy
set traffic-policy priority-queue PRIORITY-OUT

# Очередь 1 (высший приоритет) - VoIP
set traffic-policy priority-queue PRIORITY-OUT class 1 queue-limit '100'
set traffic-policy priority-queue PRIORITY-OUT class 1 match voip ip dscp 'ef'

# Очередь 2 - интерактивный трафик (SSH, DNS)
set traffic-policy priority-queue PRIORITY-OUT class 2 queue-limit '200'
set traffic-policy priority-queue PRIORITY-OUT class 2 match ssh destination port '22'
set traffic-policy priority-queue PRIORITY-OUT class 2 match dns destination port '53'

# Очередь 3 - веб трафик
set traffic-policy priority-queue PRIORITY-OUT class 3 queue-limit '500'
set traffic-policy priority-queue PRIORITY-OUT class 3 match http destination port '80,443'

# Очередь по умолчанию (низший приоритет)
set traffic-policy priority-queue PRIORITY-OUT default queue-limit '1000'

# Применение на интерфейс
set interfaces ethernet eth0 traffic-policy out 'PRIORITY-OUT'

commit
save

4. Fair Queue (SFQ)

Справедливое распределение полосы пропускания:

configure

# Создание fair queue policy
set traffic-policy fair-queue FAIR-QUEUE queue-limit '127'

# Применение на интерфейс
set interfaces ethernet eth2 traffic-policy out 'FAIR-QUEUE'

commit
save

5. Random Early Detection (RED)

Предотвращение перегрузки очередей:

configure

# Создание random-detect policy
set traffic-policy random-detect RED-QUEUE bandwidth '100mbit'

# Настройка параметров RED
set traffic-policy random-detect RED-QUEUE precedence 0 minimum-threshold '10'
set traffic-policy random-detect RED-QUEUE precedence 0 maximum-threshold '20'
set traffic-policy random-detect RED-QUEUE precedence 0 mark-probability '10'

# Применение на интерфейс
set interfaces ethernet eth0 traffic-policy out 'RED-QUEUE'

commit
save

6. Drop Tail

Простое отбрасывание пакетов при заполнении очереди:

configure

# Создание drop-tail policy
set traffic-policy drop-tail DROP-TAIL queue-limit '1000'

# Применение на интерфейс
set interfaces ethernet eth3 traffic-policy out 'DROP-TAIL'

commit
save

Классификация трафика

По IP адресам

# Source address
set traffic-policy shaper WAN-OUT class 10 match users source address '192.168.1.0/24'

# Destination address
set traffic-policy shaper WAN-OUT class 20 match servers destination address '10.0.0.0/8'

# Конкретный хост
set traffic-policy shaper WAN-OUT class 30 match host source address '192.168.1.100'

По портам и протоколам

# TCP порты
set traffic-policy shaper WAN-OUT class 10 match http destination port '80,443'
set traffic-policy shaper WAN-OUT class 10 match http protocol 'tcp'

# UDP порты (range)
set traffic-policy shaper WAN-OUT class 20 match rtp destination port '10000-20000'
set traffic-policy shaper WAN-OUT class 20 match rtp protocol 'udp'

# Source порт
set traffic-policy shaper WAN-OUT class 30 match ephemeral source port '32768-61000'

По DSCP/TOS маркировке

# DSCP маркировка
set traffic-policy shaper WAN-OUT class 10 match voip ip dscp 'ef'
set traffic-policy shaper WAN-OUT class 20 match video ip dscp 'af41'
set traffic-policy shaper WAN-OUT class 30 match data ip dscp 'af21'

# TOS поле
set traffic-policy shaper WAN-OUT class 40 match priority ip tos '0x10'

По интерфейсу

# Входящий интерфейс
set traffic-policy shaper WAN-OUT class 10 match lan interface 'eth1'

По MAC адресу

# MAC source
set traffic-policy shaper WAN-OUT class 10 match device mac source '00:11:22:33:44:55'

DSCP Маркировка

Установка DSCP меток

configure

# Маркировка VoIP трафика
set traffic-policy shaper WAN-OUT class 10 set-dscp 'ef'
set traffic-policy shaper WAN-OUT class 10 match voip destination port '5060,5061'

# Маркировка видео трафика
set traffic-policy shaper WAN-OUT class 20 set-dscp 'af41'
set traffic-policy shaper WAN-OUT class 20 match video destination port '1935'

# Маркировка критичных данных
set traffic-policy shaper WAN-OUT class 30 set-dscp 'af21'
set traffic-policy shaper WAN-OUT class 30 match database destination port '3306,5432'

commit
save

Стандартные DSCP значения

EF (Expedited Forwarding): 46 - VoIP
AF41 (Assured Forwarding): 34 - Видео высокого качества
AF31: 26 - Потоковое видео
AF21: 18 - Критичные данные
AF11: 10 - Стандартные данные
BE (Best Effort): 0 - Обычный трафик

Сценарии использования

1. Офисный интернет-канал

Приоритизация корпоративного трафика:

configure

# 100 Mbps WAN канал
set traffic-policy shaper OFFICE-WAN bandwidth '100mbit'

# VoIP (гарантия 10 Mbps, до 20 Mbps)
set traffic-policy shaper OFFICE-WAN class 10 bandwidth '10mbit'
set traffic-policy shaper OFFICE-WAN class 10 ceiling '20mbit'
set traffic-policy shaper OFFICE-WAN class 10 priority '1'
set traffic-policy shaper OFFICE-WAN class 10 match voip ip dscp 'ef'

# Видеоконференции (гарантия 20 Mbps, до 40 Mbps)
set traffic-policy shaper OFFICE-WAN class 20 bandwidth '20mbit'
set traffic-policy shaper OFFICE-WAN class 20 ceiling '40mbit'
set traffic-policy shaper OFFICE-WAN class 20 priority '2'
set traffic-policy shaper OFFICE-WAN class 20 match zoom destination port '8801,8802'
set traffic-policy shaper OFFICE-WAN class 20 match teams destination port '3478-3481'

# Бизнес-приложения (гарантия 30 Mbps)
set traffic-policy shaper OFFICE-WAN class 30 bandwidth '30mbit'
set traffic-policy shaper OFFICE-WAN class 30 ceiling '60mbit'
set traffic-policy shaper OFFICE-WAN class 30 priority '3'
set traffic-policy shaper OFFICE-WAN class 30 match business destination address '10.0.0.0/8'

# Обычный веб-серфинг
set traffic-policy shaper OFFICE-WAN default bandwidth '20mbit'
set traffic-policy shaper OFFICE-WAN default ceiling '80mbit'
set traffic-policy shaper OFFICE-WAN default priority '5'

# Применение
set interfaces ethernet eth0 traffic-policy out 'OFFICE-WAN'

commit
save

2. Гостевая сеть с ограничениями

configure

# Ограничение guest WiFi до 10 Mbps
set traffic-policy limiter GUEST-LIMIT bandwidth '10mbit'
set traffic-policy limiter GUEST-LIMIT default bandwidth '10mbit'
set traffic-policy limiter GUEST-LIMIT default priority '7'

# Еще более жесткое ограничение для торрентов
set traffic-policy limiter GUEST-LIMIT class 10 bandwidth '1mbit'
set traffic-policy limiter GUEST-LIMIT class 10 match torrents destination port '6881-6889,51413'
set traffic-policy limiter GUEST-LIMIT class 10 priority '7'

# Применение на guest интерфейс
set interfaces ethernet eth2 traffic-policy in 'GUEST-LIMIT'

commit
save

3. ISP сценарий - клиентские ограничения

configure

# Shaper для абонента с тарифом 50 Mbps
set traffic-policy shaper CLIENT-50M bandwidth '50mbit'
set traffic-policy shaper CLIENT-50M default bandwidth '50mbit'
set traffic-policy shaper CLIENT-50M default burst '15k'

# Применение на VLAN клиента
set interfaces ethernet eth1 vif 100 traffic-policy out 'CLIENT-50M'

# Limiter для входящего трафика
set traffic-policy limiter CLIENT-50M-IN bandwidth '50mbit'
set traffic-policy limiter CLIENT-50M-IN default bandwidth '50mbit'
set interfaces ethernet eth1 vif 100 traffic-policy in 'CLIENT-50M-IN'

commit
save

4. VoIP/Video приоритизация

configure

# Strict priority для real-time трафика
set traffic-policy shaper RT-TRAFFIC bandwidth '200mbit'

# VoIP - наивысший приоритет
set traffic-policy shaper RT-TRAFFIC class 10 bandwidth '15mbit'
set traffic-policy shaper RT-TRAFFIC class 10 ceiling '20mbit'
set traffic-policy shaper RT-TRAFFIC class 10 priority '1'
set traffic-policy shaper RT-TRAFFIC class 10 queue-type 'priority'
set traffic-policy shaper RT-TRAFFIC class 10 match sip destination port '5060,5061'
set traffic-policy shaper RT-TRAFFIC class 10 match rtp destination port '10000-20000'

# Видеоконференции
set traffic-policy shaper RT-TRAFFIC class 20 bandwidth '50mbit'
set traffic-policy shaper RT-TRAFFIC class 20 ceiling '100mbit'
set traffic-policy shaper RT-TRAFFIC class 20 priority '2'
set traffic-policy shaper RT-TRAFFIC class 20 match webrtc ip dscp 'af41'

# Остальной трафик
set traffic-policy shaper RT-TRAFFIC default bandwidth '100mbit'
set traffic-policy shaper RT-TRAFFIC default ceiling '180mbit'
set traffic-policy shaper RT-TRAFFIC default priority '7'

set interfaces ethernet eth0 traffic-policy out 'RT-TRAFFIC'

commit
save

Интеграция с облачными платформами

Yandex Cloud

Особенности:

  • Гарантированная полоса пропускания виртуальных машин
  • Лимиты на burst трафик
  • QoS для Cloud Interconnect
  • Traffic shaping для egress трафика
configure

# Соответствие тарифу VM в Yandex Cloud
# Например: 2 vCPU = до 1 Gbps
set traffic-policy shaper YC-VM-LIMIT bandwidth '1gbit'
set traffic-policy shaper YC-VM-LIMIT default bandwidth '100mbit'
set traffic-policy shaper YC-VM-LIMIT default ceiling '1gbit'

# Приоритизация API вызовов к Yandex Cloud
set traffic-policy shaper YC-VM-LIMIT class 10 bandwidth '50mbit'
set traffic-policy shaper YC-VM-LIMIT class 10 priority '2'
set traffic-policy shaper YC-VM-LIMIT class 10 match yc-api destination address '84.201.0.0/16'

set interfaces ethernet eth0 traffic-policy out 'YC-VM-LIMIT'

commit
save

VK Cloud

Особенности:

  • Тарификация egress трафика
  • QoS для внутренних сетей
  • Приоритизация управляющего трафика
configure

# Shaping для экономии на egress
set traffic-policy shaper VK-EGRESS bandwidth '500mbit'

# Критичный трафик - полная скорость
set traffic-policy shaper VK-EGRESS class 10 bandwidth '100mbit'
set traffic-policy shaper VK-EGRESS class 10 ceiling '500mbit'
set traffic-policy shaper VK-EGRESS class 10 priority '1'
set traffic-policy shaper VK-EGRESS class 10 match prod source address '10.0.1.0/24'

# Backup трафик - ограничение
set traffic-policy shaper VK-EGRESS class 90 bandwidth '10mbit'
set traffic-policy shaper VK-EGRESS class 90 ceiling '50mbit'
set traffic-policy shaper VK-EGRESS class 90 priority '7'
set traffic-policy shaper VK-EGRESS class 90 match backup source address '10.0.100.0/24'

set interfaces ethernet eth0 traffic-policy out 'VK-EGRESS'

commit
save

Мониторинг QoS

Команды просмотра

# Список всех traffic policies
show traffic-policy

# Детальная информация по policy
show traffic-policy shaper WAN-OUT

# Статистика по классам
show queueing ethernet eth0

# Просмотр всех интерфейсов с QoS
show interfaces

Пример вывода:

vyos@router:~$ show queueing ethernet eth0
eth0 qdisc htb 1: root refcnt 2 r2q 10 default 7 direct_packets_stat 0
 Sent 123456789 bytes 987654 pkt (dropped 123, overlimits 456, requeues 0)

class htb 1:10 parent 1:1 prio 1 rate 20Mbit ceil 30Mbit burst 15k
 Sent 12345678 bytes 98765 pkt (dropped 12, overlimits 45, requeues 0)

Тестирование QoS

# Генерация тестового трафика с помощью iperf3
# На сервере
iperf3 -s

# На клиенте (через VyOS)
iperf3 -c <server-ip> -t 30 -b 100M

# Проверка DSCP меток
tcpdump -i eth0 -v -n | grep 'tos'

Лучшие практики

Проектирование QoS

  1. Анализ трафика: Используйте monitoring для понимания паттернов трафика
  2. Классификация: Определите 3-5 классов трафика (больше усложняет управление)
  3. Гарантии vs Ceiling: Гарантируйте минимум для критичного трафика
  4. Оставляйте запас: Не распределяйте 100% bandwidth между классами
  5. DSCP маркировка: Используйте стандартные значения для совместимости

Настройка приоритетов

  1. Priority 1-2: Real-time трафик (VoIP, video conferencing)
  2. Priority 3-4: Интерактивный трафик (SSH, DNS, web)
  3. Priority 5-6: Стандартный трафик (email, file transfer)
  4. Priority 7: Низкоприоритетный трафик (backup, torrents)

Производительность

  1. Hardware offload: Используйте аппаратное ускорение где доступно
  2. Минимальная классификация: Сложные match правила снижают производительность
  3. Queue size: Правильно подбирайте размер очередей
  4. Burst размер: Адекватный burst для предотвращения микро-burst потерь

Безопасность

  1. DDoS защита: QoS может помочь минимизировать impact DDoS
  2. Не доверяйте DSCP от клиентов: Переписывайте входящие метки
  3. Rate limiting: Ограничивайте нежелательный трафик

Troubleshooting

Проблема: QoS не работает

Симптомы:

  • Traffic policy применен, но трафик не ограничивается

Решение:

# Проверить применение policy на интерфейс
show interfaces ethernet eth0

# Проверить счетчики
show queueing ethernet eth0

# Убедиться что трафик проходит через интерфейс
monitor traffic interface eth0

# Проверить match правила
show traffic-policy shaper WAN-OUT

Проблема: VoIP качество низкое

Симптомы:

  • Задержки, джиттер, потери пакетов на VoIP

Решение:

# Дать VoIP strict priority
set traffic-policy priority-queue VOIP-PRIORITY class 1 queue-limit '100'
set traffic-policy priority-queue VOIP-PRIORITY class 1 match rtp destination port '10000-20000'

# Минимальный queue-limit для VoIP (уменьшить задержку)
set traffic-policy shaper WAN-OUT class 10 queue-limit '50'

# Использовать DSCP EF
set traffic-policy shaper WAN-OUT class 10 set-dscp 'ef'

Проблема: Высокие задержки

Симптомы:

  • Ping latency высокий даже при низкой нагрузке

Решение:

# Уменьшить размеры очередей
set traffic-policy shaper WAN-OUT default queue-limit '100'

# Использовать fair-queue для равномерного распределения
set traffic-policy shaper WAN-OUT default queue-type 'fair-queue'

# Включить fq_codel (Flow Queue Controlled Delay)
set traffic-policy shaper WAN-OUT default queue-type 'fq-codel'

Проблема: Неравномерное распределение bandwidth

Симптомы:

  • Один класс получает больше bandwidth чем другие

Решение:

# Проверить сумму bandwidth всех классов
# Сумма не должна превышать total bandwidth

# Проверить priority значения
show traffic-policy shaper WAN-OUT

# Использовать ceiling для ограничения burst
set traffic-policy shaper WAN-OUT class 10 ceiling '50mbit'

Дополнительные ресурсы


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