Il testing non può mai rivelare l'assenza di bug.

— Edsger Wybe Dijkstra

Default gateway condizionale

http://www.stenoweb.it/files/blog/shell.jpg Supponiamo di avere un server Linux con più di una interfaccia ethernet (eth0 e eth1) verso internet. Tipica situazione in cui volete implementare una soluzione di backup attivando due connessioni con altrettanti provider. Di default possiamo definire solo un default gateway, il che è sufficente per i servizi in uscita, tuttavia se riceviamo traffico in entrata, ad esempio verso i servizi di posta, ci sono dei problemi. Vediamo il perchè.

Supponiamo di avere questa situazione :

  • eth0, ip pubblico 10.10.1.2, default gateway, provider 1
  • eth1, ip pubblico 10.20.1.2, "backup", provider 2

Ora, per il traffico entrante su eth0 non c'e' problema: tutto funziona regolarmente. Ma il traffico entrante da eth1 ? Supponiamo facciate un normale "ping" su eth1 dall'esterno: il traffico di ritorno esce da eth0 (default gateway) e non da eth1. Questo è male: il ping non funziona. Allo stesso modo dall'esterno su 10.20.1.2 non funzionerà nemmeno una connessione SSH, la posta e il resto. Magari avete messo due record MX nel DNS del provider ma non serve ad un tubo, il record MX che punta all'indirizzo di eth1 non funzionerà mai. Ma che backup del c...o :)

Quello che ci serve è che la risposta alle richieste su eth0 esca da eth0, quella su eth1 esca da eth1. In buona sostanza, nel nostro caso, dobbiamo "switchare" il default gateway quando le richieste arrivano da eth1.

Vediamo come si fà.

Policy routing

Qui ci addentriamo in campo minato, se vi interessa l'argomento approfondite pure il seguito.
Operiamo con il comando ip che dovrebbe già essere installato nel vostro server, vediamo se è vero :

ip route show

dovreste ottenere la vostra tabella di routing "di default". Ho specificato "di default" di proposito, perchè di tabelle se ne possono fare diverse e "switchare" all'occorrenza tra una e l'altra in base a delle regole.

Ma guarda un po', proprio quello che ci serve !

Risolviamo il problema

Cominciamo con il creare una nuova tabella di routing :

sudo echo 1 net2 >> /etc/iproute2/rt_tables

Questo ha aggiunto una riga nel file /etc/iproute2/rt_tables che associa un numero alle tabelle di routing. Possiamo dare una occhiata:
sudo nano /etc/iproute2/rt_tables

#

  1. reserved values

#
255 local
254 main
253 default
0 unspec
#

  1. local

#
#1 inr.ruhep
1 net2


e possiamo notare che contiene dei valori riservati per le tabelle "istituzionali" (da non modificare!) e la nostra nuova "net2".

Ora andiamo ad aggiungere la route che ci serve nella nuova tabella:

ip route add default via 10.20.1.2 dev eth2 table net2

e aggiungiamo una regola :
sudo ip rule add from 10.20.1.2/32 table net2

che recita così :

Amico, attiva la tabella "net2" che imposta il default gateway su eth2 se il traffico arriva da 10.20.1.2

Facile no ? :D

Controlliamo quanto abbiamo fatto

Ora vediamo qualche comando:

Questo vi mostra la tabella di routing "net2"

sudo ip route show table net2

Questo vi mostra quella principale (che è lo stesso che fare route -n):

sudo ip route show table main

e, infine, possiamo vedere le regole :

sudo ip rule show

in cui dovrebbe balzarvi all'occhio qualcosa del genere :
32765: from 10.20.1.2/32 lookup net2

che è la nostra nuova e fiammante regola.

Congratulazioni ! Ora abbiamo due default gateway che si attivano secondo necessità ! Wow ...

Maggiori informazioni e altri esempi qui.

Byez.

Credo che ci sia qualche errore nel tuo articolo perche io mi sto trovando di fronte ad una situazione simile ma tentando di applicare la tua guida non funziona cmq, anzi, ho hotato che la rete va e viene in continuazione.

Uhm... forse ho semplificato troppo ? Ora non riesco a verificare.
Prova a dare un occhio al documento collegato.
http://www.linuxhorizon.ro/iproute2.html

il mio problema è il seguente:

ho un default gateway MA supponiamo che voglia solo per YUM (ovvero per fare upgrade) in quel momento o "settato" in modo permanente un altro default gateway che mi serve per utilizzare yum secondo voi come posso fare?