NAT: regola di loopback
Affrontiamo una annosa qestione: il Nat e la regola di loopback. Anche se non sapete cos’è, molto probabilmente vi ha causato problemi se accedete ad internet tramite un router.
La regola di loopback è la risposta ad una delle domande più frequenti, quando si parla di NAT e inoltro delle porte TCP: “Il mio indirizzo privato è 192.168.1.0, quello pubblico 85.38.119.122 (invento). Ho una webradio/voglio controllare il PC via UltraVNC/ho un webserver in casa ecc ecc: se utilizzo l’IP privato funziona tutto, se provo con l’IP pubblico non funziona. Perché?”.
La risposta breve è: “Sul tuo router/firewall manca la regola di loopback”.
Il funzionamento del NAT è illustrato nel post linkato qui sopra; in breve possiamo dire che serve per far “uscire” su internet tutta la vostra rete locale con un unico IP pubblico, e si occupa anche del corretto inoltro delle porte. Finché un pacchetto destinato all’IP pubblico arriva dall’esterno non ci sono problemi: si trova dalla parte “giusta” dell’interfaccia e le regole fanno il loro lavoro, inoltrando il traffico all’host locale designato per ascoltare su quella particolare porta. Quando il pacchetto viene generato dall’interno, esso arriva al router che in mancanza della regola di loopback può comportarsi in due modi diversi (dipende dal firmware):
- Decide che il pacchetto è spoofato, e lo scarta senza tanti complimenti.
- Oppure lo inoltra alla sua WAN, battezzata con l’IP pubblico per definizione. Se sulla particolare porta è in ascolto un demone, esso risponde, altrimenti la connessione va in timeout.
In entrambi i casi non abbiamo ottenuto il risultato sperato: anche se nel secondo caso otteniamo una risposta, essa arriva da un server che non è quello che ci interessava.
Per poter raggiungere dall’interno un server locale (pubblicato) tramite il suo IP pubblico (nattato), serve una regola di loopback fatta in questo modo:

Spiega:
- IP Source: è l’IP dal quale proviene la richiesta, tipicamente si tratta dell’host che stiamo utilizzando per interrogare il server. Il suo indirizzo locale (come tutti quelli della Local subnet) viene sostituito con l’IP pubblico (WAN IP).
- IP Destination: è l’IP pubblico sul quale sappiamo essere in ascolto il nostro server. Lo sappiamo perché esiste una regola di NAT “normale” che fa esattamente questo. L’IP pubblico viene sostituito con l’IP privato, quindi il pacchetto non esce dalla LAN.
- Service: in casi più sofisticati si può decidere di tradurre anche la porta TCP su cui ascolta il server, ma questa sezione è meno usata.
Alcuni firewall più sofisticati hanno un ulteriore campo che permette di specificare le porte fisiche inbound e outbound. E’ utile nei casi in cui si disponga di più sottoreti attestate su diverse interfacce.
Naturalmente la regola viene applicata solo nel caso in cui IP Source, IP Destination e Service siano quelli indicati nei campi Original della tabella. Per ciascuna singola regola di NAT “diretto” è necessaria una corrispondente regola di loopback.
Non ho mai trovato un router/firewall di classe SOHO (casa e piccoli uffici), che supportasse esplicitamente la regola di loopback: il mio Netgear DG834 è sufficentemente furbo da creare automagicamente la regola ogni volta che si pubblica un server, quindi non è necessario alcun intervento manuale di configurazione. Altri dispositivi, ad esempio gli ZyXel, aggiungono la regola solo se essa viene abilitata tramite un comando da impartire dalla interfaccia a riga di comando (CLI).
La maggior parte dei router casalinghi, purtroppo, non supporta in alcun modo la regola di loopback. In questo caso dovremo rassegnarci ad interrogare il server solo tramite il suo IP locale.