Guida MikroTik
Firewall e QoSAvanzato

QoS WISP — Queue Tree HTB, PCQ e gestione banda per cliente

Architettura QoS completa per WISP: HTB per garantire banda minima e massima a ogni cliente (limit-at/max-limit), PCQ per condivisione equa della banda condivisa, priorità VoIP, e gestione burst per traffico transiente.

Per un WISP, il QoS non è opzionale: senza gestione della banda, un singolo cliente che scarica in bulk degrada l'esperienza di tutti. RouterOS offre tre strumenti principali: Simple Queue (facile, bidirezionale, per singoli IP), Queue Tree (HTB, per architetture gerarchiche) e PCQ (per condivisione equa automatica tra molti utenti).

Simple Queue — Limite base per singolo cliente

Simple Queue — limite download/upload per cliente
# Simple Queue: limite 20 Mbps download / 5 Mbps upload per singolo cliente
# target = IP del cliente (o subnet)
# max-limit = banda massima (download/upload)
# limit-at = banda garantita (CIR) = almeno questo anche sotto carico
/queue simple add   name="cliente-mario-rossi"   target=192.168.88.101/32   max-limit=20M/5M   limit-at=2M/1M   burst-limit=40M/10M   burst-threshold=15M/3M   burst-time=10s/10s   priority=8/8   comment="Piano 20/5 Mbps con burst"

# BURST SPIEGATO:
# - burst-limit=40M: può scaricare fino a 40 Mbps durante il burst
# - burst-threshold=15M: il burst si attiva se la media scende sotto 15 Mbps
# - burst-time=10s: finestra di calcolo della media (10 secondi)
# Risultato: se il cliente scarica poco (< 15 Mbps in media su 10s),
# i prossimi pacchetti possono andare a 40 Mbps finché la media risale.

# Applica queue a una subnet intera (tutti i clienti di quel segmento)
/queue simple add   name="segmento-nord"   target=10.10.1.0/24   max-limit=100M/30M   limit-at=50M/15M   comment="Segmento clienti area nord - 100/30 totale"

PCQ — Condivisione equa automatica della banda

PCQ (Per Connection Queue) divide automaticamente la banda disponibile in modo equo tra tutti i flussi attivi. Ideale per segmenti condivisi dove non vuoi configurare una queue per ogni cliente ma vuoi evitare che uno monopolizzi la banda.

PCQ — configurazione per equità tra clienti
# ================================================================
# PCQ: crea tipi di queue per download e upload
# ================================================================

# PCQ Download: classifica per IP destinazione (ogni cliente riceve quota equa)
/queue type add   name=pcq-download   kind=pcq   pcq-classifier=dst-address   pcq-rate=0   pcq-limit=50KiB   pcq-total-limit=2000KiB   comment="PCQ download: quota equa per IP destinazione"

# PCQ Upload: classifica per IP sorgente (ogni cliente invia quota equa)
/queue type add   name=pcq-upload   kind=pcq   pcq-classifier=src-address   pcq-rate=0   pcq-limit=50KiB   pcq-total-limit=2000KiB   comment="PCQ upload: quota equa per IP sorgente"

# Applica PCQ alla subnet clienti con limite totale della connessione WAN
# pcq-rate=0 significa: dividi equamente max-limit tra tutti gli IP attivi
/queue simple add   name="clienti-condivisi-pcq"   target=192.168.0.0/24   max-limit=100M/20M   queue=pcq-download/pcq-upload   comment="100 clienti: banda 100/20 Mbps divisa equamente con PCQ"

# Con pcq-rate fisso: imposta un limite PER CLIENTE
# (es. max 1 Mbps download ciascuno, totale gestito dal parent)
/queue type add   name=pcq-1mbps-download   kind=pcq   pcq-classifier=dst-address   pcq-rate=1M   comment="PCQ: max 1 Mbps download per cliente"

Queue Tree HTB — Architettura gerarchica per WISP

Queue Tree HTB — priorità VoIP + banda garantita + best-effort
# ================================================================
# QUEUE TREE HTB — Struttura gerarchica per WISP
# Obiettivo:
#   - VoIP: priorità massima, bassa latenza
#   - Streaming: priorità media, banda garantita
#   - Best-effort (P2P, download): rimanente
# ================================================================

# PASSO 1: Mangle — marca i pacchetti per categoria
# (nella chain prerouting per traffico in download verso i clienti,
#  o forward per traffico in transito)

/ip firewall mangle add chain=prerouting connection-state=new   protocol=udp dst-port=5060   action=mark-connection new-connection-mark=conn-voip passthrough=yes   comment="Mark SIP"
/ip firewall mangle add chain=prerouting connection-state=new   protocol=udp dst-port=10000-20000   action=mark-connection new-connection-mark=conn-voip passthrough=yes   comment="Mark RTP"
/ip firewall mangle add chain=prerouting   connection-mark=conn-voip   action=mark-packet new-packet-mark=pkt-voip passthrough=no   comment="Mark pacchetti VoIP"

/ip firewall mangle add chain=prerouting connection-state=new   protocol=tcp dst-port=80,443,8080   action=mark-connection new-connection-mark=conn-web passthrough=yes   comment="Mark connessioni web"
/ip firewall mangle add chain=prerouting   connection-mark=conn-web   action=mark-packet new-packet-mark=pkt-web passthrough=no   comment="Mark pacchetti web"

# Tutto il resto = best-effort
/ip firewall mangle add chain=prerouting   action=mark-packet new-packet-mark=pkt-bulk passthrough=no   comment="Mark best-effort/bulk"

# PASSO 2: Queue Tree — struttura HTB
# Root parent: interfaccia LAN (download verso clienti)
# max-limit = banda totale disponibile dalla WAN

/queue tree add   name=root-download   parent=bridge-local   max-limit=100M   comment="Root: 100 Mbps totali verso LAN"

# Figlio 1: VoIP — priorità 1 (la più alta), limite garantito 5 Mbps
/queue tree add   name=voip-download   parent=root-download   packet-mark=pkt-voip   limit-at=5M max-limit=15M   priority=1   comment="VoIP: garantito 5M, max 15M, priorità massima"

# Figlio 2: Web — priorità 2, garantito 40 Mbps
/queue tree add   name=web-download   parent=root-download   packet-mark=pkt-web   limit-at=40M max-limit=90M   priority=2   comment="Navigazione web: garantito 40M, max 90M"

# Figlio 3: Bulk/P2P — priorità 8 (la più bassa), usa solo banda residua
/queue tree add   name=bulk-download   parent=root-download   packet-mark=pkt-bulk   limit-at=10M max-limit=100M   priority=8   comment="Best-effort: almeno 10M garantiti, rest se disponibile"

# REGOLA HTB: la somma dei limit-at figli (5+40+10=55M) <= max-limit root (100M)
# Ogni figlio può "prendere in prestito" banda fino al proprio max-limit
# se gli altri figli non la stanno usando.
FastTrack e Queue Tree: a differenza delle Simple Queues (che non funzionano con FastTrack), il Queue Tree applicato a interfacce specifiche funziona correttamente anche con FastTrack attivo — il traffico accelerato hardware viene comunque messo in coda sull'interfaccia di uscita. Questo rende Queue Tree la scelta preferita per WISP con molti clienti.

Come funziona davvero l'HTB: limit-at, max-limit e priority

HTB (Hierarchical Token Bucket) lavora in due passate. Prima passata: garantisce a ogni coda il suo limit-at (CIR, banda minima garantita) nell'ordine di priority (1 = più alta). Seconda passata: distribuisce la banda residua (fino a max-limit, il MIR) di nuovo per priorità. Quindi limit-at è una promessa che HTB mantiene sempre se la somma dei figli ≤ banda del parent; priority conta SOLO per spartire l'eccedenza oltre il limit-at.

  • limit-at (CIR): banda GARANTITA alla coda anche sotto pieno carico. Regola d'oro: la somma dei limit-at dei figli NON deve superare il max-limit del parent, altrimenti la garanzia salta.
  • max-limit (MIR): tetto massimo che la coda può raggiungere prendendo in prestito banda inutilizzata dalle sorelle.
  • priority (1-8): chi serve per primo la banda in prestito. La voce/VoIP va sempre a priorità 1; il bulk/P2P a 8.
  • burst: consente di superare temporaneamente max-limit se la media recente è bassa (migliora la reattività della navigazione).
  • queue-type: con pcq-* come tipo, una singola coda figlia ripartisce equamente tra molti IP (combinazione HTB+PCQ).

Gerarchia WISP completa: POP → settore → cliente

Queue Tree gerarchico con PCQ per i clienti del settore
# ================================================================
# Gerarchia: banda WAN totale -> settori radio -> clienti (equi via PCQ)
# Esempio: 200M download totali, due settori, clienti in PCQ
# ================================================================

# Tipo PCQ che ripartisce per IP destinazione (download)
/queue type add name=pcq-dl kind=pcq pcq-classifier=dst-address pcq-rate=0

# Radice: tutta la banda di download verso i clienti
/queue tree add name=DL-totale parent=bridge-lan max-limit=200M   comment="Download totale verso clienti"

# Settore A: garantiti 80M, fino a 200M se libero
/queue tree add name=DL-settore-A parent=DL-totale   packet-mark=dl-settore-a limit-at=80M max-limit=200M priority=4   queue=pcq-dl comment="Settore A radio - PCQ tra i suoi clienti"

# Settore B: garantiti 80M
/queue tree add name=DL-settore-B parent=DL-totale   packet-mark=dl-settore-b limit-at=80M max-limit=200M priority=4   queue=pcq-dl comment="Settore B radio - PCQ tra i suoi clienti"

# Classe VoIP globale a priorità 1 (taglia trasversale, sopra i settori)
/queue tree add name=DL-voip parent=DL-totale   packet-mark=pkt-voip limit-at=10M max-limit=30M priority=1   comment="VoIP: priorità massima su tutti i settori"

# I packet-mark dl-settore-a/b si creano in mangle in base alla subnet
# del settore (es. src/dst-address del pool radio).

Simple Queue vs Queue Tree: quale scegliere

AspettoSimple QueueQueue Tree
ConfigurazioneFacilissima (target=IP)Richiede mangle + struttura HTB
DirezioneBidirezionale automaticaUna coda per direzione (DL su LAN, UL su WAN)
Gerarchia POP/settoreLimitata (parent)Completa e flessibile
Compatibilità FastTrackNO (va disabilitato)Sì (su interfacce specifiche)
Aggiornamento via APIOttimo (1 oggetto per cliente)Più complesso (mangle + tree)
Quando usarlaPochi/medi clienti, cambio piano frequenteMolti clienti, gerarchia, priorità tra classi
Confronto pratico per il WISP.
Errore classico: somma dei limit-at dei figli MAGGIORE del max-limit del parent → HTB non riesce a garantire i minimi e le code 'sovra-prenotate' non ricevono il CIR promesso. Verifica sempre: Σ(limit-at figli) ≤ max-limit parent. Per il monitoraggio live: /queue tree print stats mostra rate corrente e pacchetti scartati per coda.
Monitoraggio e debug delle code in produzione
# Rate in tempo reale per ogni coda del tree (utile per tarare i limiti)
/queue tree print stats

# Per le Simple Queue: traffico live e code piene
/queue simple print stats

# Monitor continuo di una coda specifica (Ctrl-C per uscire)
/queue simple monitor [find name="cliente-mario-rossi"]

# Quanti pacchetti sta scartando una coda (segno di banda insufficiente)
/queue tree print stats where dropped>0
QoSQueue TreeHTBPCQlimit-atmax-limitburstprioritybandwidth managementSimple Queuepacket-markCIRMIRfairnessWISP

Configura senza fatica con l'AI

In WispOS l'agente AI genera la configurazione RouterOS dalle tue parole e un tutor ti guida passo passo.

Prova WispOS