ALTQ Traffic Shaper в pfSense - визарды и настройка QoS

ALTQ (Alternate Queuing) - фреймворк управления очередями, встроенный в pf (packet filter) FreeBSD. В pfSense ALTQ обеспечивает приоритизацию трафика, гарантированную полосу пропускания для критичных приложений и иерархическое распределение пропускной способности канала. ALTQ работает через систему очередей: трафик классифицируется правилами файрвола и направляется в соответствующие очереди, каждая из которых имеет собственные параметры приоритета и полосы пропускания.

Принципиальное отличие ALTQ от Limiters заключается в возможности заимствования полосы пропускания. Если очередь VoIP не использует выделенные ей 2 Mbit/s, эта полоса автоматически перераспределяется между другими очередями. Limiters не поддерживают такого поведения - неиспользованная полоса пропускания в dummynet pipe пропадает.

Внимание:

ALTQ тесно связан с драйверами сетевых адаптеров. Не все драйверы поддерживают ALTQ - перед настройкой необходимо убедиться в совместимости используемых сетевых карт. Активация ALTQ снижает максимальную пропускную способность межсетевого экрана, поскольку обработка очередей создаёт дополнительную нагрузку на процессор.

Типы планировщиков

pfSense поддерживает четыре типа планировщиков ALTQ. Планировщик определяет алгоритм распределения полосы пропускания между очередями.

PRIQ (Priority Queuing)

Простейший тип планировщика. Все очереди располагаются на одном уровне непосредственно под корневой очередью - иерархическая вложенность не поддерживается. Каждой очереди назначается приоритет от 0 до 15, где 15 - наивысший приоритет. Очереди с более высоким приоритетом обслуживаются в первую очередь.

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

Недостатки: жёсткий приоритет без механизма справедливости. Очереди с высоким приоритетом могут полностью вытеснить трафик очередей с низким приоритетом (starvation). PRIQ не учитывает полосу пропускания - распределение основано исключительно на приоритетах.

Применение: сценарии, где необходима безусловная приоритизация одного типа трафика над другим и полоса пропускания канала достаточна для предотвращения голодания низкоприоритетных очередей.

CBQ (Class-Based Queuing)

Поддерживает иерархическую структуру очередей с возможностью заимствования полосы пропускания от родительской очереди. Приоритеты назначаются в диапазоне от 0 до 7. Очереди с одинаковым приоритетом обслуживаются по принципу round-robin.

Сумма полосы пропускания дочерних очередей не должна превышать полосу пропускания родительской очереди. Дочерние очереди могут заимствовать неиспользованную полосу пропускания у родительской очереди, но не у соседних (sibling) очередей.

Достоинства: поддержка иерархии, заимствование полосы, предсказуемое поведение.

Недостатки: не гарантирует минимальную полосу пропускания в абсолютном выражении - только пропорциональное распределение с заимствованием.

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

HFSC (Hierarchical Fair Service Curve)

Наиболее функциональный планировщик. Поддерживает иерархическую структуру очередей и предоставляет гарантии минимальной полосы пропускания через механизм service curves. HFSC оперирует тремя типами кривых обслуживания:

Upper Limit - жёсткий потолок полосы пропускания. Трафик очереди не может превысить это значение. Параметр m1 ограничивает burst, d задаёт длительность burst в миллисекундах, m2 определяет постоянный потолок.

Real Time - гарантированная минимальная полоса пропускания для дочерних очередей. Значение m2 в real-time curve не должно превышать 30% полосы пропускания родительской очереди. Этот механизм обеспечивает минимальную гарантированную полосу для критичного трафика.

Link Share - распределение полосы пропускания после выполнения real-time гарантий. Определяет, как неиспользованная полоса распределяется между очередями.

Достоинства: гарантированная полоса пропускания, гибкое управление burst, наиболее полный контроль над распределением ресурсов.

Недостатки: сложность настройки, необходимость точного расчёта параметров service curves.

Применение: VoIP, видеоконференции, среды с жёсткими требованиями к качеству обслуживания (QoS), где необходима абсолютная гарантия полосы пропускания.

FAIRQ (Fair Queuing)

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

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

Достоинства: справедливое распределение предотвращает голодание низкоприоритетного трафика.

Недостатки: не поддерживается визардом - требуется исключительно ручная настройка.

Применение: сценарии, где справедливость распределения важнее строгой приоритизации.

Сравнение планировщиков

ХарактеристикаPRIQCBQHFSCFAIRQ
Иерархия очередейНет (плоская)ДаДаОграниченная
Диапазон приоритетов0-150-7-0-7
Заимствование полосыНетДаДаНет
Гарантия полосыНетНетДа (real-time curve)Нет
Контроль burstНетНетДа (m1/d параметры)Нет
Настройка через визардДаДаДаНет
Сложность настройкиНизкаяСредняяВысокаяСредняя
Риск starvationВысокийНизкийНизкийНизкий

Настройка через визард

Визард Traffic Shaper - рекомендуемый способ первоначальной настройки ALTQ. Визард создаёт набор очередей и правил floating для наиболее распространённых сценариев приоритизации.

Доступ к визарду

Перейти в Firewall > Traffic Shaper > Wizards. pfSense предоставляет несколько вариантов визарда:

  • Traffic Shaper Wizard - основной визард для настройки приоритизации трафика
  • Multiple LAN/WAN - визард для конфигураций с несколькими WAN или LAN интерфейсами

Шаги визарда

Шаг 1: Выбор интерфейсов

Указать WAN-интерфейс (или несколько, при multi-WAN конфигурации) и LAN-интерфейс. Для каждого WAN-интерфейса визард создаст отдельный набор очередей.

Шаг 2: Скорости канала

Указать скорость upload и download для WAN-соединения. Рекомендуется указывать 85-95% от реальной скорости канала. Указание полной скорости приводит к буферизации в оборудовании провайдера, что нивелирует эффект приоритизации.

Выбрать тип планировщика. Для большинства сценариев рекомендуется HFSC (обеспечивает гарантии полосы пропускания) или PRIQ (простая приоритизация без гарантий).

Шаг 3: VoIP

Настройка приоритизации VoIP-трафика. Визард предлагает выбрать провайдера VoIP из предопределённого списка или указать параметры вручную. При активации этого шага VoIP-трафик получает наивысший приоритет.

Параметры, доступные на этом шаге:

  • Enable - включить приоритизацию VoIP
  • Provider - выбор из списка известных VoIP-провайдеров (определяет порты и протоколы)
  • Connection Upload/Download - полоса пропускания, выделяемая для VoIP

Шаг 4: Penalty Box

Penalty Box позволяет принудительно ограничить определённые IP-адреса или подсети, помещая их в очередь с наименьшим приоритетом. Трафик хостов, помещённых в Penalty Box, обслуживается только при наличии свободной полосы пропускания.

  • Enable - включить Penalty Box
  • Address - IP-адреса или подсети для помещения в Penalty Box
  • Bandwidth - максимальная полоса пропускания для Penalty Box (в процентах от общей или в абсолютных значениях)

Шаг 5: P2P Networking

Настройка ограничения P2P-трафика (BitTorrent и подобных протоколов). P2P-трафик помещается в очередь с низким приоритетом.

  • Enable - включить ограничение P2P
  • Bandwidth - полоса пропускания для P2P-трафика

Внимание:

Обнаружение P2P-трафика основано на известных портах и протоколах. Зашифрованный P2P-трафик на нестандартных портах может не определяться корректно и обрабатываться как обычный трафик.

Шаг 6: Категории трафика

Визард предоставляет настройку приоритетов для стандартных категорий:

  • Games - трафик онлайн-игр (высокий приоритет)
  • Other networking protocols - ICMP, DNS, SNMP (средний-высокий приоритет)
  • Multimedia/Streaming - аудио и видеостриминг
  • Work/Business - HTTPS, IMAP, SMTP, SSH (средний-высокий приоритет)

Для каждой категории можно задать:

  • Включение/отключение приоритизации
  • Полосу пропускания (при использовании HFSC или CBQ)

Шаг 7: Применение

Визард генерирует очереди и floating rules и применяет конфигурацию. Все существующие очереди и правила шейпера удаляются и заменяются новыми.

Внимание:

Повторный запуск визарда полностью перезаписывает текущую конфигурацию шейпера. Все ручные изменения очередей и правил будут утеряны. Перед запуском визарда рекомендуется создать резервную копию конфигурации в Diagnostics > Backup & Restore.

Ручная настройка очередей

После создания базовой конфигурации визардом или при необходимости тонкой настройки очереди могут быть созданы и отредактированы вручную.

Создание корневой очереди

  1. Перейти в Firewall > Traffic Shaper > By Interface
  2. Выбрать интерфейс (WAN или LAN)
  3. Настроить корневую очередь:
    • Scheduler Type - тип планировщика (PRIQ, CBQ, HFSC или FAIRQ)
    • Bandwidth - общая полоса пропускания интерфейса
    • Queue Limit - максимальное количество пакетов в очереди
  4. Сохранить

Создание дочерних очередей

  1. Выбрать корневую очередь в дереве интерфейса
  2. Нажать Add new Queue
  3. Настроить параметры:
    • Queue Name - имя очереди (без пробелов)
    • Priority - приоритет (зависит от типа планировщика)
    • Bandwidth - полоса пропускания для CBQ/HFSC
    • Bandwidth Type - единицы (%, Kbit/s, Mbit/s)
    • Queue Limit - предел очереди в пакетах
    • Default Queue - отметить одну очередь как очередь по умолчанию (для неклассифицированного трафика)
  4. Сохранить

Параметры HFSC Service Curves

При использовании HFSC для каждой дочерней очереди доступны три кривые обслуживания:

Upper Limit Service Curve:

  • m1 - burst bandwidth (Kbit/s)
  • d - burst duration (ms)
  • m2 - steady-state bandwidth cap (Kbit/s)

Real Time Service Curve:

  • m1 - initial burst guarantee
  • d - burst duration
  • m2 - minimum guaranteed bandwidth (не более 30% от родительской очереди)

Link Share Service Curve:

  • m1 - burst sharing bandwidth
  • d - burst duration
  • m2 - steady-state share

Для типичных сценариев достаточно задать только параметр m2 в каждой кривой, оставив m1 и d нулевыми.

Назначение трафика в очереди

Трафик направляется в очереди через правила файрвола. Существует два метода:

Floating rules с действием Match:

  1. Перейти в Firewall > Rules > Floating
  2. Создать правило с действием Match (не Pass и не Block)
  3. Указать параметры классификации трафика (порты, протоколы, адреса)
  4. В параметрах правила выбрать Ack Queue и Queue
  5. Правило Match не влияет на пропуск или блокировку трафика - оно только классифицирует пакеты и направляет их в соответствующие очереди

Правила интерфейсов с действием Pass:

  1. В существующем правиле Pass на вкладке интерфейса
  2. В разделе Advanced выбрать Ack Queue и Queue
  3. Пакеты, совпавшие с этим правилом, будут направлены в указанную очередь

Ack Queue используется для выделения TCP ACK-пакетов в отдельную очередь. Это рекомендуемая практика, поскольку задержка ACK-пакетов существенно снижает производительность TCP.

DiffServ и DSCP маркировка

ALTQ поддерживает маркировку пакетов значениями DSCP (Differentiated Services Code Point). Маркировка полезна при взаимодействии с провайдером или вышестоящим маршрутизатором, поддерживающим DiffServ.

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

DSCP значениеPHB классНазначение
EF (46)Expedited ForwardingVoIP, видео реального времени
AF41 (34)Assured Forwarding 4Видеоконференции
AF31 (26)Assured Forwarding 3Потоковое видео
AF21 (18)Assured Forwarding 2Транзакционные данные
AF11 (10)Assured Forwarding 1Объёмные данные
CS1 (8)Class Selector 1Фоновый трафик (backup, P2P)
BE (0)Best EffortТрафик по умолчанию

Настройка DSCP маркировки

Маркировка настраивается в параметрах очереди. Пакеты, попавшие в очередь, маркируются указанным значением DSCP при выходе с интерфейса.

Маркировка входящего трафика от провайдера может использоваться для классификации - pfSense может считывать DSCP-метки входящих пакетов и направлять их в соответствующие очереди на основании правил файрвола с фильтрацией по DSCP.

Аппаратные ограничения

Совместимость драйверов NIC

ALTQ работает только с сетевыми адаптерами, драйверы которых поддерживают фреймворк ALTQ. Наиболее распространённые совместимые драйверы:

ДрайверАдаптерыСовместимость с ALTQ
igbIntel I350, I210, I211Да
emIntel PRO/1000Да
ixIntel 10G (X520, X540)Да
reRealtek 8111/8168Да
bgeBroadcom BCM57xxДа
vtnetVirtio (виртуализация)Да
vmxVMware VMXNET3Да
ixlIntel X710, XL710Проверить версию

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

Для проверки совместимости конкретного адаптера следует обратиться к странице System > General Setup и определить имя драйвера интерфейса, затем проверить его наличие в списке совместимых драйверов в документации Netgate.

Влияние на производительность

Активация ALTQ снижает максимальную пропускную способность межсетевого экрана. На оборудовании с процессорами ARM или Atom снижение может достигать 30-50%. На серверном оборудовании с процессорами Xeon влияние менее значительно, но всё равно присутствует.

Рекомендации:

  • На каналах свыше 1 Gbit/s оценить, достаточна ли производительность оборудования с активным ALTQ
  • Для каналов свыше 10 Gbit/s ALTQ, как правило, непрактичен - следует использовать Limiters или внешнее оборудование QoS
  • Провести нагрузочное тестирование после активации шейпера

Мониторинг очередей

Status > Queues

Страница Status > Queues отображает состояние всех активных очередей в реальном времени:

  • Название очереди и её место в иерархии
  • Текущая загрузка (в процентах от выделенной полосы пропускания)
  • Количество пакетов в очереди
  • Счётчик отброшенных пакетов (drops)
  • Графики загрузки

Высокое значение drops указывает на недостаточную полосу пропускания для данной очереди. Если drops растут в критичных очередях (VoIP, интерактивный трафик) - необходимо пересмотреть распределение полосы пропускания.

Интерпретация графиков

Для корректной работы шейпера график корневой очереди должен показывать загрузку, близкую к 100%, в моменты пиковой нагрузки. Если корневая очередь загружена менее чем на 50% в периоды нагрузки - значение общей полосы пропускания установлено слишком высоко, и шейпер не выполняет свою функцию.

Диагностика проблем

Визард не применяет конфигурацию

  1. Убедиться, что драйвер NIC совместим с ALTQ. Проверить System > General Setup для определения драйвера.
  2. Проверить журнал системы (Status > System Logs) на наличие ошибок, связанных с ALTQ.
  3. Убедиться, что указанные скорости upload/download корректны и не превышают физические возможности канала.

Очереди созданы, но трафик не приоритизируется

  1. Проверить, что floating rules с действием Match созданы и активны (Firewall > Rules > Floating).
  2. Убедиться, что трафик совпадает с правилами классификации - проверить в Diagnostics > States.
  3. Проверить Status > Queues - если трафик не попадает в целевые очереди, правила классификации некорректны.
  4. Убедиться, что одна из очередей назначена как Default - неклассифицированный трафик попадает в неё.

Высокие drops в очередях

  1. Drops - нормальное явление для очередей с низким приоритетом при высокой нагрузке.
  2. Drops в очередях с высоким приоритетом указывают на недостаточную выделенную полосу пропускания.
  3. Увеличить полосу пропускания для очереди или пересмотреть распределение.
  4. Проверить, что общая скорость канала указана корректно (85-95% от реальной).

Несовместимый драйвер NIC

Если сетевой адаптер не поддерживает ALTQ:

  1. Использовать Limiters вместо ALTQ - они не зависят от драйверов
  2. При необходимости приоритизации - рассмотреть замену сетевого адаптера на совместимый (Intel igb, em или ix)
  3. В виртуальных средах - убедиться, что используется драйвер vtnet (KVM/QEMU) или vmx (VMware)

Связанные разделы

  • Traffic Shaper в pfSense - обзор механизмов управления полосой пропускания, сравнение ALTQ и Limiters
  • Limiters - ограничение полосы пропускания per-IP и per-subnet через dummynet
  • Правила файрвола - создание правил и floating rules для классификации трафика
Last updated on