Appunti per la realizzazione di un sistema di bilanciamento delle connessioni

Come bilanciare l'utilizzo di banda di due connessioni internet sfruttando un router mikrotik

La configurazione di rete su cui lavoreremo sarà la seguente:

Analisi della configurazione

Il primo step è quello di assegnare gli opportuni indirizzamenti alle interfacce del router:

/ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=LAN
add address=10.111.0.2/24 network=10.111.0.0 broadcast=10.111.0.255 interface=ISP1
add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=ISP2

Le interfacce ISP1 ed ISP2 rappresentano le due connessioni ad internet, mentre l'interfaccia LAN rappresenta la rete interna.

Per poter indirizzare i pacchetti attraverso la corretta interfaccia, sarà necessario creare dei marcatori attraverso l'uso di opportuni mangle:

/ip firewall mangle
add chain=prerouting dst-address=10.111.0.0/24  action=accept in-interface=LAN
add chain=prerouting dst-address=10.112.0.0/24  action=accept in-interface=LAN
add chain=prerouting in-interface=ISP1 connection-mark=no-mark action=mark-connection \
    new-connection-mark=ISP1_conn
add chain=prerouting in-interface=ISP2 connection-mark=no-mark action=mark-connection \ 
    new-connection-mark=ISP2_conn
add chain=prerouting  in-interface=LAN connection-mark=no-mark dst-address-type=!local \
    per-connection-classifier=both-addresses:2/0 action=mark-connection new-connection-mark=ISP1_conn 
add chain=prerouting  in-interface=LAN connection-mark=no-mark dst-address-type=!local \ 
    per-connection-classifier=both-addresses:2/1 action=mark-connection new-connection-mark=ISP2_conn
add chain=prerouting connection-mark=ISP1_conn in-interface=LAN action=mark-routing \ 
    new-routing-mark=to_ISP1
add chain=prerouting connection-mark=ISP2_conn in-interface=LAN action=mark-routing \
    new-routing-mark=to_ISP2
add chain=output connection-mark=ISP1_conn action=mark-routing new-routing-mark=to_ISP1     
add chain=output connection-mark=ISP2_conn action=mark-routing new-routing-mark=to_ISP2

Al fine di evitare che si generino dei loop sulle interfacce, prima di tutto vengono presi in considerazione i pacchetti che attraversano l'interfaccia LAN nella direzione "uscente", cioè verso un gateway. Questi vengono marcati per ricordare da quale interfaccia sono stati inviati. Purtroppo le regole di mangle non possono essere usati su chain di input, ma le chain di prerouting hanno il difetto di considerare ogni tipo di pacchetto. Per effettuare la selezione si utilizza la regola dst-address-type=!local

Infine scriviamo le route:

/ip route
add dst-address=0.0.0.0/0 gateway=10.111.0.1 routing-mark=to_ISP1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 routing-mark=to_ISP2 check-gateway=ping

Al fine di prevenire il failover di una delle due connessioni è necessario inserire anche le seguenti regole:

/ip route
add dst-address=0.0.0.0/0 gateway=10.111.0.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 distance=2 check-gateway=ping

Infine, sarà necessario inserire le opportune regole di NAT:

/ip firewall nat 
add chain=srcnat out-interface=ISP1 action=masquerade
add chain=srcnat out-interface=ISP2 action=masquerade

Giovanni Ruta (System Integrator)
Responsabile alla progettazione di sistemi per il Building Management per la società Cool Projects.
http://www.coolprojects.it