Guida MikroTik
RoutingIntermedio

Policy Routing: routing table multiple, mangle mark-routing e routing rules

Implementa il policy routing in RouterOS v7 usando /routing/table per creare tabelle custom, mangle con action=mark-routing per marcare i flussi e routing rules per instradare traffico specifico su ISP dedicati.

Cos'è il policy routing e quando serve

Il policy routing (PBR, Policy-Based Routing) consente di instradare il traffico in base a criteri diversi dalla sola destinazione: sorgente IP, interfaccia di ingresso, protocollo, porta, o qualsiasi campo del pacchetto. Casi d'uso tipici WISP: far uscire una VLAN cliente dedicata da un ISP2 separato; mandare il traffico di gestione/management su un link out-of-band; instradare il VoIP sul link a latenza più bassa.

Passo 1: creare la routing table custom

In RouterOS v7 le tabelle di routing si gestiscono nel menu /routing/table (in v6 erano un campo libero, in v7 vanno dichiarate esplicitamente). Il sistema include sempre la tabella main. Il flag fib indica che la tabella ha una propria FIB ed è quindi usabile per il forwarding: senza fib la tabella esiste ma non instrada nulla.

Creare una routing table per ISP2
# Crea la tabella custom per ISP2 (fib obbligatorio per il forwarding)
/routing/table/add name=isp2-table fib

# Aggiungi il default gateway ISP2 nella tabella custom
/ip/route/add dst-address=0.0.0.0/0 \
  gateway=198.51.100.1 \
  routing-table=isp2-table \
  check-gateway=ping \
  comment="Default via ISP2 (policy routing)"

# Verifica
/routing/table/print
/ip/route/print where routing-table=isp2-table

Passo 2: marcare il traffico con mangle (consigliato con connection-mark)

Il firewall mangle usa action=mark-routing per taggare i pacchetti con un routing mark, che seleziona poi la tabella. Per evitare di rivalutare ogni pacchetto è buona pratica marcare prima la connessione (mark-connection) e poi derivare il routing mark dal connection mark: così tutti i pacchetti di una sessione (andata e ritorno della logica applicativa) restano coerenti. La chain prerouting intercetta il traffico transitante; output quello generato dal router.

Marcare una VLAN per il policy routing (pattern connection+routing mark)
# 1. Marca la NUOVA connessione proveniente dalla VLAN speciale
/ip/firewall/mangle/add \
  chain=prerouting \
  src-address=10.20.0.0/24 \
  connection-state=new \
  action=mark-connection \
  new-connection-mark=vlan-isp2 \
  passthrough=yes \
  comment="VLAN speciale -> connection mark"

# 2. Deriva il routing mark dal connection mark (per ogni pacchetto della sessione)
/ip/firewall/mangle/add \
  chain=prerouting \
  connection-mark=vlan-isp2 \
  action=mark-routing \
  new-routing-mark=isp2-table \
  passthrough=no \
  comment="VLAN speciale -> ISP2"
FastTrack e policy routing non vanno d'accordo: una connessione 'fasttracked' bypassa il mangle e quindi non viene più marcata. Se usi il policy routing, escludi dal fasttrack le connessioni che devono essere instradate per policy (oppure non abilitare fasttrack su quel router). È una delle cause più frequenti di 'il policy routing funziona solo sul primo pacchetto'.

Passo 3: routing rules (alternativa più semplice al mangle)

Le routing rules in /routing/rule sono un meccanismo alternativo al mangle, più diretto per casi basati su IP sorgente/destinazione o interfaccia. Le azioni disponibili sono lookup (cerca nella tabella indicata, poi fa fallback a main se non trova), lookup-only-in-table (usa SOLO quella tabella, niente fallback) e drop. Le regole si valutano in ordine di min-prefix/inserimento.

Routing rules basate su IP sorgente
# Tutto il traffico da 10.20.0.0/24 usa isp2-table (con fallback a main se non trova)
/routing/rule/add \
  src-address=10.20.0.0/24 \
  action=lookup \
  table=isp2-table \
  comment="VLAN speciale -> ISP2"

# Variante 'hard': nessun fallback (se ISP2 è giù, il traffico viene scartato)
/routing/rule/add \
  src-address=10.20.0.0/24 \
  action=lookup-only-in-table \
  table=isp2-table

# Visualizzare le regole attive
/routing/rule/print
lookup vs lookup-only-in-table: con 'lookup' se l'ISP2 cade il traffico ricade su main (failover gratuito). Con 'lookup-only-in-table' resta inchiodato all'ISP2 anche se è giù. Per i WISP la prima opzione è quasi sempre preferibile, a meno di requisiti di segregazione stretta (es. un cliente DEVE uscire solo da un certo IP pubblico).
Con policy routing e NAT su più WAN ricordati il doppio srcnat (una regola per interfaccia di uscita): senza, i pacchetti escono dall'ISP2 ma il NAT li mappa con l'IP ISP1 e le risposte vengono scartate. È lo stesso vincolo del failover dual-WAN.
policy routingrouting tablemark-routingmanglePBRsource routingmulti-WAN routingtraffic steeringrouting rulefasttrackconnection mark

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