Ora dovrebbe funzionare tutto. Non ci si dimentichi di:
Configurare tutti i client della rete interna affinché usino l'IP interno della macchina Linux come gateway.
Configurare tutti i client affinché usino un eventuale proxy HTTP del provider, un proxy trasparente (ATTENZIONE: ho sentito dire che i proxy trasparenti possono essere molto lenti in caso di reti molto ampie) o Squid fatto girare sul gateway Linux (un'opzione da prendere in considerazione per grosse reti).
Ci si assicuri di specificare un server DNS nella configurazione dei client, altrimenti si otterranno errori circa la mancata risoluzione degli indirizzi. Se il DNS funzionava prima di configurare il masquerading e dopo non funziona più, accade perché il server DHCP del provider non può più fornire l'indirizzo del server DNS.
[OT] Si potrebbe provare semplicemente a inviare un messaggio dhcp broadcast che inoltri ai client l'indirizzo del server DNS (e già che ci siamo anche l'indirizzo del proxy http) senza dover configurare un server DHCP (o anche configurandolo). Mi piacerebbe discuterne con qualcuno via email :)
Grazie a Richard Atcheson per avermi fatto notare la cosa.
Ora si dovrebbe iniziare a pensare alla sicurezza! Prima di tutto si disabiliti il forward generico: "iptables -P FORWARD DROP", quindi ci si informi su come usare iptables, /etc/hosts.allow e /etc/hosts.deny per rendere più sicuro il sistema. ATTENZIONE: non usare la regola di iptables summenzionata se non dopo aver accertato che il masquerading effettivamente funzioni. Si deve permettere esplicitamente il passaggio dei pacchetti dove lo si desidera in caso si voglia negare il forward per default. (Il comando si annulla con "iptables -P FORWARD ACCEPT").
Si permetta l'accesso a qualsiasi servizio che si vuole rendere visibile su Internet.
Per esempio, per permettere l'accesso al web server:
$> iptables -A INPUT --protocol tcp --dport 80 -j ACCEPT $> iptables -A INPUT --protocol tcp --dport 443 -j ACCEPT |
Per consentire l'ident (per connessioni ad irc ecc.):
$> iptables -A INPUT --protocol tcp --dport 113 -j ACCEPT |
Per testare la configurazione:
Provare a connettersi da un client all'indirizzo numerico di un web server. Per esempio uno degli IP di Google è 216.239.33.100. Si dovrebbe ottenere una replica da esso. Per esempio: "ping 216.239.33.100" "lynx 216.239.33.100".
Provare una connessione completa con il nome. Per esempio "ping google.com" "lynx google.com" o usando Internet Explorer o Netscape.
Dove eth0 è la scheda di rete ethernet verso Internet e 123.12.23.43 è l'IP pubblico della macchina.