linux user group brescia

immagine del castello

Archivio della mailing list

PortForwarding

Luca Giuzzi giuzzi a tartagliap.dmf.bs.unicatt.it
Mer 4 Apr 2001 16:08:45 UTC
> 
> Stò cercando un tool che mi faccia il forwarding di una richiesta ip da una 
> macchina ad un'altra macchina.
> Per ora stò usando un fastforward minimale che funziona bene.
> Però tale tool non considera (se non erro) la possibilità di diversi ip e eth 
> vituali.
> Si binda alla porta della macchina e redireziona tutti i pacchetti.
> Io vorrei che,per esempio,i pacchetti in arrivo sulla eth0 porta 80 fossero 
> rigirati alla macchina X (non necessariamente in una lan,anche una macchina 
> publica su internet,fosse pure www.microsoft.com),mentre quelli della eth0:1 
> porta 80 su un'altra (www.linux.org).
> Qualcuno ha esperienze?

Mah... il modo migliore e' tramite le funzionalita' di NAT di iptables.
Premessa: ti serve il packet forwarding attivo, innanzi tutto.
(echo "1" > /proc/sys/net/ipv4/ip_forward)

Il problema e' che iptables NON gestisce le interfaccie aliasate (ethx:y)
ma a questo si puo' porre rimedio specificando gli indirizzi di destinazione
 della connessione.

Esempio pratico

iptables -A PREROUTING -t nat -j DNAT -p tcp --dport 80 --destination
 ip_di_eth0 --to-destination macchina_esterna:80

in questo modo i pacchetti indirizzati alla 80 della tua macchina e che
 hanno come ip di destinazione ip_di_eth0 vanno sulla 80 della macchina
 esterna. Problema: il server risponde all'host che ti ha contattato ma
 non ha l'ip giusto... la connessione non funziona... 

iptables -A POSTROUTING -t nat -j SNAT -p tcp --dport 80 --destination
 macchina_esterna --to-source ip_di_eth0

adesso i pacchetti hanno come IP di origine quello della tua macchina...
 bene! Arrivano a te (e non direttamente all'host remoto), ma tu non 
 sai che fartene :((

iptables -A POSTROUTING -t nat -j SNAT -p tcp --sport 80 --source 
 macchina_esterna --to-source ip_di_eth0

adesso, finalmente i pacchetti escono dalla tua macchina con l'IP giusto
 (il suo) e la connessione funziona!

L'output di iptables -L -t nat
 a questo punto deve assomigliare al seguente:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             tua_macchina         tcp dpt:www to:ip_macchina_remota:80

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       tcp  --  anywhere             macchina_remota       tcp dpt:www to:ip_tua_macchina
SNAT       tcp  --  macchina_remota      anywhere              tcp spt:www to:ip_tua_macchina

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Ove
 ip_tua_macchina e' l'ip di eth0 (o eth0:1, etc. etc.) mentre tua_macchina/
 macchina_remota e' il nome delle macchine come risolto dal dns (oppure l'ip).

Ciao,
 lg
> 
> Giulio
> 
> -- 
> _____________________________________________________________
> Fontana GiulioMaria
> System Administrator
> Sinapsi Spa
> Viale Bligny 27, 20136 Milan, Italy, Phone (+39) 02 582095.33



Maggiori informazioni sulla lista Lug