Guida MikroTik
Firewall e QoSIntermedio

Mangle — Marking, Policy Routing e DSCP

Il modulo mangle permette di marcare connessioni e pacchetti per il QoS (Queue Tree), di implementare policy routing per load balancing o failover, e di modificare campi header come TTL e DSCP.

Mangle è il modulo di marcatura e modifica dei pacchetti in RouterOS. Non blocca né accetta traffico: marca le connessioni e i pacchetti per consentire ad altri moduli (Queue Tree per il QoS, routing per il policy routing) di trattarli in modo differenziato.

Azioni principali del mangle

  • mark-connection (new-connection-mark) — applica un segno a tutta la connessione. Efficiente perché segna solo il primo pacchetto (connection-state=new), poi i pacchetti successivi ereditano il mark.
  • mark-packet (new-packet-mark) — applica un segno al singolo pacchetto. Il Queue Tree usa questi mark per classificare il traffico nelle code. Limite: max 4096 mark distinti.
  • mark-routing (new-routing-mark) — dirige la connessione verso una tabella di routing specifica (policy routing, load balancing, failover).
  • change-ttl — modifica il TTL (increment/decrement/set). Utile per nascondere la topologia di rete o per gestire CPE dietro il router.
  • change-dscp — imposta i bit DSCP (0-63) per QoS end-to-end (es. EF=46 per VoIP, AF21=18 per streaming).
  • set-priority — imposta la priorità su interfacce VLAN (802.1p) o wireless (WMM).
  • change-mss — modifica il Maximum Segment Size TCP; essenziale per evitare frammentazione su tunnel VPN (imposta a 1300 per tunnel PPPoE/L2TP).

Pattern efficiente: mark-connection poi mark-packet

Marking QoS per Queue Tree — pattern connessione→pacchetto
# ================================================================
# PATTERN DI BASE: marca prima la connessione (solo sul primo pacchetto),
# poi marca tutti i pacchetti della connessione già marcata.
# Questo è MOLTO più efficiente che fare match su ogni singolo pacchetto.
# ================================================================

# PASSO 1: marca la connessione sul primo pacchetto (new)
# Esempio: identifica il traffico VoIP (SIP UDP 5060 e RTP 10000-20000)
/ip firewall mangle add   chain=prerouting   connection-state=new   protocol=udp dst-port=5060   action=mark-connection new-connection-mark=voip_conn   passthrough=yes   comment="Identifica connessioni SIP"

/ip firewall mangle add   chain=prerouting   connection-state=new   protocol=udp dst-port=10000-20000   action=mark-connection new-connection-mark=voip_conn   passthrough=yes   comment="Identifica flussi RTP"

# PASSO 2: marca ogni pacchetto della connessione già identificata
/ip firewall mangle add   chain=prerouting   connection-mark=voip_conn   action=mark-packet new-packet-mark=voip_packet   passthrough=no   comment="Marca pacchetti VoIP per il Queue Tree"

# PASSO 3: il Queue Tree usa il packet-mark per prioritizzare
# (vedi articolo QoS - Queue Tree HTB)

# ----------------------------------------------------------------
# MODIFICA MSS per connessioni PPPoE (previene frammentazione)
# ----------------------------------------------------------------
/ip firewall mangle add   chain=forward   protocol=tcp tcp-flags=syn   tcp-mss=1453-65535   action=change-mss new-mss=1452   passthrough=yes   comment="Clamp MSS per PPPoE (MTU 1492 - 40 = 1452)"

# ----------------------------------------------------------------
# POLICY ROUTING: traffico HTTP/HTTPS via ISP-2 (failover/load balance)
# ----------------------------------------------------------------
/ip firewall mangle add   chain=prerouting   in-interface-list=LAN   connection-state=new   protocol=tcp dst-port=80,443   action=mark-routing new-routing-mark=via-isp2   passthrough=yes   comment="Instrada navigazione web via ISP secondario"

# Nella tabella di routing "via-isp2" deve esserci una default-route
# che punta al gateway del secondo ISP:
/ip route add   dst-address=0.0.0.0/0   gateway=10.0.0.1   routing-table=via-isp2   comment="Default route ISP-2 per policy routing"
Attenzione: mark-routing non funziona con FastTrack — i pacchetti accellerati hardware bypassano il mangle. Se usi policy routing, disabilita FastTrack per quel traffico oppure usa hw-offload=no. Usa sempre passthrough=yes quando vuoi che il pacchetto continui a essere valutato dalle regole successive, passthrough=no (default) per fermarsi alla prima corrispondenza.

Marcare il traffico PER CLIENTE (mangle + Queue Tree)

Lo scenario tipico del WISP: voglio una coda HTB per ogni cliente partendo dal suo IP/subnet, ma senza scrivere a mano centinaia di regole. La tecnica è marcare in mangle distinguendo download (pacchetti DIRETTI verso l'IP del cliente) e upload (pacchetti PROVENIENTI dall'IP del cliente), poi appendere le code al Queue Tree.

Marking per cliente — download e upload separati
# DOWNLOAD del cliente = traffico verso il suo IP, in uscita sulla LAN
# Lo marchiamo in forward sul percorso WAN -> cliente
/ip firewall mangle add   chain=forward   dst-address=100.64.10.5/32   out-interface-list=LAN   action=mark-packet new-packet-mark=dl-mario passthrough=no   comment="Download cliente Mario (100.64.10.5)"

# UPLOAD del cliente = traffico dal suo IP, in uscita sulla WAN
/ip firewall mangle add   chain=forward   src-address=100.64.10.5/32   out-interface-list=WAN   action=mark-packet new-packet-mark=ul-mario passthrough=no   comment="Upload cliente Mario (100.64.10.5)"

# Poi due code nel Queue Tree (download sull'interfaccia LAN, upload sulla WAN):
/queue tree add name=q-dl-mario parent=bridge-lan packet-mark=dl-mario   limit-at=2M max-limit=20M priority=5 comment="DL Mario 20M"
/queue tree add name=q-ul-mario parent=ether1-wan packet-mark=ul-mario   limit-at=1M max-limit=5M priority=5 comment="UL Mario 5M"
Su grandi numeri di clienti, le Simple Queue (target=IP) sono più semplici da gestire del Queue Tree per-cliente: una sola riga gestisce sia DL sia UL ed è dinamicamente aggiornabile via API (utile dal WISP Manager quando cambi piano). Riserva il Queue Tree per cliente alle situazioni in cui serve una gerarchia (es. POP → settore → cliente) o priorità tra classi di traffico dentro la banda del singolo cliente.

DSCP per QoS end-to-end e su link radio Ubiquiti

Sui backhaul radio (airMAX/airFiber, Cambium) la WMM/802.1p prioritizza i pacchetti in base ai bit DSCP/priority. Marcare il VoIP con DSCP EF (46) sul router fa sì che la radio lo gestisca in coda prioritaria, riducendo il jitter sulle chiamate anche quando il link è saturo.

Impostare DSCP e priority per i link radio
# Imposta DSCP EF (46) sul VoIP per QoS end-to-end e WMM radio
/ip firewall mangle add chain=postrouting   connection-mark=voip_conn   action=change-dscp new-dscp=46 passthrough=yes   comment="VoIP -> DSCP EF per WMM/802.1p sui link radio"

# Mappa il DSCP sulla priorità di interfaccia (802.1p) in uscita,
# così la radio/switch lo mette in coda hardware prioritaria
/ip firewall mangle add chain=postrouting   dscp=46 action=set-priority new-priority=6 passthrough=yes   comment="DSCP EF -> priority 6 (voce) su VLAN/WMM"
manglemark-connectionmark-packetmark-routingDSCPpolicy routingQoS markingchange-ttlchange-dscpset-priorityPCCload balancing

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