Iptables reindirizza a localhost?


13

Supponiamo che io abbia una rete con un server che instrada tutte le connessioni dall'interno della rete a Internet. Come posso configurare iptables in modo che invece di instradare le connessioni in entrata a Internet, li instrada invece alla porta 8080 di localhost. Tutto l'aiuto è apprezzato.


Il problema è che con il semplice reindirizzamento (indirizzo IP di destinazione NAT) si perderà l'indirizzo IP di destinazione originale. Vuoi configurare un proxy HTTP trasparente o dovrebbe elaborare anche protocolli diversi da HTTP?
pabouk,

Non importa se è trasparente o no
DankMemes,

Il reindirizzamento di tutto il traffico a un proxy è una base per proxy trasparente :)
pabouk,

Ecco un'altra risposta che mi ha davvero aiutato: unix.stackexchange.com/questions/111433/…
Wren T.

Risposte:


6
sysctl net.ipv4.ip_forward=1 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080

1
non usare il grassetto ....

Grazie! Non l'ho ancora provato ma sospetto che mi sia perso il comando di inoltro ip. E la prossima volta, si prega di utilizzare i blocchi di codice, non in grassetto.
DankMemes,

@AlexAntonov, utilizzare i blocchi di codice. Seleziona il testo in modalità modifica e fai clic sull'icona tra parentesi.
DankMemes,

@ZoveGames, scusa, risolto.
Alex Antonov,

2
Ho provato con questo. Ip_forward sysctl non è necessario. Tuttavia, l'opzione route_localnet è qui . Vedo ora che è esattamente ciò che afferma la risposta di Juan Cespedes .
Matt Joiner,

31

che può essere fatto con iptables, ma solo con kernel> = 3.6.

Dovrai fare:

sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

ip_forwardnon è necessario, perché il pacchetto non viene inoltrato, ma se non includi sysctl per route_localnet(che funziona solo in kernel> = 3.6), il pacchetto verrà eliminato dal kernel perché lo considera un "marziano", in arrivo dall'esterno e con un indirizzo di destinazione di 127.0.0.1


Sì, funziona
Nick De Greek,

Non sapevo di route_localnet. Così vecchia scuola e non riuscivo a capire perché ip_forward non funzionasse (sospettavo che non fosse necessario ma provato comunque).
dmourati,

1
Assicurati di salvare net.ipv4.conf.all.route_localnet=1in /etc/sysctl.confcaso contrario non sarà persistente e dopo il riavvio la variabile tornerà a 0, causando il pacchetto viene scartato. Quindi sarebbe molto difficile capire perché ora tutto non funziona ... è successo a me. ;)
vale a dire il

Mi dispiace necro una vecchia domanda ma esiste un equivalente ipv6 net.ipv4.conf.all.route_localnetda utilizzare con ip6tables?
Kebian,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.