Guida MikroTik
RoutingAvanzato

Route Filters in RouterOS v7: sintassi if/then, matcher e azioni avanzate

Padroneggia il sistema di route filter in RouterOS v7 con la sintassi script-like if/then/else, i matcher disponibili (dst, protocol, bgp-as-path, ecc.) e le azioni (accept, reject, set distance, set bgp-local-pref).

Architettura dei route filter in v7

I route filter in RouterOS v7 usano una sintassi script-like molto più potente rispetto alla v6. Ogni regola appartiene a una chain (catena) identificata da un nome. Le regole vengono valutate in ordine; se nessuna regola fa accept o reject, il comportamento di default è reject. Le chain sono referenziate dai protocolli (BGP, OSPF) tramite i parametri input.filter e output.filter.

Struttura di una regola

La forma generale è: if ( <condizione> ) { <azioni> } else { <azioni> }. Le condizioni usano operatori logici && (AND), || (OR), not. Le azioni possono modificare attributi prima di accept o reject.

Esempi di route filter in /routing/filter/rule
# 1. Accettare solo prefissi esattamente /24
/routing/filter/rule/add \
  chain=accept-only-24 \
  rule="if (dst-len == 24) { accept } else { reject }"

# 2. Filtrare prefissi troppo specifici o troppo aggregati da BGP
/routing/filter/rule/add \
  chain=bgp-prefix-sanity \
  rule="if (dst-len < 8 || dst-len > 24) { reject } else { accept }"

# 3. Aumentare la distance delle rotte OSPF esterne (tipo E2)
/routing/filter/rule/add \
  chain=ospf-in \
  rule="if (ospf-type ext2) { set distance 150; accept } else { accept }"

# 4. Impostare local-preference per rotte BGP preferite
/routing/filter/rule/add \
  chain=bgp-in-preferred \
  rule="if (dst in 10.0.0.0/8) { set bgp-local-pref 200; accept } else { accept }"

# 5. Rifiutare AS path che contiene AS 65535 (bogon)
/routing/filter/rule/add \
  chain=bgp-in-clean \
  rule="if (bgp-as-path ^.*65535.*) { reject } else { accept }"

# 6. Saltare a un'altra chain (jump)
/routing/filter/rule/add \
  chain=main-in \
  rule="if (protocol bgp) { jump bgp-prefix-sanity }"

Matcher principali disponibili

  • dst / dst-len: prefisso destinazione e lunghezza maschera (es. dst in 192.168.0.0/16, dst-len == 24)
  • protocol: sorgente della rotta (bgp, ospf, static, connected, rip)
  • bgp-as-path: regexp numerica sull'AS path (es. ^65001 = inizia con AS 65001)
  • bgp-input-remote-as / bgp-input-local-as: AS del peer
  • ospf-type: tipo LSA OSPF (ext1, ext2, inter, intra, nssa1, nssa2)
  • afi: address family (ipv4, ipv6, vpnv4, vpnv6)
  • vrf / rtab: VRF o routing table di provenienza
  • rpki: stato validazione RPKI (valid, invalid, unknown)

Azioni principali disponibili

  • accept: accetta la rotta, interrompe la valutazione della chain
  • reject: rifiuta la rotta (non entra nel RIB)
  • return: torna alla chain chiamante (utile con jump)
  • set distance [+/-]N: imposta o incrementa/decrementa la distance
  • set bgp-local-pref N: imposta BGP local preference (usato su iBGP)
  • set bgp-med N: imposta MED (Multi-Exit Discriminator, annunciato ai peer eBGP)
  • set bgp-weight N: imposta peso locale (non annunciato, solo per selezione locale)
  • set gw address: modifica il gateway della rotta
  • append bgp-communities X:Y: aggiunge community BGP
  • delete bgp-communities regexp: rimuove community tramite regexp
In RouterOS v7 la default action di una chain di filtro è REJECT se nessuna regola fa accept esplicito. Aggiungi sempre una regola finale rule="accept" nelle chain che devono lasciar passare le rotte non matchate, altrimenti perdi tutte le rotte inaspettatamente.
route filterrouting filterfilter ruleif thenacceptrejectbgp communitiesas-pathprefix filterdistancelocal-prefpolicy

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