Back to all articles
Tutorial By MikroRadius Team

How to Set Up Bandwidth Management Using Simple Queues on MikroTik

Need to limit internet speed for specific devices or users? MikroTik Simple Queues give you granular control – from per‑IP limits to guaranteed minimum bandwidth. This guide covers queue basics, PCQ, burst, and real‑world examples.

Whether you're running a guest WiFi hotspot, an office network, or a shared apartment connection, controlling bandwidth is essential. One user shouldn't be able to saturate your entire internet link. MikroTik's Simple Queues provide an easy way to set upload/download limits per IP address, per subnet, or even per user (via PPP or hotspot).

What Are Simple Queues?

Simple queues are the most straightforward traffic shaping tool in RouterOS. They work by matching traffic based on:

  • Source and destination IP addresses
  • Interface (e.g., ether1, wlan1)
  • Packet marks (advanced)

Once matched, you can limit max-limit (ceiling) or guarantee burst-limit (temporary higher speed).

Prerequisites

  • A MikroTik router with basic internet access.
  • At least one client device or subnet to test on.
  • WinBox or SSH access.
  • Understanding of your internet speed (e.g., 100 Mbps down / 20 Mbps up).

Step 1: Understanding Queue Parameters

Each simple queue has two directions:

  • Target Upload – traffic from the client to the internet (client sending).
  • Target Download – traffic from the internet to the client (client receiving).

Key settings:

  • max-limit – The absolute maximum speed. Traffic exceeding this is dropped or delayed.
  • burst-limit – A higher temporary speed allowed for a short time.
  • burst-threshold – When average traffic falls below this, burst can be used again.
  • burst-time – How long (in seconds) the burst speed is allowed.

Example: max-limit=10M/5M means 10 Mbps download, 5 Mbps upload.

Step 2: Basic Per‑IP Limit

Suppose you want to limit a single device (192.168.88.100) to 10 Mbps down / 2 Mbps up.

CLI:

/queue simple add name=limit-client target=192.168.88.100/32 max-limit=10M/2M

WinBox: Queues → Simple Queues → Add New → Name: limit-client, Target: 192.168.88.100/32, Max Limit: 10M/2M (Download/Upload).

Note: In WinBox, the order is Target Upload (upload) and Target Download (download).

Step 3: Limit an Entire Subnet

Instead of per‑IP, you can limit all devices in 192.168.88.0/24 to a shared 50 Mbps down / 10 Mbps up.

/queue simple add name=limit-subnet target=192.168.88.0/24 max-limit=50M/10M

All devices share this 50/10 pool. If one device uses 40 Mbps down, the remaining devices split the last 10 Mbps.

Step 4: Per‑IP Dynamic Queues Using PCQ (Per Connection Queue)

Static per‑IP queues become unmanageable with many devices. PCQ dynamically creates a queue for each IP, all with the same limit.

4.1 Create PCQ queue types

/queue type add name=pcq-download kind=pcq pcq-rate=10M pcq-classifier=dst-address
/queue type add name=pcq-upload kind=pcq pcq-rate=2M pcq-classifier=src-address

pcq-classifier=dst-address – limits download per destination IP (client IP).
pcq-classifier=src-address – limits upload per source IP (client IP).

4.2 Apply PCQ to a simple queue targeting the entire subnet

/queue simple add name=pcq-limit target=192.168.88.0/24 queue=pcq-upload/pcq-download

Now every device in that subnet gets its own 2 Mbps upload / 10 Mbps download limit, without creating individual queues.

Step 5: Using Burst for Temporary Speed Boosts

Burst allows a client to go above their max limit for a short period if the average usage is low. Example: limit to 5 Mbps normally, but allow up to 20 Mbps for the first 10 seconds.

/queue simple add name=burst-client target=192.168.88.101/32 max-limit=5M/5M burst-limit=20M/20M burst-threshold=2M/2M burst-time=10s/10s

Interpretation: When average traffic is below 2 Mbps, the client can burst to 20 Mbps for up to 10 seconds. Once the 10 seconds expire, speed drops back to 5 Mbps.

Step 6: Prioritise Critical Traffic (Queue Tree + Simple Queue)

Simple queues can also work with packet marks to prioritise, for example, VoIP or Zoom over web browsing. This requires a mangle rule to mark traffic, then a simple queue that uses the mark.

6.1 Mark VoIP traffic (example: SIP on port 5060)

/ip firewall mangle add chain=forward protocol=udp dst-port=5060 action=mark-packet new-packet-mark=voip

6.2 Create a simple queue that prioritises the mark

/queue simple add name=voip-prio packet-marks=voip max-limit=100M/100M priority=1/1

Lower priority numbers are treated first. Then add a separate queue for other traffic with priority 8.

Step 7: Limiting Total WAN Traffic (Parent Queue)

If your internet connection is 100/20, you should limit total traffic to slightly less than that (e.g., 95/18) to prevent bufferbloat.

/queue simple add name=total-wan target=ether1 max-limit=95M/18M

Then make all other queues children of this one (using parent parameter). In WinBox, drag child queues under the parent.

/queue simple add name=child1 target=192.168.88.100/32 parent=total-wan max-limit=10M/2M

Step 8: Viewing Queue Statistics

Monitor real‑time usage:

/queue simple print stats
/queue simple print where name~"limit"

WinBox: Queues window shows current rates, packets dropped, and queues.

To see which IP is using the most bandwidth:

/tool torch interface=bridge-local

Step 9: Removing a Queue

/queue simple remove [find name=limit-client]

Real‑World Examples

Example 1: Guest WiFi with 5 Mbps per user (PCQ)

/queue type add name=guest-down kind=pcq pcq-rate=5M pcq-classifier=dst-address
/queue type add name=guest-up kind=pcq pcq-rate=1M pcq-classifier=src-address
/queue simple add name=guest-pcq target=192.168.100.0/24 queue=guest-up/guest-down

Example 2: Office – guarantee 10 Mbps for CEO, share rest among staff

/queue simple add name=ceo target=192.168.88.10/32 max-limit=50M/20M
/queue simple add name=staff target=192.168.88.0/24 max-limit=40M/10M

Assuming total WAN is 100/30, CEO gets up to 50/20, staff share 40/10, leaving 10/0 for other traffic.

Example 3: Limit YouTube/Netflix but not browsing (Layer7 – advanced)

This requires L7 regex and is CPU‑intensive. Use address lists of known streaming CDNs instead.

Important Caveats

  • FastTrack breaks simple queues – If you have FastTrack rules in your firewall, traffic bypasses queues. Either disable FastTrack or ensure queues are applied before FastTrack (complex). For most simple queues, disable FastTrack for affected traffic.
  • Queue order matters – If a packet matches multiple queues, the first one in the list applies. Place more specific queues (per IP) above broader ones (subnet).
  • Units: M = Megabytes? No – MikroTik uses bits (lowercase b). 10M = 10 Megabits per second. 1M = 1 Mbps. To specify bytes, use B (e.g., 10MB).

Troubleshooting

  • Queue not limiting: Check if FastTrack is enabled: /ip firewall filter print where action=fasttrack-connection. If found, disable or remove those rules.
  • Limits are inaccurate: Run a speed test while watching /queue simple print stats. Also ensure no other queues are interfering.
  • Burst not working: Verify that burst-threshold is lower than max-limit, and burst-time is set correctly.
  • PCQ not limiting per IP: Confirm that the classifier is correct (dst-address for download, src-address for upload). Also ensure the PCQ queue types are applied in the correct order (upload/download).

Conclusion

Simple queues give you immense control over your network's bandwidth. Start with static per‑IP limits, then graduate to PCQ for large networks, and finally add bursts for a responsive user experience. Combine with firewall marking to prioritise critical applications.

Remember: queues add CPU load. On low‑end routers (e.g., hEX lite, RB750), using PCQ on hundreds of clients may affect throughput. Upgrade hardware or use simpler rules.

For advanced scenarios, explore Queue Trees (hierarchical shaping) and HTB (Hierarchical Token Bucket).

Was this article helpful?