Guida MikroTik
RoutingIntermedio

ECMP: bilanciamento del carico su più WAN con rotte a pari costo

Configura ECMP (Equal Cost Multi-Path) in RouterOS v7 per distribuire il traffico su più gateway ISP con la stessa distance, scegliendo la strategia di hash ottimale.

Cos'è ECMP e quando usarlo

ECMP (Equal Cost Multi-Path) permette a RouterOS di usare contemporaneamente più gateway per lo stesso prefisso di destinazione, distribuendo i flussi di traffico tra di essi. A differenza del failover (distance diverse), con ECMP entrambi i link ISP sono attivi in parallelo. È ideale quando si hanno due o più link con capacità simile e si vuole massimizzare la banda aggregata — scenario tipico di un WISP che combina due FTTH o due tratte radio verso il backbone.

Configurazione ECMP con due ISP

Per attivare ECMP è sufficiente aggiungere due rotte verso 0.0.0.0/0 con la stessa distance. RouterOS le raggruppa automaticamente in un gruppo ECMP e le identifica con il flag +.

ECMP dual-WAN — configurazione base
# ISP1 e ISP2 con identica distance: ECMP automatico
/ip/route/add dst-address=0.0.0.0/0 \
  gateway=203.0.113.1 \
  distance=1 \
  check-gateway=ping \
  comment="ISP1-ECMP"

/ip/route/add dst-address=0.0.0.0/0 \
  gateway=198.51.100.1 \
  distance=1 \
  check-gateway=ping \
  comment="ISP2-ECMP"

# Verificare: le rotte con flag '+' formano il gruppo ECMP
/ip/route/print where dst-address=0.0.0.0/0
# Output atteso: flag "A S +" su entrambe le rotte

Strategia di hash: come vengono distribuiti i flussi

RouterOS usa una funzione di hash per assegnare ogni flusso a un gateway, in modo che i pacchetti di una stessa connessione seguano sempre lo stesso percorso (evitando il reordering che danneggerebbe TCP). La granularità si configura globalmente in /ip/settings:

  • Layer3 (src+dst IP): tutti i flussi tra la stessa coppia di host vanno sullo stesso link. Stabile ma sbilanciato se pochi host generano molto traffico.
  • Layer4 (src+dst IP + porte): distribuzione più fine perché distingue le singole connessioni. Migliore per molti flussi brevi (HTTP, DNS) tipici di una platea di clienti.
Impostare la granularità dell'hash ECMP
# Mostra le impostazioni IP correnti
/ip/settings/print

# Hash a livello Layer4 (src/dst IP + porte): distribuzione più uniforme
/ip/settings/set route-cache=yes

# Nota: la granularità ECMP (per-flow su src/dst, eventualmente con porte)
# in RouterOS v7 è gestita dal forwarding; verifica la distribuzione reale
# osservando il traffico sulle due WAN:
/interface/monitor-traffic ether-wan1,ether-wan2
ECMP non garantisce che un SINGOLO download (un flusso TCP) usi entrambi i link: ogni connessione viaggia su un solo path. Il raddoppio di banda si vede solo in aggregato, con molti flussi contemporanei da client diversi. Per uno speed-test single-thread l'utente vedrà la banda di UN link, non la somma — spiegalo al cliente per evitare ticket.

Alternativa: PCC (Per Connection Classifier) via mangle

Quando ECMP non basta (es. vuoi una distribuzione più controllata, o gli ISP hanno gateway che danneggiano l'hash), l'alternativa storica è il PCC: si marcano le connessioni con il mangle distribuendole su due routing mark in base a un hash di src/dst, poi si instradano con il policy routing. È più verboso ma dà controllo totale e si integra bene con il connection tracking.

Load balancing con PCC (2 WAN)
# Marca le connessioni in ingresso dalla LAN, dividendole 2 vie
/ip/firewall/mangle/add chain=prerouting in-interface=bridge-lan \
  connection-state=new dst-address-type=!local \
  per-connection-classifier=both-addresses:2/0 \
  action=mark-connection new-connection-mark=wan1-conn passthrough=yes

/ip/firewall/mangle/add chain=prerouting in-interface=bridge-lan \
  connection-state=new dst-address-type=!local \
  per-connection-classifier=both-addresses:2/1 \
  action=mark-connection new-connection-mark=wan2-conn passthrough=yes

# Trasferisci il mark di connessione in mark di routing
/ip/firewall/mangle/add chain=prerouting connection-mark=wan1-conn in-interface=bridge-lan \
  action=mark-routing new-routing-mark=to-wan1 passthrough=no
/ip/firewall/mangle/add chain=prerouting connection-mark=wan2-conn in-interface=bridge-lan \
  action=mark-routing new-routing-mark=to-wan2 passthrough=no

# Default gateway per ciascuna routing mark (con check-gateway per il failover)
/ip/route/add dst-address=0.0.0.0/0 gateway=203.0.113.1 routing-table=to-wan1 check-gateway=ping
/ip/route/add dst-address=0.0.0.0/0 gateway=198.51.100.1 routing-table=to-wan2 check-gateway=ping

ECMP con check-gateway: failover integrato

Aggiungendo check-gateway=ping a entrambe le rotte ECMP, RouterOS rimuove automaticamente dal gruppo il gateway che non risponde, trasformando l'ECMP in failover automatico. Quando il link si ripristina, il gateway rientra nel gruppo ECMP.

Con ECMP+check-gateway serve una rotta specifica verso ciascun gateway ISP (tipicamente la /30 del link punto-punto) presente come connected, altrimenti il check-gateway potrebbe non risolvere correttamente il gateway. Verifica con /ip/route/print che esistano le connected verso entrambe le WAN.
ECMPequal cost multi-pathload balancingbilanciamento caricomulti-WANhash policyLayer3Layer4gatewaynthpccper connection classifier

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