Markdown source

#Appunti per la realizzazione di un sistema di bilanciamento delle connessioni

<h6>Come bilanciare l'utilizzo di banda di due connessioni internet sfruttando un router mikrotik</h6>

La configurazione di rete su cui lavoreremo sarà la seguente:
<img src="./load_balance_example.jpg" class="img-responsive center-block" width="30%">

##Analisi della configurazione
Il primo step è quello di assegnare gli opportuni indirizzamenti alle interfacce del router:
<pre class="prettyprint">
/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
</pre>
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:
<pre class="prettyprint">
/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
</pre>
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 <i>dst-address-type=!local</i>

Infine scriviamo le route:
<pre class="prettyprint">
/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
</pre>

Al fine di prevenire il failover di una delle due connessioni è necessario inserire anche le seguenti regole:
<pre class="prettyprint">
/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
</pre>

Infine, sarà necessario inserire le opportune regole di NAT:
<pre class="prettyprint">
/ip firewall nat 
add chain=srcnat out-interface=ISP1 action=masquerade
add chain=srcnat out-interface=ISP2 action=masquerade
</pre>

@include='bio_giovanni_ruta'