Redirigere il traffico in ingresso con IPTables

In questo howto affronteremo una problematica che si può incontrare in caso di migrazione dei server. Difatti, nel caso in cui non si disponga di propri indirizzi IP pubblicati attraverso il proprio Autonomous System, nel caso di migrazioni (per esempio nel caso di un trasferimento dei server in un altro datacenter) è necessario modificare l’indirizzo IP dei server… e tutti noi sappiamo che una modifica DNS può impiegare parecchio tempo per essere propagata: anche se usiamo dei TTL bassi, alcuni cache DNS pubblici sovrascrivono i TTL per limitare il traffico prodotto dal’aggiornamento delle zone. Quindi, anche se resta comunque consigliato abbassare i TTL delle zone DNS per minimizzare i tempi di propagazione, è il caso di prevedere un “piano B” per soddisfare temporaneamente anche le richieste dirette verso i vecchi indirizzi ip.

Attraverso questo articolo, spiegherò una semplice procedura per garantire continuità di servizio in caso di trasferimento: l’idea è di posizionare temporaneamente un server che risponda a tutti i vecchi indirizzi IP e che rediriga solo il traffico autorizzato sui nuovi IP.

Per far ciò utilizzeremo un quasiasi linux con IPTables configuarndo nella tabella nat le chain PREROUTING e POSTROUTING.

Assumiamo che abbiate già installato la distribuzione linux e che l’abbiate configurata in modo da rispondere a tutti gli indirizzi ip che è necessario migrare.

La prima cosa da fare è abilitare l’ip forwarding:

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

oppure

# sysctl net.ipv4.ip_forward=1

A questo punto, andiamo a creare le regole di inoltro che desideriamo; ad esempio:

# iptables -t nat -A PREROUTING -s 1.1.1.1 -p tcp --dport 1111 -j DNAT --to-destination 2.2.2.2:1111

in questo caso tutto il traffico in arrivo sull’indirizzo IP 1.1.1.1 sulla porta tcp 1111 sarà inoltrato verso l’ip 2.2.2.2 sempre su porta tcp 1111.

Una vola aggiunte tutte le regole di inoltro desiderate, è necessario abilitare la regola di POSTROUTING per mascherare il traffico di ritorno:

iptables -t nat -A POSTROUTING -j MASQUERADE

ed ecco, il gioco è fatto: disservizio limitato al trasferimento fisico dei server, ma nessun problema causato dalla propagazione delle nuove zone DNS.