In un precedente post avevo spiegato come è possibile fare load balance su una linux box collegata a due provider differenti con due schede di rete distinte.

Cosa succede se i gateway appartengono alla stessa sotto rete? Problema tirato fuori da Alessandro attraverso i commenti dell’articolo “iproute: load balance verso 2 gateway“.

Supponiamo che l’indirizzo di rete della nostra LAN sia 192.168.1.0/24 e che all’interno ci siano due gateway:

  1. 192.168.1.1 (router di Alice)
  2. 192.168.1.254 (router di Micso)

E’ indispensabile creare le tabelle di routing aggiuntive di iproute editando il file /etc/iproute2/rt_tables:

#
# reserved values
#
255     local
254     main
253     default
# Aggiunte
252     alice
251     micso
# Fine
0       unspec
#
# local
#
#1      inr.ruhep

Disabilitiamo l’rp_filter per l’interfaccia ethernet (nel mio caso eth0):

echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

Abilitiamo l’ip forward (forse non serve):

echo 1 > /proc/sys/net/ipv4/ip_forward

Marchiamo i pacchetti in base al mac address di provenienza:

iptables -t mangle -I PREROUTING -m mac --mac-source 00:1c:a2:e6:dc:10 -j MARK --set-mark 1
iptables -t mangle -I PREROUTING -m mac --mac-source 00:1a:c1:36:a7:c4 -j MARK --set-mark 2

00:1c:a2:e6:dc:10: MAC router di Alice
00:1a:c1:36:a7:c4: MAC router di Micso

Creiamo il routing per i pacchetti marcati:

ip rule add fwmark 2 lookup micso
ip rule add fwmark 1 lookup alice

Adesso aggiungiamo l’ip della macchina linux su cui stiamo lavorando alle due tabelle di routing appena create:

ip rule add from 192.168.1.7 table alice
ip rule add from 192.168.1.7 table micso

Per sicurezza aggiungiamo anche l’ip locale:

ip rule add from 127.0.0.1 table micso
ip rule add from 127.0.0.1 table alice

Cancelliamo la regola di routing di default:

route del default

Tramite iproute settiamo il load balance attraverso i due gateway:

ip route add default scope global nexthop via 192.168.1.1 dev eth0 weight 1 nexthop via 192.168.1.254 dev eth0 weight 1

Eh tutti vissero felici e contenti!:)

Spero di aver dato una mano ad Alessandro e a tutti quelli che sono incappati nella medesima configurazione.

Per finire ricordo che le tabelle di routing  (alice e micso), l’ip della linux box (192.168.1.7) , gli ip dei gateway (192.168.1.1 e 192.168.1.254) ed i MAC address dei 2 router (00:1c:a2:e6:dc:10 e 00:1a:c1:36:a7:c4) devono essere adattati alle proprie esegenze.