Guida MikroTik
RoutingBase

Come RouterOS sceglie le rotte: distanza, scope e next-hop ricorsivo

Spiega come RouterOS seleziona la rotta migliore nel RIB tramite distance e metric, come risolve il next-hop via scope/target-scope e la differenza tra RIB e FIB.

RIB e FIB: due tabelle distinte

RouterOS mantiene due strutture dati per il routing. Il RIB (Routing Information Base) raccoglie tutte le rotte note — statiche, connected, OSPF, BGP, RIP — le confronta e sceglie la migliore per ogni prefisso. Il FIB (Forwarding Information Base) contiene solo le rotte attive necessarie per l'inoltro reale dei pacchetti: è la struttura che il kernel/hardware consulta per ogni pacchetto in transito. Capire questa distinzione è il punto di partenza per qualsiasi diagnosi di routing: una rotta può esistere nel RIB ma non essere usata (non in FIB) perché un'altra è stata preferita.

L'ordine di selezione: prefisso, distance, poi metric

Quando un pacchetto deve essere instradato, RouterOS applica i criteri in quest'ordine: (1) longest prefix match — vince sempre la rotta con la maschera più specifica (una /32 batte una /24 che batte una 0.0.0.0/0), a prescindere da tutto il resto; (2) a parità di prefisso, vince la distance più bassa; (3) a parità di distance, per le rotte dello stesso protocollo conta la metric (es. il costo OSPF). Se restano più candidate identiche, scatta l'ECMP (bilanciamento).

Errore classico del neofita: aggiungere una default route più 'preferita' (distance bassa) pensando di sovrascrivere una rotta specifica verso una subnet. Non funziona: il longest prefix match viene PRIMA della distance. Per forzare una destinazione specifica serve una rotta con prefisso uguale o più lungo.

Distance: il criterio di selezione tra protocolli

La distance (preferenza amministrativa) è il criterio usato per scegliere tra rotte allo stesso prefisso provenienti da fonti diverse. Il valore più basso vince. È il modo con cui RouterOS decide, ad esempio, se fidarsi prima di una rotta statica o di una rotta OSPF per lo stesso /24. Valori predefiniti per fonte:

Fonte della rottaDistanceNote
Connected (interfaccia attiva)0Sempre la più fidata; non sovrascrivibile dal RIB
Static route1Modificabile con il parametro distance=
eBGP20Sessione BGP tra AS diversi
OSPF110IGP link-state
RIP120IGP distance-vector (raro nei WISP)
iBGP200Sessione BGP nello stesso AS
Distance amministrativa di default in RouterOS v7
Puoi abbassare la distance di una rotta statica anche a 0, ma evitalo se non sai esattamente cosa fai: rischi di mascherare la rotta connected necessaria a raggiungere il gateway stesso, creando un buco nero. Per il failover usa distance 1 vs 2, non 0.

Scope e target-scope: la risoluzione ricorsiva del next-hop

Molte rotte (es. eBGP, o una statica con gateway non sul link locale) puntano a un next-hop non direttamente connesso. RouterOS deve quindi risolvere ricorsivamente il gateway: cerca nel RIB un'altra rotta che porti a quel gateway. La regola è che il next-hop di una rotta viene risolto solo da rotte il cui scope è ≤ al target-scope della rotta da risolvere. È un meccanismo di sicurezza che evita catene di risoluzione infinite. Valori predefiniti:

Tipo rottascopetarget-scope
Connected010 (non usata per risolvere)
Static / IGP1010
eBGP20030
iBGP20030
Scope e target-scope di default

In pratica: una rotta statica con target-scope=10 viene risolta da una connected (scope=0 ≤ 10) o da un'altra statica/IGP (scope=10 ≤ 10), ma non da una rotta BGP (scope=200 > 10). Questo evita che una rotta appresa via BGP venga usata per risolvere il next-hop di un'altra. Se devi forzare una risoluzione ricorsiva 'lunga' (tipico: recursive next-hop per failover, vedi articolo dedicato) alzi il target-scope della rotta da risolvere.

Visualizzare il RIB e il FIB attivo
# Tutte le rotte nel RIB (incluse le inattive)
/ip/route/print detail

# Solo rotte attive nel FIB (flag A = active)
/ip/route/print where active=yes

# Vedere come viene risolto un next-hop specifico
/ip/route/print detail where gateway=203.0.113.1

# Tabella completa con scope/target-scope (per il debug ricorsivo)
/ip/route/print detail where dst-address=0.0.0.0/0

Leggere i flag della tabella rotte

FlagSignificato
AActive — la rotta è in FIB e viene usata per l'inoltro
SStatic — rotta inserita manualmente
CConnected — derivata da un IP su un'interfaccia attiva
DDynamic — appresa da un protocollo o dal DHCP client
oOSPF
bBGP
+ECMP — fa parte di un gruppo equal-cost
BBlackhole — scarta i pacchetti
Flag principali di /ip/route/print
Diagnosi rapida WISP: se un cliente non naviga, parti SEMPRE da /ip/route/print where active=yes sul router di terminazione. Una rotta 0.0.0.0/0 senza flag 'A' significa default gateway giù (link ISP caduto, o check-gateway che ha disattivato la rotta).
route selectiondistancemetricscopetarget-scopeRIBFIBrecursive next-hopselezione rottarouting tablelongest prefix matchadministrative distance

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