Рассмотрим примеры настройки Simple Queues (Простых очередей), SQ+Mangle (Простые очереди с маркировкой соединений и пакетов) и Queues Tree (Деревья очередей).
Цвет иконок: использование доступной полосы.
- Зеленый - от 0 до 50%;
- Желтый - от 51 до 75%;
- Красный - от 76 до 100%.
Параметры, на которые стоит обратить внимание:
- Max Limit: может быть < или = общему ограничению скорости, которую выделил провайдер.
- Limit At: это гарантированная скорость, которая не может суммарно со всех детей, быть больше чем верхнее ограничение, т.е. родитель (parent).
- Target: если значение указывается как 0.0.0.0/0 для Simple Queues, то тогда будет неправильно считаться трафик для upload. Чтобы это решить, необходимо в "Dst" указать интерфейс, который смотрит в сторону провайдера.
Kind PCQ:
Классифицирует потоки согласно 5 кортежам (src/dst.addr, src/dst.port, protocol)
- Total Queue Size - Общий размер буфера для очередей в RAM на всех участников.
- Queue Size - Размер буфера для очереди в RAM на одного участника.
- Total Queue Size = Queue Size * Number of Users
Simple Queues:
Позволяет работать с интерфейсами и IP-адресами. Опция "Max Limit" задает общее ограничение скорости, как для определенного клиента, так и для сети или интерфеса. В данном примере у родителя (Parent), задается общая скорость на канал в 100M. С помощью "PCQ", мы сможем поделить общую скорость 100M. PCQ c Rate=0, поделит скорость между участниками поровну, в зависимости от их количества и потребляемой скорости. Если одному участнику необходима скорость 15M, то второй получит 75M, но при условии, что ему столько необходимо. С Rate=5M, каждый участник получит по 5M. Важно учитывать порядок правил, более верхнее правило имеет приоритет над нижними. "Priority" работает только на детях.
/queue simple
- Parent (bridge1+wlan1)
add max-limit=100M/100M name="Parent ISP 100M" queue=pcq-upload-default/pcq-download-default target=bridge1,wlan1
- bridge1
add max-limit=100M/100M name=bridge1 parent="Parent ISP 100M" queue=pcq-upload-default/pcq-download-default target=bridge1
- wlan1
add max-limit=100M/100M name=wlan1 parent="Parent ISP 100M" queue=pcq-upload-default/pcq-download-default target=wlan1
Simple Queues + Mangle:
Промаркируем для примера трафик для SIP-телефонии. Можно воспользоватья двумя способами. 1ый - через "connection-type=sip". 2ой, с помощью "protocol=udp", "dst-port=5060" и "connection-rate=0-120k" (скорость на соединение, т.е. это соединенее не будет больше заданного значения). Их можно одновременно использовать.
/ip firewall mangle
- sip
add chain=prerouting connection-type=sip action=mark-connection new-connection-mark=sip comment=sip
add chain=prerouting protocol=udp dst-port=5060 connection-rate=0-120k action=mark-connection new-connection-mark=sip
Queues Tree:
Настроим приоритезацию по типу трафика с помощью деревьев очередей с использованием PCQ. Такой способ подойдет, когда в сети имеется более одного сегмента, например, "LAN->WLAN", "VLAN5->VLAN6", "VLAN5->WAN". В пределах одного сегмента qos работать не будет.
Имеем скорость тарифного плана в 50 Mbit/s. Нам необходимо, чтобы пользователи гарантированно могли пользоваться SIP-телефонией ( sip-сервер находится за vpn-туннелем) и открывать корпоротивный портал (тоже находится за vpn). Трафику бегающему внутри VPN будет отдан основной приоритет. Для одного соединения SIP-телефонии необходимо в среднем 80Kbit/s, т.к. у нас пока будет 2 пользователя, в будущем 4, то выделим для этого типа трафика полосу размером в 1Mbit/s и гарантированной скоростью в 512k, и назовем SIP и выставим приоритет 1 (max). Следующий тип трафика WEB, выделим для него полосу размером в 50 Mbit/s с приоритетом 2. Т.к. у нас пока только 2 активных пользователя, то мы можем поделить имеющуюся скорость поровну с помощью PCQ Rate со значением 0. Для всего остального трафика, выделяем полосу размером тоже в 50 Mbit/s, но уже с приоритетом 3 и гарантированной скоростью 15 Mbit/s. Аналогично поступим и для трафика бегающего через WAN интерфейс. Таким образом мы получаем, что 2ой пользователь может свободно скачивать торрент (nomark) на полной скорости, но как только первый захочет просмотреть видео (web), то необходимая скорость отнимится от 2, но не больше чем на 35 Mbit/s.
Mangle:
Пример промаркированного трафика.
Трафик проходящий через VPN:
Маркируем входящие соединения в цепочке "input" для протокола "udp" и "Dst.Port:" 1701,500,4500, далее в цепочке "prerouting" в "Connection Mark" используем уже промаркированные соединения и маркируем пакеты с "New Packet Mark:" vpn_out. Для исходящих соединений будет цепочка "output" и те-же порты в "Src.Port:", далее в цепочке "postrouting" маркеруем пакеты с меткой "New Packet Mark:" vpn_in. Аналогично и для протокола "isec-esp".
Обязательно для трафика проходящего через VPN-туннель, например sip, web, nomark, в цепочках "forward", для "In.Interface" указываем маркировку vpn_sip_out, для "Out. Interface" указываем маркировку vpn_sip_in.
При маркеровке "соединений", если используется протокол "TCP", то можно указать - что маркируем только соединения с состоянием "new". При маркировке "пакетов" - устанавливаем "passthrough=no".
Также, чтобы хорошо пройти тест на "Bufferbloat" - в очередях "pcq-download/upload-default" необходимо включить еще и "Dst/Src. Port".
Трафик проходящий через ISP:
Для лучшей производительности, сначала промаркируем "соединения" в цепочке "prerouting", а затем "пакеты", в цепочке "forward" для "download" и "upload" трафика. И т.к. мы знаем, что одно соединение "sip" потребляет в среднем не больше "80Kbit/s", то зададим параметр "connection-rate=0-120k" с запасом.
/ip firewall mangle
- queues - vpn
add action=mark-connection chain=input comment="queues - vpn" dst-port=1701,500,4500 new-connection-mark=queues_vpn_in passthrough=yes protocol=udp
add action=mark-packet chain=prerouting connection-mark=queues_vpn_in new-packet-mark=vpn_out passthrough=no
add action=mark-connection chain=output new-connection-mark=queues_vpn_out passthrough=yes protocol=udp src-port=1701,500,4500
add action=mark-packet chain=postrouting connection-mark=queues_vpn_out new-packet-mark=vpn_in passthrough=no
- queues - vpn (ipsec-esp)
add action=mark-connection chain=input comment="queues - vpn (ipsec-esp)" new-connection-mark=queues_vpn_in_ipsec-esp passthrough=yes protocol=ipsec-esp
add action=mark-packet chain=prerouting connection-mark=queues_vpn_in_ipsec-esp new-packet-mark=vpn_out_ipsec-esp passthrough=no
add action=mark-connection chain=output new-connection-mark=queues_vpn_out_ipsec-esp passthrough=yes protocol=ipsec-esp
add action=mark-packet chain=postrouting connection-mark=queues_vpn_out_ipsec-esp new-packet-mark=vpn_in_ipsec-esp passthrough=no
- queues - sip
add action=mark-connection chain=prerouting comment="queues - sip" connection-rate=0-120k dst-port=5060,10000-20000 new-connection-mark=queues_sip passthrough=yes protocol=udp src-port=""
add action=mark-packet chain=forward connection-mark=queues_sip disabled=yes in-interface-list=ISP new-packet-mark=sip_in passthrough=no
add action=mark-packet chain=forward connection-mark=queues_sip disabled=yes new-packet-mark=sip_out out-interface-list=ISP passthrough=no
- sip внутри VPN;
add action=mark-packet chain=forward connection-mark=queues_sip in-interface-list=VPN new-packet-mark=vpn_sip_out passthrough=no
add action=mark-packet chain=forward connection-mark=queues_sip new-packet-mark=vpn_sip_in out-interface-list=VPN passthrough=no
- queues - web
add action=mark-connection chain=prerouting comment="queues - web" connection-state=new dst-port=80,443,8080 new-connection-mark=queues_web passthrough=yes protocol=tcp
add action=mark-connection chain=prerouting dst-port=443 new-connection-mark=queues_web passthrough=yes protocol=udp
add action=mark-packet chain=forward connection-mark=queues_web in-interface-list=ISP new-packet-mark=web_in passthrough=no
add action=mark-packet chain=forward connection-mark=queues_web new-packet-mark=web_out out-interface-list=ISP passthrough=no
- web внутри VPN;
add action=mark-packet chain=forward connection-mark=queues_web in-interface-list=VPN new-packet-mark=vpn_web_out passthrough=no
add action=mark-packet chain=forward connection-mark=queues_web new-packet-mark=vpn_web_in out-interface-list=VPN passthrough=no
- queues - nomark
add action=mark-connection chain=prerouting comment="queues - nomark" connection-mark=no-mark new-connection-mark=queues_nomark passthrough=yes
add action=mark-packet chain=forward connection-mark=queues_nomark in-interface-list=ISP new-packet-mark=nomark_in passthrough=no
add action=mark-packet chain=forward connection-mark=queues_nomark new-packet-mark=nomark_out out-interface-list=ISP passthrough=no
- nomark внутри VPN;
add action=mark-packet chain=forward connection-mark=queues_nomark in-interface-list=VPN new-packet-mark=vpn_nomark_out passthrough=no
add action=mark-packet chain=forward connection-mark=queues_nomark new-packet-mark=vpn_nomark_in out-interface-list=VPN passthrough=no
Queues Types:
Создаем PCQ очереди на download и upload. PCQ позволяет в пределах Max Limit поделить скорость согласно своей настройке Rate. Rate со значением 0, будет делить трафик поровну, между всеми участниками.
/queue type
add kind=pcq name=pcq_sip pcq-classifier=src-address,dst-address,src-port,dst-port pcq-rate=120k
- Для примера
add kind=pcq name=pcq_download pcq-classifier=dst-address pcq-rate=25M
add kind=pcq name=pcq_upload pcq-classifier=src-address pcq-rate=25M
Queues Tree:
Пример дерева очередей. С приоритетом для трафика проходящего через VPN-туннель.
1. Задаем глобальные лимиты download (IN) и upload (OUT), согласно тарифу провайдера и ставим в Parent - global. Queue Type оставляем по умолчанию default small.
2. Для трафика SIP Max Limit в 1M с приоритетом 4, где 1 это самый высокий, а 8 самый низкий. Родителей (Parent), для download/upload указываем IN и OUT. С гарантированной скоростью Limit At: в 512k.
3. Для трафика WEB устанавливаем Max Limit в 50M с приоритетом 5. Родителями указываем IN и OUT.
4. Для всего остального трафика, ставим приоритет 6 с Max Limit в 50M. Он нам не так важен. Родителями указываем IN и OUT.
5. Если у родителя есть дети, то приоритеты не учитываться. В нашем случае актуально для in-vpn и out-vpn.
6. По аналогии делаем и для VPN, а далее, для проходящего трафика через vpn туннель родителями ставим in_vpn и out_vpn.
/queue tree
-in | -out
add max-limit=50M name=IN parent=global
add max-limit=50M name=OUT parent=global
- sip
add limit-at=512k max-limit=1M name=in_sip packet-mark=sip_in parent=IN priority=4 queue=pcq_sip
add limit-at=512k max-limit=1M name=out_sip packet-mark=sip_out parent=OUT priority=4 queue=pcq_sip
- web
add limit-at=15M max-limit=50M name=in_web packet-mark=web_in parent=IN priority=5 queue=pcq-download-default
add limit-at=15M max-limit=50M name=out_web packet-mark=web_out parent=OUT priority=5 queue=pcq-upload-default
- nomark
add limit-at=15M max-limit=50M name=in_nomark packet-mark=nomark_in parent=IN priority=6 queue=pcq-download-default
add limit-at=15M max-limit=50M name=out_nomark packet-mark=nomark_out parent=OUT priority=6 queue=pcq-upload-default
- vpn -in | -out
add max-limit=50M name=in_vpn packet-mark=vpn_in,vpn_in_ipsec-esp parent=IN queue=pcq-download-default
add max-limit=50M name=out_vpn packet-mark=vpn_out,vpn_out_ipsec-esp parent=OUT queue=pcq-upload-default
- vpn sip
add limit-at=512k max-limit=1M name=in_vpn_sip packet-mark=vpn_sip_in parent=in_vpn priority=1 queue=pcq_sip
add limit-at=512k max-limit=1M name=out_vpn_sip packet-mark=vpn_sip_out parent=out_vpn priority=1 queue=pcq_sip
- vpn web
add max-limit=50M name=in_vpn_web packet-mark=vpn_web_in parent=in_vpn priority=2 queue=pcq-download-default
add max-limit=50M name=out_vpn_web packet-mark=vpn_web_out parent=out_vpn priority=2 queue=pcq-upload-default
- vpn nomark
add limit-at=15M max-limit=50M name=in_vpn_nomark packet-mark=vpn_nomark_in parent=in_vpn priority=3 queue=pcq-download-default
add limit-at=15M max-limit=50M name=out_vpn_nomark packet-mark=vpn_nomark_out parent=out_vpn priority=3 queue=pcq-upload-default
Параметр Limit At позволяет указать гарантированную скорость. Т.е. если мы зададим для трафика nomark Limit At=15M, то скорость для этого типа трафика никогда не будет меньше этого значения.