Un gateway è un sistema di connessione tra reti diverse. Questo termine si riferisce spesso al "punto di uscita" di una rete locale sul percorso obbligato per tutti gli indirizzi IP esterni. Il gateway, è connesso a ciascuna delle reti che collega insieme ed agisce come un router per trasmettere i pacchetti IP tra le varie interfacce.
Quando una rete locale utilizza un intervallo di indirizzi privati (non instradabili su Internet), il gateway deve attuare il mascheramento degli indirizzi in modo che le macchine sulla rete possano comunicare con il mondo esterno. L'operazione di mascheramento è una sorta di proxy operante a livello di rete: ogni connessione in uscita da una macchina interna viene sostituita con una connessione dal gateway stesso (in quanto il gateway ha un indirizzo instradabile verso l'esterno), i dati che passano dalla connessione mascherata vengono inviati alla nuova, ed i dati che ritornano in risposta vengono inviati attraverso la connessione mascherata alla macchina interna. Il gateway utilizza una serie di porte TCP dedicate a questo scopo, di solito con numeri molto elevati (oltre 60000). Ogni connessione proveniente da una macchina interna appare quindi al mondo esterno, come una connessione proveniente da una di queste porte riservate.
Il gateway può anche eseguire due tipi di Network Address Translation (Traduzione degli Indirizzi di Rete o abbreviato NAT). Il primo tipo, Destination NAT (DNAT) consiste nel modificare l'indirizzo IP di destinazione (e/o la porta TCP o UDP) per una connessione (generalmente) in ingresso. Il meccanismo di controllo e tracciatura del collegamento modifica anche i pacchetti successivi nella stessa connessione per assicurare la continuità nella comunicazione. Il secondo tipo di NAT è Source NAT (SNAT), di cui è un caso particolare il masquerading (mascheramento). SNAT modifica l'indirizzo IP sorgente (e/o la porta TCP o UDP) del pacchetto (generalmente) in uscita. Come per DNAT, tutti i pacchetti nella connessione sono opportunamente gestiti dal meccanismo di tracciamento della connessione stessa. Si noti che NAT è rilevante solo per IPv4 e il suo limitato spazio di indirizzi; in IPv6, l'ampia disponibilità di indirizzi riduce notevolmente l'utilità di NAT, consentendo a tutti gli indirizzi "interni" di essere direttamente instradabili su Internet (ciò non implica che le macchine interne siano accessibili, in quanto i firewall intermedi sono in grado di filtrare il traffico).
Basta teoria, andiamo sul pratico. Trasformare un sistema Debian in un gateway è una questione semplice, basta attivare l'apposita opzione nel kernel Linux, mediante il filesystem virtuale /proc/
:
#
echo 1 > /proc/sys/net/ipv4/conf/default/forwarding
Questa opzione può anche essere abilitata automaticamente all'avvio se /etc/sysctl.conf
o un file di configurazione in /etc/sysctl.d/
imposta l'opzione net.ipv4.conf.default.forwarding
su 1
.
Esempio 10.1. Il file /etc/sysctl.conf
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_syncookies = 1
Lo stesso effetto può essere ottenuto per IPv6 semplicemente sostituendo ipv4
con ipv6
nel comando manuale e modificando la riga net.ipv6.conf.all.forwarding
nel file /etc/sysctl.conf
.
Abilitare il mascheramento IPv4 è un'operazione leggermente più complessa che coinvolge la configurazione del firewall netfilter.