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
save2. 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
save3. 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
save4. 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
save5. 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
save6. 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
save2. Гостевая сеть с ограничениями
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
save3. 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
save4. 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
saveVK 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
- Анализ трафика: Используйте monitoring для понимания паттернов трафика
- Классификация: Определите 3-5 классов трафика (больше усложняет управление)
- Гарантии vs Ceiling: Гарантируйте минимум для критичного трафика
- Оставляйте запас: Не распределяйте 100% bandwidth между классами
- DSCP маркировка: Используйте стандартные значения для совместимости
Настройка приоритетов
- Priority 1-2: Real-time трафик (VoIP, video conferencing)
- Priority 3-4: Интерактивный трафик (SSH, DNS, web)
- Priority 5-6: Стандартный трафик (email, file transfer)
- Priority 7: Низкоприоритетный трафик (backup, torrents)
Производительность
- Hardware offload: Используйте аппаратное ускорение где доступно
- Минимальная классификация: Сложные match правила снижают производительность
- Queue size: Правильно подбирайте размер очередей
- Burst размер: Адекватный burst для предотвращения микро-burst потерь
Безопасность
- DDoS защита: QoS может помочь минимизировать impact DDoS
- Не доверяйте DSCP от клиентов: Переписывайте входящие метки
- 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 требует тонкой настройки под конкретные требования. Рекомендуется начинать с простых правил и постепенно усложнять на основе мониторинга трафика.