Bandwidth Management with MikroTik Queues: Simple Queue, PCQ and Queue Tree
How do you limit bandwidth on MikroTik? Speed limits with Simple Queue, fair sharing with PCQ, prioritization with Queue Tree + mangle, burst settings, and the number-one reason queues don't work: fasttrack.
How do you limit bandwidth on MikroTik? Speed limits with Simple Queue, fair sharing with PCQ, prioritization with Queue Tree + mangle, burst settings, and the number-one reason queues don't work: fasttrack.
İçindekiler▾
Short answer: MikroTik gives you three tools for rate limiting. Simple Queue for a per-IP/per-user limit, PCQ for fair sharing, and mangle + Queue Tree for prioritization by traffic type. And the number-one reason queues “don’t work” is not the queue, it is fasttrack. In this article we set up all three with real-world business scenarios.
Example environment: a 100/20 Mbps line, office network 192.168.10.0/24, guest network 192.168.20.0/24 (on a separate VLAN; if it isn’t, set up guest network isolation first).
First, the fasttrack truth
The fasttrack rule in the default configuration sends established-connection packets through a CPU-friendly shortcut; those packets never touch the queues. In most setups where someone builds QoS and says “it’s not working,” the queue is correct, the traffic just isn’t reaching the queue.
Your options:
- If you’ll use QoS seriously: disable the fasttrack rule and watch the CPU load (small/medium office routers usually handle it comfortably).
- If you’ll only prioritize specific traffic: exempt that traffic from the fasttrack rule; for example, mark VoIP before the fasttrack rule and add a
!voipcondition to the fasttrack rule viaconnection-mark.
Check: if the /queue simple print stats counters aren’t increasing, the traffic isn’t reaching the queue; the first place to look is the fasttrack rule in the firewall.
Scenario 1: Per-IP speed limit (Simple Queue)
Keep the accounting server’s backup traffic from swallowing the line:
/queue simple add name=backup-server target=192.168.10.50/32 \
max-limit=20M/10M comment="backup server limit"
max-limit=download/upload (from the target’s point of view). Simple Queues are processed in order and the first match wins; if you have a general subnet rule, move the specific IP rule above it.
Scenario 2: Fair sharing for the guest network (PCQ)
Allocate 30 Mbps to the whole guest network and split it equally among active users:
/queue type add name=pcq-down kind=pcq pcq-classifier=dst-address pcq-rate=0
/queue type add name=pcq-up kind=pcq pcq-classifier=src-address pcq-rate=0
/queue simple add name=guest-fair target=192.168.20.0/24 \
max-limit=30M/10M queue=pcq-up/pcq-down comment="guest fair sharing"
pcq-rate=0: the pool is divided equally by the number of active users (with 3 users, about 10 Mbps each). If you also want a per-user cap, fix it with something like pcq-rate=10M. Classifier logic: on downloads it distinguishes users by dst-address, on uploads by src-address.
Scenario 3: VoIP prioritization (mangle + Queue Tree)
Don’t let call quality fall victim to a saturated line. First, mark the traffic:
/ip firewall mangle
add chain=forward dscp=46 action=mark-connection \
new-connection-mark=voip-conn passthrough=yes comment="VoIP (EF) detection"
add chain=forward connection-mark=voip-conn action=mark-packet \
new-packet-mark=voip passthrough=no
add chain=forward action=mark-packet new-packet-mark=other passthrough=no
Then build the hierarchy in the WAN direction (fixing the total at about 95% of the line’s real capacity ensures the queue forms on your side, not on the ISP’s modem):
/queue tree
add name=wan-total parent=ether1 max-limit=19M
add name=voip parent=wan-total packet-mark=voip priority=1 limit-at=2M max-limit=5M
add name=other parent=wan-total packet-mark=other priority=8 max-limit=19M
limit-at is the guaranteed bandwidth, and priority decides who goes first under contention (1 is the highest). The same structure can be built for the download direction if needed.
Simple Queue vs. Queue Tree comparison
| Simple Queue | Queue Tree | |
|---|---|---|
| Setup | Single rule, target IP/subnet | Mangle marking + tree, two layers |
| Direction | Both directions in one rule | A separate structure per direction |
| Use | Per-user/IP limit, fair sharing (with PCQ) | Traffic-type prioritization, hierarchical distribution |
| Processing | Sequential, first match wins | By packet mark |
| Typical scenario | Office/guest speed limit | VoIP/video priority, service-based SLA |
Burst: raising perceived speed cheaply
/queue simple add name=office target=192.168.10.0/24 \
max-limit=50M/15M burst-limit=80M/20M burst-threshold=40M/12M burst-time=16s/16s
The logic: if the average traffic over the last burst-time window is below burst-threshold, the user can climb to burst-limit; once the average passes the threshold, it drops to max-limit. On bursty traffic like web browsing, pages load at burst speed, while a sustained download stays at the limit. Keeping the threshold around 70-80% of the limit gives a balanced result.
Verification
/queue simple print statsand/queue tree print stats: are the counters flowing, are there drops?- Torch (
/tool torch): which IP/port is really filling the line; does your queue plan match the actual traffic? - During a call, deliberately saturate the line (a speed test) and confirm that VoIP quality doesn’t degrade; that is the real test of prioritization.
Limits
A queue only manages the traffic that passes through your router: if the queue forms on the ISP’s side in the download direction (when the line is physically full), there is no magic; that is why we fix the total limits slightly below the line capacity. In multi-location setups and at ISP scale, queue architecture (PPPoE profile integration, address-list-based classes) is a separate design task; we build it as part of our MikroTik Support & Setup service. For your network’s overall design, see the what is MikroTik guide, and for rule-ordering logic, see our firewall article.
Kaynaklar
- Queues: the official RouterOS queue documentation — MikroTik Documentation (2026)
- RouterOS documentation home page — MikroTik Documentation (2026)
Sıkça Sorulan Sorular
Should I use Simple Queue or Queue Tree?+
For a per-user/per-IP speed limit, Simple Queue is enough and easier. If you need prioritization by traffic type (VoIP, video conferencing) or hierarchical bandwidth distribution, you need a Queue Tree with mangle marking. Most SMB scenarios are solved with Simple Queue + PCQ.
Why aren't my queue rules working?+
The number-one reason is fasttrack: fasttracked packets skip the queues and the rule counters stay empty. The fix is to keep the traffic you want to prioritize out of the fasttrack rule, or to deliberately disable fasttrack in a QoS environment. The second common reason is the wrong target: in a Simple Queue, the target must be the IP/subnet on the internal network.
What is PCQ, and when is it used?+
PCQ (Per Connection Queue) is a queue type that automatically and equally splits the total bandwidth among active users. It is the answer to 'fair sharing without writing a separate rule for each user': it is the standard solution for guest WiFi, dorm/hotel networks and shared offices.
How do I limit guest WiFi speed?+
A single Simple Queue targeting the guest network's subnet is enough; if you want equal per-user sharing, set the queue type to PCQ. The guest network should already be on a separate VLAN/subnet; if it isn't, set up network isolation first.
How does burst work?+
Burst grants above-limit speed to short bursts of traffic: as long as the average traffic stays below burst-threshold, the user can climb to burst-limit; once the average exceeds the threshold, the speed drops to max-limit. It noticeably increases perceived speed on bursty traffic like web browsing.
Profesyonel Destek mi Lazım?
Bu konuda yardıma ihtiyacın varsa yanındayız. Kurulum, konfigürasyon ve sorun giderme için ulaş.
